![Page 1: Building Modular Java Applications for the Cloud€¦ · Runtime dynamic services High level API. Demo. What about deployment? Provisioning Server. Demo. Auto scaling Enough capacity](https://reader035.vdocuments.mx/reader035/viewer/2022071219/6055cb495bde1a2c3e6c7f06/html5/thumbnails/1.jpg)
Building Modular Java Applications
for the Cloud
![Page 2: Building Modular Java Applications for the Cloud€¦ · Runtime dynamic services High level API. Demo. What about deployment? Provisioning Server. Demo. Auto scaling Enough capacity](https://reader035.vdocuments.mx/reader035/viewer/2022071219/6055cb495bde1a2c3e6c7f06/html5/thumbnails/2.jpg)
Bert Ertman Fellow at Luminis (Netherlands) JUG Leader for NLJUG Java Champion
@BertErtman
About me
![Page 3: Building Modular Java Applications for the Cloud€¦ · Runtime dynamic services High level API. Demo. What about deployment? Provisioning Server. Demo. Auto scaling Enough capacity](https://reader035.vdocuments.mx/reader035/viewer/2022071219/6055cb495bde1a2c3e6c7f06/html5/thumbnails/3.jpg)
Observations !
Extremely agile (first mover advantage)
!Architecture (and code base)
should be able to cope with change
Trend !
Applications tend to grow bigger and more complex !Agile development and refactoring have become more common
![Page 4: Building Modular Java Applications for the Cloud€¦ · Runtime dynamic services High level API. Demo. What about deployment? Provisioning Server. Demo. Auto scaling Enough capacity](https://reader035.vdocuments.mx/reader035/viewer/2022071219/6055cb495bde1a2c3e6c7f06/html5/thumbnails/4.jpg)
This leads to a number of challenges :
Maintenance (long term)
Versioning Dependency
Management
Deployment
![Page 5: Building Modular Java Applications for the Cloud€¦ · Runtime dynamic services High level API. Demo. What about deployment? Provisioning Server. Demo. Auto scaling Enough capacity](https://reader035.vdocuments.mx/reader035/viewer/2022071219/6055cb495bde1a2c3e6c7f06/html5/thumbnails/5.jpg)
![Page 6: Building Modular Java Applications for the Cloud€¦ · Runtime dynamic services High level API. Demo. What about deployment? Provisioning Server. Demo. Auto scaling Enough capacity](https://reader035.vdocuments.mx/reader035/viewer/2022071219/6055cb495bde1a2c3e6c7f06/html5/thumbnails/6.jpg)
Modularity is the answer
![Page 7: Building Modular Java Applications for the Cloud€¦ · Runtime dynamic services High level API. Demo. What about deployment? Provisioning Server. Demo. Auto scaling Enough capacity](https://reader035.vdocuments.mx/reader035/viewer/2022071219/6055cb495bde1a2c3e6c7f06/html5/thumbnails/7.jpg)
The case for modularity
Modularity is the ultimate agile tool!
!Small, disposable, components !Prevents code rot on the architectural level !Isolate problems, focus work
![Page 8: Building Modular Java Applications for the Cloud€¦ · Runtime dynamic services High level API. Demo. What about deployment? Provisioning Server. Demo. Auto scaling Enough capacity](https://reader035.vdocuments.mx/reader035/viewer/2022071219/6055cb495bde1a2c3e6c7f06/html5/thumbnails/8.jpg)
Prevent (tight)
coupling
What we learned about OO design in university :
Promote cohesion
coupling
cohesion
![Page 9: Building Modular Java Applications for the Cloud€¦ · Runtime dynamic services High level API. Demo. What about deployment? Provisioning Server. Demo. Auto scaling Enough capacity](https://reader035.vdocuments.mx/reader035/viewer/2022071219/6055cb495bde1a2c3e6c7f06/html5/thumbnails/9.jpg)
How to prevent coupling in a code
base?
![Page 10: Building Modular Java Applications for the Cloud€¦ · Runtime dynamic services High level API. Demo. What about deployment? Provisioning Server. Demo. Auto scaling Enough capacity](https://reader035.vdocuments.mx/reader035/viewer/2022071219/6055cb495bde1a2c3e6c7f06/html5/thumbnails/10.jpg)
How to prevent coupling in a code
base?
interfaces
![Page 11: Building Modular Java Applications for the Cloud€¦ · Runtime dynamic services High level API. Demo. What about deployment? Provisioning Server. Demo. Auto scaling Enough capacity](https://reader035.vdocuments.mx/reader035/viewer/2022071219/6055cb495bde1a2c3e6c7f06/html5/thumbnails/11.jpg)
But how to make sure nobody
accidentally uses implementation
classes?
![Page 12: Building Modular Java Applications for the Cloud€¦ · Runtime dynamic services High level API. Demo. What about deployment? Provisioning Server. Demo. Auto scaling Enough capacity](https://reader035.vdocuments.mx/reader035/viewer/2022071219/6055cb495bde1a2c3e6c7f06/html5/thumbnails/12.jpg)
But how to make sure nobody
accidentally uses implementation
classes?
imp lemen tation
hi di ng
![Page 13: Building Modular Java Applications for the Cloud€¦ · Runtime dynamic services High level API. Demo. What about deployment? Provisioning Server. Demo. Auto scaling Enough capacity](https://reader035.vdocuments.mx/reader035/viewer/2022071219/6055cb495bde1a2c3e6c7f06/html5/thumbnails/13.jpg)
Ok, but how to create an instance of a hidden
class?
MyInterface myI = new MyImplementation();
![Page 14: Building Modular Java Applications for the Cloud€¦ · Runtime dynamic services High level API. Demo. What about deployment? Provisioning Server. Demo. Auto scaling Enough capacity](https://reader035.vdocuments.mx/reader035/viewer/2022071219/6055cb495bde1a2c3e6c7f06/html5/thumbnails/14.jpg)
Modules Service Lookups
![Page 15: Building Modular Java Applications for the Cloud€¦ · Runtime dynamic services High level API. Demo. What about deployment? Provisioning Server. Demo. Auto scaling Enough capacity](https://reader035.vdocuments.mx/reader035/viewer/2022071219/6055cb495bde1a2c3e6c7f06/html5/thumbnails/15.jpg)
Stop talking… and show me code!
![Page 16: Building Modular Java Applications for the Cloud€¦ · Runtime dynamic services High level API. Demo. What about deployment? Provisioning Server. Demo. Auto scaling Enough capacity](https://reader035.vdocuments.mx/reader035/viewer/2022071219/6055cb495bde1a2c3e6c7f06/html5/thumbnails/16.jpg)
Back to the cloud...
![Page 17: Building Modular Java Applications for the Cloud€¦ · Runtime dynamic services High level API. Demo. What about deployment? Provisioning Server. Demo. Auto scaling Enough capacity](https://reader035.vdocuments.mx/reader035/viewer/2022071219/6055cb495bde1a2c3e6c7f06/html5/thumbnails/17.jpg)
!Application as a Service over the Internet !Cloud challenges require non-trivial non-functional requirements: !
Zero-downtime deployments Modular deployments Customer specific extensions (SaaS)
Apps are moving to the cloud
![Page 18: Building Modular Java Applications for the Cloud€¦ · Runtime dynamic services High level API. Demo. What about deployment? Provisioning Server. Demo. Auto scaling Enough capacity](https://reader035.vdocuments.mx/reader035/viewer/2022071219/6055cb495bde1a2c3e6c7f06/html5/thumbnails/18.jpg)
HTML 5 + JavaScript
RESTful services
OSGi services
Mongo
Apache Felix
S3
Typical architectureRequirements: !
Modern web app UI mostly offloaded to clients or devices Document driven interaction Integration via REST API Web scale data store Multi-tenant Elasticity
![Page 19: Building Modular Java Applications for the Cloud€¦ · Runtime dynamic services High level API. Demo. What about deployment? Provisioning Server. Demo. Auto scaling Enough capacity](https://reader035.vdocuments.mx/reader035/viewer/2022071219/6055cb495bde1a2c3e6c7f06/html5/thumbnails/19.jpg)
Auth Blob stores MongoDB Multi-tenancy OpenSocial Search Remote Services REST Template Web ...
Components
![Page 20: Building Modular Java Applications for the Cloud€¦ · Runtime dynamic services High level API. Demo. What about deployment? Provisioning Server. Demo. Auto scaling Enough capacity](https://reader035.vdocuments.mx/reader035/viewer/2022071219/6055cb495bde1a2c3e6c7f06/html5/thumbnails/20.jpg)
HTML 5 + JavaScript
RESTful services
OSGi services
Mongo
Apache Felix
A m d a t u
S3
Typical architecture
Let’s Add AMDATU to our stack
Architectural focus on modularity Runtime dynamic
services High level API
![Page 21: Building Modular Java Applications for the Cloud€¦ · Runtime dynamic services High level API. Demo. What about deployment? Provisioning Server. Demo. Auto scaling Enough capacity](https://reader035.vdocuments.mx/reader035/viewer/2022071219/6055cb495bde1a2c3e6c7f06/html5/thumbnails/21.jpg)
Demo
![Page 22: Building Modular Java Applications for the Cloud€¦ · Runtime dynamic services High level API. Demo. What about deployment? Provisioning Server. Demo. Auto scaling Enough capacity](https://reader035.vdocuments.mx/reader035/viewer/2022071219/6055cb495bde1a2c3e6c7f06/html5/thumbnails/22.jpg)
What about deployment?
![Page 23: Building Modular Java Applications for the Cloud€¦ · Runtime dynamic services High level API. Demo. What about deployment? Provisioning Server. Demo. Auto scaling Enough capacity](https://reader035.vdocuments.mx/reader035/viewer/2022071219/6055cb495bde1a2c3e6c7f06/html5/thumbnails/23.jpg)
Provisioning Server
![Page 24: Building Modular Java Applications for the Cloud€¦ · Runtime dynamic services High level API. Demo. What about deployment? Provisioning Server. Demo. Auto scaling Enough capacity](https://reader035.vdocuments.mx/reader035/viewer/2022071219/6055cb495bde1a2c3e6c7f06/html5/thumbnails/24.jpg)
Demo
![Page 25: Building Modular Java Applications for the Cloud€¦ · Runtime dynamic services High level API. Demo. What about deployment? Provisioning Server. Demo. Auto scaling Enough capacity](https://reader035.vdocuments.mx/reader035/viewer/2022071219/6055cb495bde1a2c3e6c7f06/html5/thumbnails/25.jpg)
Auto scaling
Enough capacity
Without paying for idle servers
at night...
![Page 26: Building Modular Java Applications for the Cloud€¦ · Runtime dynamic services High level API. Demo. What about deployment? Provisioning Server. Demo. Auto scaling Enough capacity](https://reader035.vdocuments.mx/reader035/viewer/2022071219/6055cb495bde1a2c3e6c7f06/html5/thumbnails/26.jpg)
Load Balancer
nodenode
node
nodenode
node
Availability Zone 1
MongoMongo
Mongo
MongoMongo
Mongo
Availability Zone 2
![Page 27: Building Modular Java Applications for the Cloud€¦ · Runtime dynamic services High level API. Demo. What about deployment? Provisioning Server. Demo. Auto scaling Enough capacity](https://reader035.vdocuments.mx/reader035/viewer/2022071219/6055cb495bde1a2c3e6c7f06/html5/thumbnails/27.jpg)
Auto scaling
Node
AWS Auto Scaling
1. Start Load Balancer
Apache ACE
2. register
3. register
4. provision deployment
package
![Page 28: Building Modular Java Applications for the Cloud€¦ · Runtime dynamic services High level API. Demo. What about deployment? Provisioning Server. Demo. Auto scaling Enough capacity](https://reader035.vdocuments.mx/reader035/viewer/2022071219/6055cb495bde1a2c3e6c7f06/html5/thumbnails/28.jpg)
Wrap up
![Page 29: Building Modular Java Applications for the Cloud€¦ · Runtime dynamic services High level API. Demo. What about deployment? Provisioning Server. Demo. Auto scaling Enough capacity](https://reader035.vdocuments.mx/reader035/viewer/2022071219/6055cb495bde1a2c3e6c7f06/html5/thumbnails/29.jpg)
What have we learned? !
Why modularity is important (in the cloud) !Practical solution for doing modularity now
using an Open Source development stack using ready to use Cloud Components !
We are using this for high-profile production applications!
![Page 30: Building Modular Java Applications for the Cloud€¦ · Runtime dynamic services High level API. Demo. What about deployment? Provisioning Server. Demo. Auto scaling Enough capacity](https://reader035.vdocuments.mx/reader035/viewer/2022071219/6055cb495bde1a2c3e6c7f06/html5/thumbnails/30.jpg)
![Page 31: Building Modular Java Applications for the Cloud€¦ · Runtime dynamic services High level API. Demo. What about deployment? Provisioning Server. Demo. Auto scaling Enough capacity](https://reader035.vdocuments.mx/reader035/viewer/2022071219/6055cb495bde1a2c3e6c7f06/html5/thumbnails/31.jpg)
![Page 32: Building Modular Java Applications for the Cloud€¦ · Runtime dynamic services High level API. Demo. What about deployment? Provisioning Server. Demo. Auto scaling Enough capacity](https://reader035.vdocuments.mx/reader035/viewer/2022071219/6055cb495bde1a2c3e6c7f06/html5/thumbnails/32.jpg)
Cloud provisioning
http://ace.apache.org/
Eclipse OSGi plugin http://bndtools.org/
That’s us http://luminis.eu/
Bert Ertman [email protected] @BertErtman
Cloud OSGi services
http://www.amdatu.org/
Amdatu
Paul Bakker [email protected]
@pbakker
![Page 33: Building Modular Java Applications for the Cloud€¦ · Runtime dynamic services High level API. Demo. What about deployment? Provisioning Server. Demo. Auto scaling Enough capacity](https://reader035.vdocuments.mx/reader035/viewer/2022071219/6055cb495bde1a2c3e6c7f06/html5/thumbnails/33.jpg)
TakkGrazie
Thank you
Obrigado
MahaloDankeDank U
Merci
Gracias