spring and osgi combined with spring dynamic modules · tutorial: spring and osgi combined with...
TRANSCRIPT
![Page 1: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/1.jpg)
Tutorial:Spring and OSGi Combined with Spring Dynamic Modules
Martin Lippert, aquinet it-agile GmbHBJ Hargrave IBM & CTO OSGi AllianceBJ Hargrave, IBM & CTO, OSGi Alliance
(Adrian Colyer, CTO, SpringSource)
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.01
![Page 2: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/2.jpg)
A few words about myself…
• Martin LippertSenior IT consultant at akquinet it-agile GmbH, [email protected]
• FocusAgile soft are de elopmentAgile software developmentRefactoringEclipse technology
• Equinox incubator committer
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.02
![Page 3: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/3.jpg)
Agenda• What is OSGi?• What is OSGi?• What is Spring Dynamic Modules?• Spring Dynamic Modules in ActionSpring Dynamic Modules in Action• Server-Side Applications• RCP Applicationspp• Summary
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.03
![Page 4: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/4.jpg)
OSG – What?
• OSGi™:OSGi :„A dynamic module system for Java“
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.04
![Page 5: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/5.jpg)
OSGi is …
• … a module system for Java that allows the definition of …
Modules (called „bundles“),Modules (called „bundles ),Visibility of the bundle contents (public-API vs. private-API)Dependencies between modulesVersions of mod lesVersions of modules
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.05
![Page 6: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/6.jpg)
OSGi is …
• … dynamicBundles can be installed, started, stopped, uninstalled and updated at runtimeupdated at runtime
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.06
![Page 7: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/7.jpg)
OSGi is …
• … service orientedBundles can publish services (dynamically)Bundles can find and bind to services through a service registryBundles can find and bind to services through a service registryThe runtime allows services to appear and disappear at runtime
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.07
![Page 8: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/8.jpg)
What does OSGi look like? (Low Level)Identification
Bundle-SymbolicName: org.eclipse.equinox.registryBundle-Version: 3.2.100.v20060918Bundle-Name: Eclipse Extension RegistryBundle-Vendor: Eclipse.org
Bundle-ClassPath: ., someOtherJar.jar
B ndle Acti ator org eclipse core internal registr osgi Acti atorLifecycle
Classpath
Bundle-Activator: org.eclipse.core.internal.registry.osgi.Activator
Import-Package: javax.xml.parsers,org.xml.sax,
Dependencies
org.osgi.framework;version=1.3Require-Bundle: org.eclipse.equinox.common;bundle-version="[3.2.0,4.0.0)"Bundle-RequiredExecutionEnvironment: CDC-1.0/Foundation-1.0,J2SE-1.3
Exports
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.08
Export-Package: org.eclipse.equinox.registry
![Page 9: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/9.jpg)
Implementations
• Open source implementationsOpen source implementationsEclipse Equinox (http://www.eclipse.org/equinox/)Apache Felix (http://cwiki.apache.org/FELIX/index.html)Knopflerfish (http://www.knopflerfish.org/)Knopflerfish (http://www.knopflerfish.org/)ProSyst mBedded Server Equinox Edition (http://www.prosyst.com/products/osgi_se_equi_ed.html)
• Commercial implementationsProSyst (http://www.prosyst.com/)Knopflerfish Pro (http://www.gatespacetelematics.com/)
(not necessarily complete)
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.09
![Page 10: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/10.jpg)
What is Spring Dynamic Modules?• Project ObjectivesProject Objectives• Introduction to key Spring concepts• Bundles and module contexts• Application design• The extender patternWh ' i it?• Who's using it?
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.010
![Page 11: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/11.jpg)
Spring Dynamic Modules is...• A open source project in• A open source project in
the Spring portfolio– led by SpringSource– committers from BEA and
Oracle– many non-code y
contributions from the community and from the OSGi EEG and CPEG
http://www.springframework.org/osgi
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
![Page 12: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/12.jpg)
Project Objectives
• Bring the benefits of OSGi:• Bring the benefits of OSGi:modularityversioninglifecycle support
• To enterprise application developmentTo enterprise application development
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
![Page 13: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/13.jpg)
Design considerations (raw OSGi)• Platform dynamics• Platform dynamics
– services may come and go at any time– ServiceTracker
• Asynchronous activation– service dependency management
T ti• Testing• Concurrency and thread management
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
![Page 14: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/14.jpg)
Project Objectives
• The simplicity and power of Spring• The simplicity and power of Spring...– with the dynamic module system of OSGi
• Modules need instantiating, configuring, decorating, g g g gassembling, ...
• Need an easy way to manage service references between modulesbetween modules
• Easy unit and integration testing
Bring the benefits of OSGi to enterprise applications
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
Bring the benefits of OSGi to enterprise applications
![Page 15: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/15.jpg)
Key Spring Concepts
SimpleSimpleSimpleObjectSimpleObjectj
Portable Service Abstractions
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
![Page 16: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/16.jpg)
The Heart of Spring
• Lightweight container• Lightweight container– Full stack, simple object based application development
• Works in any environmenty– web-app, ejb, integration test, standalone
P id• Provides…– a powerful object factory that manages the instantiation,
configuration, decoration and assembly of business objects
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
![Page 17: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/17.jpg)
Spring-based development
• View application as a set of components• View application as a set of componentswith clear layering
• Each component is a simple objectEach component is a simple objectTestable in isolation
• Container manages component configuration and assemblyC t i d t t t ti• Container decorates your components at runtime
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
![Page 18: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/18.jpg)
Typical application layering
Web interface(MVC)
Other remoteinterfaces
presentationlayer
Service interfacesservicelayer
Domainobjects
DAO i t f
Service implementationslayer
DAO implementations
DAO interfacesdata accesslayer
RDBMS
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
RDBMS
![Page 19: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/19.jpg)
Typical application layering
Web interface(MVC)
Other remoteinterfaces
Service interfaces
Domainobjects
DAO i t f
Service implementationsSpringmanaged
DAO implementations
DAO interfaces
RDBMS
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
RDBMS
![Page 20: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/20.jpg)
Spring Framework
• Dependency injection• Dependency injection • Integration with persistence technologies (JDBC, Hibernate)
• Web application support Spring MVC, JSF and Struts• Enterprise service abstractions
TransactionsMessaging
• Aspect Oriented Programming supportAspect Oriented Programming support
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
![Page 21: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/21.jpg)
Without dependency injectionpublic class TransferServiceImpl implements TransferService {p p p {
private AccountRepository accountRepository;
public TransferServiceImpl() {DataSource ds = (DataSource)
ctx.lookup(“myAppserverDS”);accountRepository = new JdbcAccountRepository(ds);
}}…
}
Ti d t Jdb i l t tiTied to Jdbc implementationTied to application server JNDIHard to test. Hard to reuse
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
![Page 22: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/22.jpg)
Dependency Injection public class JdbcAccountRepository implements pub c c ass Jdbc ccou t epos to y p e e ts
AccountRepository {…
} Implements a service interface
public class TransferServiceImpl implements TransferService {private final AccountRepository accountRepository;
public TransferServiceImpl(AccountRepository ar) {this.accountRepository = ar;
}}…
} Depends on service interface;conceals complexity of implementation;
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
conceals complexity of implementation;allows for swapping out implementation
![Page 23: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/23.jpg)
Spring Blueprint<beans>
<bean id=“transferService” class=“app.impl.TransferServiceImpl”><constructor-arg ref=“accountRepository” />
</bean>
<bean id=“accountRepository” class=“app.impl.JdbcAccountRepository”><constructor-arg ref=“dataSource” />
</bean></bean>
<bean id=“dataSource” class=“com.oracle.jdbc.pool.OracleDataSource”><property name=“URL” value=“jdbc:oracle:thin:@localhost:1521:BANK” />
t “ ” l “ t f ” /<property name=“user” value=“moneytransfer-app” /></bean>
</beans>
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
![Page 24: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/24.jpg)
Bundles and Module Contexts
• OSGi bundle <==> Spring Application Context• OSGi bundle <==> Spring Application Contextwe call it a module context
• Module context created when bundle is started• destroyed when bundle is stopped
• Module components <==> Spring beansinstantiated, configured, decorated, assembled by Spring
• Components can be imported / exported from OSGi service registry
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
![Page 25: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/25.jpg)
Application Design • Application becomes a set of co-operating bundles• Application becomes a set of co-operating bundles
– vertical decomposition first– then horizontal
• Communication via service registry
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
![Page 26: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/26.jpg)
Application wiring
P PP
S SLibLib
S SbLib
R R D
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
![Page 27: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/27.jpg)
Spring Dynamic ModulesSpring Dynamic Modules
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
![Page 28: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/28.jpg)
The Extender pattern
• “The OSGi Extender Model”• The OSGi Extender ModelPeter Kriens, Feb. 2007http://www.osgi.org/blog/2007/02/osgi-extender-model.html
• [A]synchronous bundle listenerlisten to install, update, uninstall eventsinspect bundle contentinspect bundle contentTake appropriate action on behalf of the bundle
• Spring Dynamic Modules extender bundle:org.springframework.osgi.bundles.extendermust be installed and active for module contexts to be created
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
must be installed and active for module contexts to be created
![Page 29: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/29.jpg)
Spring Dynamic Modules Users• OracleOracle
building next generation middleware platform on OSGi and Spring DM
• BEAWebLogic Event Server 2.0 built on Spring Dynamic Mod lesModules
• Over 1000 subscribers on mailing list
http://groups.google.com/group/spring-osgi
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
p g p g g g p p g g
![Page 30: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/30.jpg)
Agenda• What is Spring Dynamic Modules?• What is Spring Dynamic Modules?• Spring Dynamic Modules in Action• Server-side ApplicationsServer side Applications• RCP Applications• Summaryy
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.030
![Page 31: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/31.jpg)
Spring Dynamic Modules in Action• Creating a Spring-powered bundleCreating a Spring-powered bundle• Importing and exporting services• The whiteboard pattern• Dynamics• Startup and shutdown
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.031
![Page 32: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/32.jpg)
Spring-powered bundles• Spring module context (app context) per bundle• Spring module context (app context) per bundle
(module)– created automatically for you by Spring extender bundle– no need to depend on any OSGi APIs
• META INF/spring/* xml• META‐INF/spring/*.xml
• or Spring‐Context header in MANIFEST.MF
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
![Page 33: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/33.jpg)
Spring powered bundlesSpring-powered bundles
P bli h d i t fPublished interfaces
ProtectedProtected implementations
Spring configurationfiles
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
![Page 34: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/34.jpg)
Demo/Exercise 1: Spring-powered bundle
• Step 1:• Step 1:Implement a bundle including a bundle activatorTry out your bundle via the console
• Step 2:Implement a POJO with a method “hello” and a methodImplement a POJO with a method hello and a method “goodbye”Create a spring context and define your POJO as a beanD fi th d i it d d t th dDefine your methods as init- and destroy-methodsTry out your bundle via the console using Spring DM
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
![Page 35: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/35.jpg)
Getting log output
• Spring uses Jakarta Commons Logging• Spring uses Jakarta Commons Logging• Commons logging doesn't behave well under OSGi
Use SLF4J binding insteadSimple Logging Facade for Java (http://www.slf4j.org/)
• Bundles:jcl104 over slf4j (static binding of jcl to slf4j)jcl104.over.slf4j (static binding of jcl to slf4j)slf4j.api (the slf4j API)slf4j.log4j12 (implementation of slf4j over log4j)
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
![Page 36: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/36.jpg)
Getting log outputosgi> log4j:WARN No appenders could be found for logger g g j pp gg(org.springframework.util.ClassUtils).
log4j:WARN Please initialize the log4j system properly.
• Where to put log4j.properties?which bundle is it that looks for this file?how do we make it visible to that bundle?
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
![Page 37: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/37.jpg)
Getting log output• Use a Fragment BundleUse a Fragment Bundle
“Fragments are bundles that are attached to a host bundle by the Framework.” - OSGi Core Specification, 3.14
Manifest-Version: 1.0Bundle-ManifestVersion: 2Bundle-Name: Logging Configuration FragmentBundle SymbolicName: com springsource logging configBundle-SymbolicName: com.springsource.logging.configBundle-Version: 1.0.0Bundle-Vendor: SpringSourceFragment-Host: org.springframework.osgi.log4j.osgi; bundle version="1 2 15 SNAPSHOT"bundle-version="1.2.15.SNAPSHOT"
Bundle-RequiredExecutionEnvironment: J2SE-1.5
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
![Page 38: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/38.jpg)
Demo/Exercise 2: log4j configuration
• Create a fragment for the log4j configuration• Create a fragment for the log4j configuration• Put the log4j configuration into this bundle• Attach the fragment to the log4j host bundleAttach the fragment to the log4j host bundle• Try it out!
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
![Page 39: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/39.jpg)
Spring Dynamic Modules in Action• Creating a Spring-powered bundleCreating a Spring-powered bundle• Importing and exporting services• The whiteboard pattern• Dynamics• Startup and shutdown
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.039
![Page 40: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/40.jpg)
Services• Your application is constructed as a set of bundles• Your application is constructed as a set of bundles,
each with their own module context• How do we reference beans in other modules?
– use the OSGi Service Registry• advertise public services• import references to external services• import references to external services
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
![Page 41: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/41.jpg)
Beans and services
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
![Page 42: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/42.jpg)
Service import/export overviewExporting context:<bean id="printService"
class="com.springsource.osgi.print.internal.PrintServiceImpl"init-method="init"destroy-method="destroy"/>
<osgi:service ref="printService" interface="com.springsource.osgi.print.PrintService"/>
I ti t t<bean id="printClient"
class="com.springsource.osgi.print.client.Client"init-method="init">
Importing context:
t et od t<property name="printService" ref="printService"/>
</bean>
<osgi:reference id="printService"
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
interface="com.springsource.osgi.print.PrintService"/>
![Page 43: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/43.jpg)
Exporting a service<bean id="printService"<bean id= printService
class="com.springsource.osgi.print.internal.PrintServiceImpl"init-method="init"destroy-method="destroy"/>
• any Spring bean can be exported as OSGi service
<osgi:service ref="printService" interface="com.springsource.osgi.print.PrintService"/>
y p g p• offers access to the ServiceRegistration object
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
![Page 44: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/44.jpg)
Importing a service<bean id="printClient" p
class="com.springsource.osgi.print.client.Client"init-method="init"><property name="printService" ref="printService"/>
</bean>
<osgi:reference id="printService" interface="com.springsource.osgi.print.PrintService"/>
• locates the best OSGi service that matches the description
• handles the service dynamics internally
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
![Page 45: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/45.jpg)
Demo/Exercise 3: OSGi services
• Step 1:• Step 1:Define an interface for your bean in a separate packageExport only this interface
• Step 2:Export your bean as an OSGi service using the interface
St 3• Step 3:Take a look at the available services at the console
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
![Page 46: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/46.jpg)
Demo/Exercise 3: OSGi services
• Step 4:• Step 4:Create another bundle including a spring contextDefine a bean that requires an instance of your service
Define the propertyImport the OSGi service as a bean
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
![Page 47: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/47.jpg)
Controlling Service Exporting
• Which interface(s) should the service be registered• Which interface(s) should the service be registered under?
a single interface, use the interface attributemultiple interfaces, use the nested interfaces elementOr... have Spring Dynamic Modules calculated the exported interface set for you automatically.
auto-export values are interfaces, class-hierarchy, or all-classes.
<osgi:service id="printService" auto-export="interfaces"/>
auto export values are interfaces, class hierarchy, or all classes.
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
![Page 48: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/48.jpg)
Controlling Service Exporting
• Service always has service property• Service always has service propertyorg.springframework.osgi.bean.name(set to bean name)
• Specify additional service properties explicitly if needed
<osgi:service ref="printService" interface="com.springsource.osgi.print.PrintService">
<osgi:service-properties><entry key="aKey" value="someValue"/><entry key="aKey" value-ref="someBeanName"/>
</osgi:service-properties></osgi:service properties></osgi:service>
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
![Page 49: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/49.jpg)
Controlling Service Importing
• Use filter expressions• Use filter expressionsRFC 1960: A String representation of LDAP Search Filters
<osgi:reference id="printService"<osgi:reference id="printService" interface="com.springsource.osgi.print.PrintService"filter="(colour=true)"/>
• Special attribute bean-name matches on org.springframework.osgi.bean.name property
f fcondition anded with filter expression if present
• Can specify multiple interfaces using nested interfaceselement.
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
e e e t
![Page 50: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/50.jpg)
Spring Dynamic Modules in Action• Creating a Spring-powered bundleCreating a Spring-powered bundle• Importing and exporting services• The whiteboard pattern• Dynamics• Startup and shutdown
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.050
![Page 51: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/51.jpg)
The Whiteboard Pattern
• “Listeners Considered Harmful: The Whiteboard• Listeners Considered Harmful: The Whiteboard Pattern”
OSGi Alliance Technical Whitepaper, 2004http://www.osgi.org/wiki/uploads/Links/whiteboard.pdf
• Lifecycle issues around listener registrationLifecycle issues around listener registration• Solution: whiteboard
event source is not registered as a servicelisteners register as services using well-known interfaceevent source uses a tracker to track listener services
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.051
![Page 52: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/52.jpg)
Importing a set of services<bean id="printClient" p
class="com.springsource.osgi.print.client.Client"init-method="init"><property name="printService" ref="printService"/>
</bean>
<osgi:set id="printService" interface="com.springsource.osgi.print.PrintService"/>
• locates all OSGi services that match the description• handles the service dynamics internally• See also: <osgi:list... />
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
![Page 53: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/53.jpg)
Demo/Exercise 4: whiteboard pattern
• Step 1:• Step 1:Enhance your second bundle to use a set of servicesCall these services regularly
E.g. via a thread started in the init method
• Step 2:Split your first bundle into an interface bundle (containing justSplit your first bundle into an interface bundle (containing just the interface) and an implementation bundle
• Step 3:Create a third bundle that registers a different implementation of the interface as OSGi service
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
![Page 54: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/54.jpg)
Spring Dynamic Modules in Action• Creating a Spring-powered bundleCreating a Spring-powered bundle• Importing and exporting services• The whiteboard pattern• Dynamics• Startup and shutdown
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.054
![Page 55: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/55.jpg)
Service interface typesexported [with versionA service bundle…
Dealing with dynamics
Export-Package: a.b.c
exported [with versioninformation]
private implementation
packagespackages
"Passive" contributionService implementationlocked away
Passive contribution• types added to type space• bundles see new version on
l ti ft i t ll/ f h
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
resolution after install/refresh
![Page 56: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/56.jpg)
A service bundle…Dealing with dynamics
Published services
Private implementation "Active" contribution• services published in registry• bundles see service changes
Private implementationobjects
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
immediately
![Page 57: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/57.jpg)
Service Dynamics• What happens when a service goes away?• What happens when a service goes away?
– osgi:reference cardinality=”0..1”• track replacement and retarget proxy when suitable target found• ServiceUnavailableException after timeout if invoked
– osgi:reference cardinality=”1..1”• as above, plus• unregister any exported services that depend on the unsatisfied
reference
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
![Page 58: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/58.jpg)
Cardinality (single reference)
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
![Page 59: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/59.jpg)
Registration management<osgi:service id="myService" ref="exposedBean"/>g y p
<bean id="exposedBean" class="..."><property name="myHelper" ref="helperBean"/>
</bean>
<bean id="helperBean" class="..."><property name="fooService" ref="fooService"/>
</bean>
<osgi:reference id="fooService" interface="..."/>
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
![Page 60: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/60.jpg)
Service Dynamics• What happens when a service goes away?• What happens when a service goes away?
– osgi:set/list cardinality=”0..n”• service is removed from the set• Iterator contract is honored
– osgi:set/list cardinality=”1..n”• as above, plus• unregister any exported services that depend on the unsatisfied
service reference
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
![Page 61: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/61.jpg)
Cardinality - many
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
![Page 62: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/62.jpg)
Demo/Exercise 5: Dynamics
• Play with the two implementation bundles via the• Play with the two implementation bundles via the console
Starting and stopping the different bundles and see what happens
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
![Page 63: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/63.jpg)
Listening• You work with a constant reference• You work with a constant reference
– Proxy / Set / List
• Spring Dynamic Modules manages the target backing p g y g g gservice(s) for you
• You can optionally listen to bind / unbind events• You can optionally listen to register / unregister events
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
![Page 64: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/64.jpg)
Reference listeners<osgi:reference id="printService"
interface="com.springsource.osgi.print.PrintService">
<osgi:listener bind-method="onBind"unbind-method="onUnbind">
<b b l "M C t Li t "/><beans:bean class="MyCustomListener"/></osgi:listener>
</osgi:reference>
class MyCustomListener {
public void onBind(PrintService service, Map serviceProperties) {...}
public void onBind(FastPrintService service, Map serviceProps) {...}
public void onUnbind(ColorPrintService service, Map props) {...}
}
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
}
![Page 65: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/65.jpg)
Registration listeners<osgi:service id="printService"
interface="com.springsource.osgi.print.PrintService">
<osgi:registration-listener registration-method="registered"
i t ti th d " i t d"unregistration-method="unregistered"ref="printServiceListener"/>
</osgi:service>
class MyCustomListener {
public void registered(PrintService service, Map serviceProps) {...}
public void unregistered(PrintService service, Map serviceProps) {...}
}
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
![Page 66: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/66.jpg)
Spring Dynamic Modules in Action• Creating a Spring-powered bundleCreating a Spring-powered bundle• Importing and exporting services• The whiteboard pattern• Dynamics• Startup and shutdown
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.066
![Page 67: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/67.jpg)
Startup• Context creation• Context creation
– blocks until all mandatory service references are satisfied– simply start your bundles and let Spring Dynamic Modules
figure it out• Control via Spring-Context manifest header directives
– wait-for-dependencies:=[true|false]– timeout:=[seconds]
• E.g.– Spring-Context: *;wait-for-dependencies:=falsep g ; p
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
![Page 68: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/68.jpg)
Shutdown
• Module contexts disposed when bundle is stopped• Module contexts disposed when bundle is stopped• Stopping the extender bundle disposes of all module contexts created by it
First those bundles that do not export any referenced services (in reverse bundle id order)Cycles broken first by ranking, then by service idy y g, y
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
![Page 69: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/69.jpg)
Agenda• What is Spring Dynamic Modules?• What is Spring Dynamic Modules?• Spring Dynamic Modules in Action• Server-side ApplicationsServer side Applications• RCP Applications• Summaryy
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.069
![Page 70: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/70.jpg)
Server-side Applications• Options for using OSGi on the server-sideOptions for using OSGi on the server-side• Enterprise library "gotchas"• Context class loader management
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.070
![Page 71: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/71.jpg)
Embedded OSGi
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
![Page 72: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/72.jpg)
OSGi as a server platform
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
![Page 73: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/73.jpg)
Nested OSGi
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
![Page 74: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/74.jpg)
Enterprise Libraries under OSGi• class and resource-loading problems• class and resource-loading problems
– class visibility– Class.forName– context class loader
• Good news: Spring 2.5 is OSGi-readyd l hi d b dl– modules shipped as bundles
– all class loading behaves correctly under OSGi
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
![Page 75: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/75.jpg)
Example: Class visibility
Data LayerBundle
Import-Package Import-Package
Domain ModelBundle
<Export-Pkg>
HibernateBundle
<Export Pkg>domaint
g gtypes,mappingfiles SessionFactory
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
![Page 76: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/76.jpg)
Class visibility solutions
• Dynamic-ImportPackage• Dynamic-ImportPackagea last resort, too broad a scopedoes not affect module resolution
• Equinox Buddy PolicyIn Hibernate bundle manifest:
• Eclipse-BuddyPolicy : registered• Eclipse BuddyPolicy : registeredIn domain model bundle manifest:
• Eclipse-RegisterBuddy : org.hibernate• Import Package: org hibernate• Import-Package: org.hibernate
• Attach a Fragment BundleWith required Import-Package headers
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
![Page 77: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/77.jpg)
Class.forName
• Caches the returned• Caches the returned class in the initiating class loader
A D
– native, vm-level cache
• Can cause class loading errors
B
forName(...,CCL)
errors• Prefer
ClassLoader.loadClass C C'C C
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
![Page 78: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/78.jpg)
Context Class Loader
• Heavily used in enterprise Java• Heavily used in enterprise Java• Expected to have visibility of application types + classpath
• ContextClassLoader is undefined in OSGi!No notion of “context”; No notion of “application”
S l ti• Solutions:Eclipse Equinox: Context FinderSpring Dynamic Modules : CCL managementp g y g
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
![Page 79: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/79.jpg)
Context ClassLoader Management
• Context ClassLoader guaranteed to have visibility of• Context ClassLoader guaranteed to have visibility of bundle classpath when the module context for a bundle is created
• Control CCL on service invocation:client-side (attribute of reference element)
context-class-loader=”client|service-provider|unmanaged”context class loader client|service provider|unmanagedservice-side (attribute of service element)
context-class-loader=”service-provider|unmanaged”
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
![Page 80: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/80.jpg)
Web Applications• OSGi HttpService (Servlet 2 1 - 1998)• OSGi HttpService (Servlet 2.1 - 1998)
– registerServlets and resources under aliases– programmatic configuration
• Equinox Http Registry bundle– register servlets and resources using eclipse extension
registryregistry• OPS4J
– (http://wiki.ops4j.org/confluence/display/ops4j/Pax)Pax Web (Servlet 2 5 based on Jetty)– Pax Web (Servlet 2.5, based on Jetty)
– Pax Web Extender – War• Focus of Spring Dynamic Modules v1.1
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
![Page 81: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/81.jpg)
The Spring DM 1.1 way…
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
![Page 82: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/82.jpg)
Web applications as Bundles
• “Regular” WAR files• “Regular” WAR files• Additional Bundle-Manifest
<context-param> Cl /
• web.xml shows how Spring DM is integrated
<param-name>contextClass</param-name> <param-value>org.springframework.osgi.web.context.support.OsgiBundleXmlWebApplicationContext</param-value>
</context-param>
<listener> <listener-class>org.springframework.web.context.ContextLoaderListener
</listener-class> </listener>
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
</listener>
![Page 83: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/83.jpg)
Spring DM Web Support by Example
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
![Page 84: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/84.jpg)
Demo/Exercise 6: Web front-end
• Step 1:• Step 1:Import the example projects into your workspace
• Step 2:pStart the server runtimeTake a look at the console
St 3• Step 3:Try out the web-front-end
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
![Page 85: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/85.jpg)
Agenda• What is Spring Dynamic Modules?• What is Spring Dynamic Modules?• Spring Dynamic Modules in Action• Server-side ApplicationsServer side Applications• RCP Applications• Summaryy
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.085
![Page 86: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/86.jpg)
Pure RCP Client for a Spring Backend
• Server provides REST/SOAP services client• Server provides REST/SOAP services, client consumes via HTTP
• Server provides services via RMI, client consumes via
Application Server
p ,RMI
Application Server
Rich Client
usin
ess
ogic
and
ro
cess
ontr
ol
DataView
Sprin
g-xp
orte
rHTTP, RMI, …
ok
Bu
Lo PCoV S Ex
Eclipse RCP Spring
ok
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
![Page 87: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/87.jpg)
Evaluation
+Unrestricted usage of Spring on the server+Unrestricted usage of Spring on the server+Unrestricted usage of RCP on the client
−Different deployment and programming models(OSGi bundles on the client, typical WAR/EAR files on the server)
Good for highly decoupled systemsDifficult for more integrated systemsDifficult for more integrated systems
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
![Page 88: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/88.jpg)
RCP & Spring on the Client, Spring Backend
• Uses Spring/Remoting for remote communication• Uses Spring/Remoting for remote communication• With all the possible variations (RMI, HTTPInvoker,
Hessian, Burlap, etc.)
Application Server
, p, )
Rich Client
Bus
ines
s Lo
gic
and
Proc
ess
Con
trol
DataView
Sprin
g-Ex
port
er
Sprin
g-Pr
oxyB
ean
ok
P
Eclipse RCP
SpringSpring
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
![Page 89: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/89.jpg)
Evaluation
+Unrestricted usage of Spring on the client and the+Unrestricted usage of Spring on the client and the server
+Unrestricted usage of RCP on the clientg+Easy remote communication via Spring/Remoting
−Still different deployment and programming models(OSGi bundles on the client, typical WAR/EAR files on the server)the server)
Although most likely classes are shared between client and server
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
![Page 90: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/90.jpg)
Spring & OSGi everywhere
• Equinox/OSGi can be used to implement middle tiers• Equinox/OSGi can be used to implement middle-tiersSame component model on both sidesSame extensibility for both sides
Application Server
• Client and server shares components
pp
Rich Client
Bus
ines
s Lo
gic
and
Proc
ess
Con
trol
DataView
Sprin
g-Ex
port
er
Sprin
g-Pr
oxyB
ean
ok
B LC EP
Equinox OSGi
SpringSpringEclipse RCP (UI-Part)
Equinox OSGi
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
![Page 91: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/91.jpg)
Evaluation
+ Full OSGi power on client and server+ Full OSGi power on client and server+ Full Spring power on client and server+Homogeneous programming model for client and+Homogeneous programming model for client and
server
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
![Page 92: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/92.jpg)
More Spring on the Rich Client
• Dependency injection and all other technology• Dependency injection and all other technology abstractions usable as well
Just straight forward using Spring Dynamic Modules
• How to incorporate this with the Extension-Registry?F l i j t d d i i t i d dit ?For example, inject dependencies into views and editors?
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
![Page 93: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/93.jpg)
Alternative 1: Views with dependencies
• Define the view in the Spring context• Define the view in the Spring contextUsing Spring for dependency injection
• Define the Extension using an extension factoryg yWhich delegates the creation to the Spring context
+D d i j ti f l t i+Dependency injection for general extensions−Cumbersome manual programming for each
extension
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
![Page 94: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/94.jpg)
Alternative 2: Auto wiring
• Define the view in the Spring context• Define the view in the Spring contextUsing Spring for dependency injection
• Add a call to the auto wiring factory from the views g yconstructor
+Dependency injection for general extensions−Still some manual extra code for each extension
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
![Page 95: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/95.jpg)
Alternative 3: Spring-Extension-Bridge
• Define the view in the Spring context• Define the view in the Spring contextUsing Spring for dependency injection
• Define the SpringExtensionFactory as implementation p g y pclass in the extension (generic variant of alternative 1)
+Dependency injection for general extensions+No additional code+Easy to use+Easy to use−Need to change extension definition
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
![Page 96: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/96.jpg)
Alternative 4: @Configurable
• Define the view in the Spring context• Define the view in the Spring contextUsing Spring for dependency injection
• Add the @Configurable annotation to the view @ gimplementation
And use Equinox Aspects to load-time weave the spring aspects
+Dependency injection for general extensions+No additional code unchanged extensions+No additional code, unchanged extensions−Adds load-time weaving overhead−More difficult infrastructure setup
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
p
![Page 97: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/97.jpg)
Demo: Spring-powered RCP
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
![Page 98: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/98.jpg)
Summary
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
![Page 99: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/99.jpg)
Summary
• OSGi: the dynamic module system for Java• OSGi: the dynamic module system for Java• Benefits: modularity, versioning, operational control• The server-side is coming to OSGig• Spring Dynamic Modules brings the familiar Spring
model to the OSGi platform• Enterprise application development path to be
smoothed during 2008e g SpringSource Application Platforme.g. SpringSource Application Platform
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
![Page 100: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/100.jpg)
Thank you for your attention
•Q&AQ&
• Martin Lippertli t@[email protected]
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
![Page 101: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/101.jpg)
Backup Materials
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
![Page 102: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/102.jpg)
Versioning• Packages are importedPackages are imported
optionally with version information
Can have multiple versions
YourApplication
• Can have multiple versions of same package concurrently Lib A Lib BLib A Lib B
Lib C v1 Lib C v2
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
![Page 103: Spring and OSGi Combined with Spring Dynamic Modules · Tutorial: Spring and OSGi Combined with Spring Dynamic Modules Martin Lippert, aquinet it-agile GmbH BJ Hargrave, IBM & CTO](https://reader031.vdocuments.mx/reader031/viewer/2022021902/5b99523609d3f294728bb60d/html5/thumbnails/103.jpg)
Try it: versioning
Versioning Import-Package: org.osgi.framework;version="1.3.0",VersioningDemo
Import Package: org.osgi.framework;version 1.3.0 ,com.springsource.printing.lib;version="2.0",com.springsource.datetime
PrintingLib v2
Date/Time
Export-Package: com.springsource.datetimeImport-Package: com.springsource.printing.lib;Lib v2
Printing
Time
Export-Package: com.springsource.printing.lib;
i 2 0
version="[1.0.0,2.0.0)"
Lib v1version="2.0"
Export-Package: com springsource printing lib;
Spring + OSGi = Spring Dynamic Modules | Tutorial | © 2008 by Martin Lippert, BJ Hargrave, Adrian Colyer; made available under the EPL v1.0
com.springsource.printing.lib;version="1.0"