is osgi modularity always worth it? - glyn normington
TRANSCRIPT
![Page 1: Is OSGi Modularity Always Worth It? - Glyn Normington](https://reader030.vdocuments.net/reader030/viewer/2022032513/55d379f1bb61ebbd518b4736/html5/thumbnails/1.jpg)
Is OSGi ModularityAlways Worth It?
Glyn Normington
![Page 2: Is OSGi Modularity Always Worth It? - Glyn Normington](https://reader030.vdocuments.net/reader030/viewer/2022032513/55d379f1bb61ebbd518b4736/html5/thumbnails/2.jpg)
Agenda
• Costs and benefits
• Case studies
• When is OSGi worth it?
![Page 3: Is OSGi Modularity Always Worth It? - Glyn Normington](https://reader030.vdocuments.net/reader030/viewer/2022032513/55d379f1bb61ebbd518b4736/html5/thumbnails/3.jpg)
OSGi Benefits
✓Encapsulated module internals
✓Easier to understand, maintain, and extend
✓Explicit, versioned dependencies
✓Simplified impact analysis
✓Faster class loading
✓Visible architecture
✓bundles, services, dependencies
✓execution environment
![Page 4: Is OSGi Modularity Always Worth It? - Glyn Normington](https://reader030.vdocuments.net/reader030/viewer/2022032513/55d379f1bb61ebbd518b4736/html5/thumbnails/4.jpg)
OSGi Benefits
✓Side-by-side versioning
✓Dynamism
✓Loose coupling via services
![Page 5: Is OSGi Modularity Always Worth It? - Glyn Normington](https://reader030.vdocuments.net/reader030/viewer/2022032513/55d379f1bb61ebbd518b4736/html5/thumbnails/5.jpg)
OSGi Costs
Learning: OSGi, new runtime, new tools
Reusing 3rd party JARs
Designing appropriate bundles and services
Defining and upgrading dependencies
Building bundles
Debugging resolution failures and class loading
Coping with dynamism
![Page 6: Is OSGi Modularity Always Worth It? - Glyn Normington](https://reader030.vdocuments.net/reader030/viewer/2022032513/55d379f1bb61ebbd518b4736/html5/thumbnails/6.jpg)
vert.x Case Study
![Page 7: Is OSGi Modularity Always Worth It? - Glyn Normington](https://reader030.vdocuments.net/reader030/viewer/2022032513/55d379f1bb61ebbd518b4736/html5/thumbnails/7.jpg)
vert.x
• Asynchronous, event-driven web apps
• HTTP, WebSockets, sockjs
• Apps in Java, Groovy, JavaScript, Ruby
• Apps need not be thread safe
• JSON event bus
![Page 8: Is OSGi Modularity Always Worth It? - Glyn Normington](https://reader030.vdocuments.net/reader030/viewer/2022032513/55d379f1bb61ebbd518b4736/html5/thumbnails/8.jpg)
class loaderclass loader
server
verticle busmod
event bus
JSON JSON
client
vert.x
HTTP, WebSockets, sockjs
modulemodule
![Page 9: Is OSGi Modularity Always Worth It? - Glyn Normington](https://reader030.vdocuments.net/reader030/viewer/2022032513/55d379f1bb61ebbd518b4736/html5/thumbnails/9.jpg)
Converting vert.x to OSGi
• Convert vert.x runtime to bundles
• Convert verticles to bundles
• (Convert busmods to bundles - similarly)
![Page 10: Is OSGi Modularity Always Worth It? - Glyn Normington](https://reader030.vdocuments.net/reader030/viewer/2022032513/55d379f1bb61ebbd518b4736/html5/thumbnails/10.jpg)
Convert Runtime to Bundles
• JARs:
• vert.x core
• Netty - network IO
• Jackson & Jackson Mapper - JSON
![Page 11: Is OSGi Modularity Always Worth It? - Glyn Normington](https://reader030.vdocuments.net/reader030/viewer/2022032513/55d379f1bb61ebbd518b4736/html5/thumbnails/11.jpg)
Approach
• Eye-ball existing OSGi manifests
• Generate manifests where necessary
• Use bnd or Virgo bundlor
• Create a manifest template
• Test resolution
![Page 12: Is OSGi Modularity Always Worth It? - Glyn Normington](https://reader030.vdocuments.net/reader030/viewer/2022032513/55d379f1bb61ebbd518b4736/html5/thumbnails/12.jpg)
Existing OSGi Manifests
✓Netty
• Bundle version 3.4.2.Final
✓Jackson & Jackson Mapper
• Bundle version 1.9.4
![Page 13: Is OSGi Modularity Always Worth It? - Glyn Normington](https://reader030.vdocuments.net/reader030/viewer/2022032513/55d379f1bb61ebbd518b4736/html5/thumbnails/13.jpg)
Bundle vert.x core
• Use bnd or Virgo bundlor
• Manifest template required ...
![Page 14: Is OSGi Modularity Always Worth It? - Glyn Normington](https://reader030.vdocuments.net/reader030/viewer/2022032513/55d379f1bb61ebbd518b4736/html5/thumbnails/14.jpg)
vert.x Core Template
• vert.x name and versionBundle-ManifestVersion: 2
Bundle-SymbolicName: org.vertx.core
Bundle-Name: vert.x Core
Bundle-Version: 1.0.0.final
Export-Template: *;version="1.0.0.final"
![Page 15: Is OSGi Modularity Always Worth It? - Glyn Normington](https://reader030.vdocuments.net/reader030/viewer/2022032513/55d379f1bb61ebbd518b4736/html5/thumbnails/15.jpg)
vert.x Core Template
• Package import template version ranges
• Netty: [3.4.2.Final, 4.0)
• Jackson: [1.9.4, 2.0)
• Other optional imports: 0
• 0 means [0, ∞)
![Page 16: Is OSGi Modularity Always Worth It? - Glyn Normington](https://reader030.vdocuments.net/reader030/viewer/2022032513/55d379f1bb61ebbd518b4736/html5/thumbnails/16.jpg)
• Package import version ranges
• Netty: [3.4.2.Final, 4.0)
• Jackson: [1.9.4, 2.0)
• Other optional imports: 0
• 0 means [0, ∞)
vert.x Core Template
Where did thesecome from?
![Page 17: Is OSGi Modularity Always Worth It? - Glyn Normington](https://reader030.vdocuments.net/reader030/viewer/2022032513/55d379f1bb61ebbd518b4736/html5/thumbnails/17.jpg)
Version Ranges• Lower bound
• What did you test?
• What old versions do you support?
• Upper bound
• Exporter’s versioning policy?
• How easy is it to change your bundle?
• Lifespan?
• Distribution?
![Page 18: Is OSGi Modularity Always Worth It? - Glyn Normington](https://reader030.vdocuments.net/reader030/viewer/2022032513/55d379f1bb61ebbd518b4736/html5/thumbnails/18.jpg)
Netty Version Range
[3.4.2.Final, 3.5)[3.4.2.Final, 4.0)
![Page 19: Is OSGi Modularity Always Worth It? - Glyn Normington](https://reader030.vdocuments.net/reader030/viewer/2022032513/55d379f1bb61ebbd518b4736/html5/thumbnails/19.jpg)
Generate Bundle
bundlor.sh -i vert.x-core.jar -m vertx.core.mf -o vert.x-core-1.0.0.final.jar
![Page 20: Is OSGi Modularity Always Worth It? - Glyn Normington](https://reader030.vdocuments.net/reader030/viewer/2022032513/55d379f1bb61ebbd518b4736/html5/thumbnails/20.jpg)
Test Metadata
• Using Virgo, for simplicity
• Place dependencies in repository/usr
• Place vert.x core in pickup
• Start Virgo:
...
<DE0005I> Started bundle 'org.vertx.core' version '1.0.0.final'.
![Page 21: Is OSGi Modularity Always Worth It? - Glyn Normington](https://reader030.vdocuments.net/reader030/viewer/2022032513/55d379f1bb61ebbd518b4736/html5/thumbnails/21.jpg)
Modular Verticles
![Page 22: Is OSGi Modularity Always Worth It? - Glyn Normington](https://reader030.vdocuments.net/reader030/viewer/2022032513/55d379f1bb61ebbd518b4736/html5/thumbnails/22.jpg)
public class MyVerticle extends Verticle {
public void start() {
vertx.createHttpServer().requestHandler( new Handler<HttpServerRequest>() { public void handle(HttpServerRequest req) { ... } } ).listen(8080);
}
}
![Page 23: Is OSGi Modularity Always Worth It? - Glyn Normington](https://reader030.vdocuments.net/reader030/viewer/2022032513/55d379f1bb61ebbd518b4736/html5/thumbnails/23.jpg)
public class MyVerticle extends Verticle {
public void start() {
vertx.createHttpServer().requestHandler( new Handler<HttpServerRequest>() { public void handle(HttpServerRequest req) { ... } } ).listen(8080);
}
}
![Page 24: Is OSGi Modularity Always Worth It? - Glyn Normington](https://reader030.vdocuments.net/reader030/viewer/2022032513/55d379f1bb61ebbd518b4736/html5/thumbnails/24.jpg)
public class MyVerticle extends Verticle {
public void start() {
vertx.createHttpServer().requestHandler( new Handler<HttpServerRequest>() { public void handle(HttpServerRequest req) { ... } } ).listen(8080);
}
}
redundant boilerplate
![Page 25: Is OSGi Modularity Always Worth It? - Glyn Normington](https://reader030.vdocuments.net/reader030/viewer/2022032513/55d379f1bb61ebbd518b4736/html5/thumbnails/25.jpg)
public class MyVerticle extends Verticle {
public void start() {
vertx.createHttpServer().requestHandler( new Handler<HttpServerRequest>() { public void handle(HttpServerRequest req) { ... } } ).listen(8080);
}
}
redundant boilerplate
not easily unit tested
![Page 26: Is OSGi Modularity Always Worth It? - Glyn Normington](https://reader030.vdocuments.net/reader030/viewer/2022032513/55d379f1bb61ebbd518b4736/html5/thumbnails/26.jpg)
public class MyVerticle extends Verticle {
public void start() {
vertx.createHttpServer().requestHandler( new Handler<HttpServerRequest>() { public void handle(HttpServerRequest req) { ... } } ).listen(8080);
}
}
baked-in configuration
redundant boilerplate
not easily unit tested
![Page 27: Is OSGi Modularity Always Worth It? - Glyn Normington](https://reader030.vdocuments.net/reader030/viewer/2022032513/55d379f1bb61ebbd518b4736/html5/thumbnails/27.jpg)
Modular Verticle• Move boilerplate code to a support bundle
• Convert configuration to declarative metadata
• Use services for loose coupling
• whiteboard pattern
![Page 28: Is OSGi Modularity Always Worth It? - Glyn Normington](https://reader030.vdocuments.net/reader030/viewer/2022032513/55d379f1bb61ebbd518b4736/html5/thumbnails/28.jpg)
public class MyHandler implements Handler<HttpServerRequest> {
public void handle(HttpServerRequest req) { ... } }
![Page 29: Is OSGi Modularity Always Worth It? - Glyn Normington](https://reader030.vdocuments.net/reader030/viewer/2022032513/55d379f1bb61ebbd518b4736/html5/thumbnails/29.jpg)
<?xml version="1.0" encoding="UTF-8"?><blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"> <bean class="org.vertx.osgi.sample.MyHandler" id="handler"/> <service interface="org.vertx.java.core.Handler" ref="handler"> <service-properties> <entry key="type" value="HttpServerRequestHandler"> <entry key="port" value="8080"> </service-properties> </service>
</blueprint>
![Page 30: Is OSGi Modularity Always Worth It? - Glyn Normington](https://reader030.vdocuments.net/reader030/viewer/2022032513/55d379f1bb61ebbd518b4736/html5/thumbnails/30.jpg)
org.vertx.core bundle
modularverticlebundle
org.vertx.osgibundle
OSGi Service Registry
2. publish handler
3. listen for/find handler
4. create server5 register handler6. set server listening
7. request from network
8. Handler.handle()9. HttpServerRequest operations
blueprint service
1. listen for/find bundle
![Page 31: Is OSGi Modularity Always Worth It? - Glyn Normington](https://reader030.vdocuments.net/reader030/viewer/2022032513/55d379f1bb61ebbd518b4736/html5/thumbnails/31.jpg)
Was it worth it?
![Page 32: Is OSGi Modularity Always Worth It? - Glyn Normington](https://reader030.vdocuments.net/reader030/viewer/2022032513/55d379f1bb61ebbd518b4736/html5/thumbnails/32.jpg)
Benefits
✓vertx implementation can be hidden
✓Boilerplate factored out
✓Unit testing simplified
✓Configuration externalised
![Page 33: Is OSGi Modularity Always Worth It? - Glyn Normington](https://reader030.vdocuments.net/reader030/viewer/2022032513/55d379f1bb61ebbd518b4736/html5/thumbnails/33.jpg)
CostsDeciding dependency version ranges
Reworking vert.x to improve encapsulation
Programming model changed
Shared dependencies must be thread safe
![Page 34: Is OSGi Modularity Always Worth It? - Glyn Normington](https://reader030.vdocuments.net/reader030/viewer/2022032513/55d379f1bb61ebbd518b4736/html5/thumbnails/34.jpg)
CostsDeciding dependency version ranges
Reworking vert.x to improve encapsulation
Programming model changed
Shared dependencies must be thread safe
Conclusion: probably not worth it
![Page 35: Is OSGi Modularity Always Worth It? - Glyn Normington](https://reader030.vdocuments.net/reader030/viewer/2022032513/55d379f1bb61ebbd518b4736/html5/thumbnails/35.jpg)
vSphere Web Client Case Study
![Page 36: Is OSGi Modularity Always Worth It? - Glyn Normington](https://reader030.vdocuments.net/reader030/viewer/2022032513/55d379f1bb61ebbd518b4736/html5/thumbnails/36.jpg)
vSphere Web Client
• OSGi based web server
• Virgo Server for Apache Tomcat
• Plugins allow users to extend the Web Client
• Custom data
• Custom relationships (for new/existing data)
![Page 37: Is OSGi Modularity Always Worth It? - Glyn Normington](https://reader030.vdocuments.net/reader030/viewer/2022032513/55d379f1bb61ebbd518b4736/html5/thumbnails/37.jpg)
browser
Virgo(vSphereWeb Client)
vCenter Server
Flex UIcomponent
DataService
VMwareInventoryService
ESX Server
ESX Server
ESX Server
VMVMVM
BlazeDS
![Page 38: Is OSGi Modularity Always Worth It? - Glyn Normington](https://reader030.vdocuments.net/reader030/viewer/2022032513/55d379f1bb61ebbd518b4736/html5/thumbnails/38.jpg)
browser
Virgo(vSphereWeb Client)
vCenter Server
Flex UIcomponent
DataService
VMwareInventoryService
Remote DataSource
Custom Flex UIcomponent
Custom DataService
ESX Server
ESX Server
ESX Server
VMVMVM
plugin zipplugin zip
plugin zip
BlazeDS BlazeDS
![Page 39: Is OSGi Modularity Always Worth It? - Glyn Normington](https://reader030.vdocuments.net/reader030/viewer/2022032513/55d379f1bb61ebbd518b4736/html5/thumbnails/39.jpg)
Was it worth it?
![Page 40: Is OSGi Modularity Always Worth It? - Glyn Normington](https://reader030.vdocuments.net/reader030/viewer/2022032513/55d379f1bb61ebbd518b4736/html5/thumbnails/40.jpg)
Benefits
✓Modular
✓Extensible by users
✓Internals not accessible to users
✓Dynamically updateable
![Page 41: Is OSGi Modularity Always Worth It? - Glyn Normington](https://reader030.vdocuments.net/reader030/viewer/2022032513/55d379f1bb61ebbd518b4736/html5/thumbnails/41.jpg)
Costs
Steep initial learning curve
Investment required in Virgo tooling
OSGi exposed to users
![Page 42: Is OSGi Modularity Always Worth It? - Glyn Normington](https://reader030.vdocuments.net/reader030/viewer/2022032513/55d379f1bb61ebbd518b4736/html5/thumbnails/42.jpg)
Costs
Steep initial learning curve
Investment required in Virgo tooling
OSGi exposed to users
Conclusion: worth it
![Page 43: Is OSGi Modularity Always Worth It? - Glyn Normington](https://reader030.vdocuments.net/reader030/viewer/2022032513/55d379f1bb61ebbd518b4736/html5/thumbnails/43.jpg)
Croatian TelecomCase Study
![Page 44: Is OSGi Modularity Always Worth It? - Glyn Normington](https://reader030.vdocuments.net/reader030/viewer/2022032513/55d379f1bb61ebbd518b4736/html5/thumbnails/44.jpg)
Overview• Virgo 3.0.3, EclipseLink, Atomikos,
ActiveMQ, Tomcat clustering, Hazelcast
• In production for more than a year
• last 7 months as a cluster
• Nearly 1 million user accounts
• 100s of web requests per second, peak
• Only one major outage, due to a Linux bug
![Page 45: Is OSGi Modularity Always Worth It? - Glyn Normington](https://reader030.vdocuments.net/reader030/viewer/2022032513/55d379f1bb61ebbd518b4736/html5/thumbnails/45.jpg)
Cited Benefits
✓Better understand components you use
✓Cleaner, higher quality code
✓Better system architecture
✓Reusable modules
![Page 46: Is OSGi Modularity Always Worth It? - Glyn Normington](https://reader030.vdocuments.net/reader030/viewer/2022032513/55d379f1bb61ebbd518b4736/html5/thumbnails/46.jpg)
Cited Costs
Time to learn the intricacies of OSGi
Time to integrate non-OSGi ready components
![Page 47: Is OSGi Modularity Always Worth It? - Glyn Normington](https://reader030.vdocuments.net/reader030/viewer/2022032513/55d379f1bb61ebbd518b4736/html5/thumbnails/47.jpg)
Cited Costs
Time to learn the intricacies of OSGi
Time to integrate non-OSGi ready components
Conclusion: worth it
![Page 48: Is OSGi Modularity Always Worth It? - Glyn Normington](https://reader030.vdocuments.net/reader030/viewer/2022032513/55d379f1bb61ebbd518b4736/html5/thumbnails/48.jpg)
Wrap-up
![Page 49: Is OSGi Modularity Always Worth It? - Glyn Normington](https://reader030.vdocuments.net/reader030/viewer/2022032513/55d379f1bb61ebbd518b4736/html5/thumbnails/49.jpg)
OSGi CostsLearning: OSGi, new runtime, new tools
Reusing 3rd party JARs
Designing appropriate bundles and services
Defining and upgrading dependencies
Building bundles
Debugging resolution failures and class loading
Coping with dynamism
Reduced isolation in some cases
Further investment in tooling required
![Page 50: Is OSGi Modularity Always Worth It? - Glyn Normington](https://reader030.vdocuments.net/reader030/viewer/2022032513/55d379f1bb61ebbd518b4736/html5/thumbnails/50.jpg)
OSGi Benefits
✓Encapsulated module internals
✓Explicit, versioned dependencies
✓Side-by-side versioning
✓Dynamism
✓Visible architecture
✓Loose coupling via services
✓Better understanding of components used
✓Reusable modules
![Page 51: Is OSGi Modularity Always Worth It? - Glyn Normington](https://reader030.vdocuments.net/reader030/viewer/2022032513/55d379f1bb61ebbd518b4736/html5/thumbnails/51.jpg)
When is OSGi worth it?
✓Lower layers benefit most
✓Control dependencies
✓Hide internals
Lower layers push higher layers to OSGi
? Exposing OSGi to users
✓Long-lived or critical applications
![Page 52: Is OSGi Modularity Always Worth It? - Glyn Normington](https://reader030.vdocuments.net/reader030/viewer/2022032513/55d379f1bb61ebbd518b4736/html5/thumbnails/52.jpg)
PRO TANTO QUID RETRIBUAMUS
For so much, what shall we give in return?
(wording from the edge of the Belfast £1 coin)
![Page 53: Is OSGi Modularity Always Worth It? - Glyn Normington](https://reader030.vdocuments.net/reader030/viewer/2022032513/55d379f1bb61ebbd518b4736/html5/thumbnails/53.jpg)
Further Information• “Java Application Architecture” by Kirk
Knoernschild
• http://www.osgi.org
• http://underlap.blogspot.co.uk/2012/06/osgi-case-study-modular-vertx.html
• http://vertx.io/
• http://underlap.blogspot.co.uk/2012/10/virgo-in-vsphere.html
• http://www.osgi.org/wiki/uploads/Links/SemanticVersioning.pdf
![Page 54: Is OSGi Modularity Always Worth It? - Glyn Normington](https://reader030.vdocuments.net/reader030/viewer/2022032513/55d379f1bb61ebbd518b4736/html5/thumbnails/54.jpg)
Credits• “Coins” by Rob Redwood
• “Benefits of using OSGi”http://www.osgi.org/Technology/WhyOSGi
• “One Pound” by Leo Reynolds