introduction to osgi
DESCRIPTION
Introduction to OSGi presentation given to the Denver Java User group on November 12, 2008TRANSCRIPT
![Page 2: Introduction To OSGi](https://reader033.vdocuments.mx/reader033/viewer/2022052315/554f42dfb4c905cd048b5559/html5/thumbnails/2.jpg)
Introduction - Chris Custine
Apache ServiceMix - Committer
Open Source ESB
JBI 1.0 Implementation
ServiceMix 4 - OSGi Based (Apache Felix)
Apache Directory Server - Committer and PMC Member
LDAP v3 Certified
100% Java
Soon to be OSGi, but currently used in some OSGi services
Organic Element - Open Source Consulting and Software Development
2
![Page 3: Introduction To OSGi](https://reader033.vdocuments.mx/reader033/viewer/2022052315/554f42dfb4c905cd048b5559/html5/thumbnails/3.jpg)
Presentation Agenda
OSGi Overview and History
OSGi Architecture and Layers
Best Practices
Recommended Tools
3
![Page 4: Introduction To OSGi](https://reader033.vdocuments.mx/reader033/viewer/2022052315/554f42dfb4c905cd048b5559/html5/thumbnails/4.jpg)
What is OSGi?
OSGi - Formerly Open Services Gateway Initiative
Now just OSGi due to generalization of market
OSGi Alliance - Consortium of Vendors
4
![Page 5: Introduction To OSGi](https://reader033.vdocuments.mx/reader033/viewer/2022052315/554f42dfb4c905cd048b5559/html5/thumbnails/5.jpg)
What Does the OSGi Alliance Do?
Defines OSGi Service Platform specification
Multiple groups define the specifications
Core Platform Expert Group (CPEG) – Core framework
Mobile Expert Group (MEG) – Mobile
Vehicle Expert Group (VEG) – Automotive
Enterprise Expert Group (EEG) – Enterprise
Residential Expert Group (REG) – Home Automation
5
![Page 6: Introduction To OSGi](https://reader033.vdocuments.mx/reader033/viewer/2022052315/554f42dfb4c905cd048b5559/html5/thumbnails/6.jpg)
Where did OSGi come from?
Originally aimed at Home Automation market
Home Gateway device to monitor and interact with devices
Multi vendor devices connected throughout the home
6
![Page 7: Introduction To OSGi](https://reader033.vdocuments.mx/reader033/viewer/2022052315/554f42dfb4c905cd048b5559/html5/thumbnails/7.jpg)
Where did OSGi come from?
Requirement for standard plugin model for Gateway deviceGUI Model for administration of devicesServices available to devices
Data storage
Conversion
Network
Software management and deploymentSoftware updates
SecurityServices only available to same device/vendorOnly allow updates from properly signed jar
“Hello, this is your refrigerator... you need to buy milk”
7
![Page 8: Introduction To OSGi](https://reader033.vdocuments.mx/reader033/viewer/2022052315/554f42dfb4c905cd048b5559/html5/thumbnails/8.jpg)
How we got here
Original use case (Home Automation) faltered around 2000
OSGi used in niche areas (automotive, mobile) for several years
Eclipse 3.0 released June 2004 - First Eclipse with OSGi
Gradual adoption and recognition for OSGi after Eclipse
Currently undergoing widespread adoption
8
![Page 9: Introduction To OSGi](https://reader033.vdocuments.mx/reader033/viewer/2022052315/554f42dfb4c905cd048b5559/html5/thumbnails/9.jpg)
OSGi is...
About building systems from smaller components
Components working together
Managing components
9
![Page 10: Introduction To OSGi](https://reader033.vdocuments.mx/reader033/viewer/2022052315/554f42dfb4c905cd048b5559/html5/thumbnails/10.jpg)
Why OSGi?
Convergence of mobile and embedded devices creates huge manageability problems
Portability - Hardware, OS
Management - Massive pushes for updates and fixes
Maintenance - Dynamic library management and dependencies causing unmanageable hacks like Class.forName()
10
![Page 11: Introduction To OSGi](https://reader033.vdocuments.mx/reader033/viewer/2022052315/554f42dfb4c905cd048b5559/html5/thumbnails/11.jpg)
OSGi Relationship with Java
Always focused on Java
Bundles may contain native libraries used via JNI
Example: Eclipse uses native libraries for SWT GUI calls
RFC-119 for distributed OSGi allows communication with external systems (possibly not Java)
Script language support from bundle providers
11
![Page 12: Introduction To OSGi](https://reader033.vdocuments.mx/reader033/viewer/2022052315/554f42dfb4c905cd048b5559/html5/thumbnails/12.jpg)
OSGi Service Platform
Two distinct specifications
Core Specification - Core framework, packaging, modularity, security, API (interfaces), etc.
Service Compendium - Additional services (some optional), utilities, logging, event system, configuration admin, etc.
12
![Page 13: Introduction To OSGi](https://reader033.vdocuments.mx/reader033/viewer/2022052315/554f42dfb4c905cd048b5559/html5/thumbnails/13.jpg)
OSGi Architecture and Layers
Execution Environment
Module
Lifecycle
Service
Se
cu
rity
Hardware / OS
Bundles
13
![Page 14: Introduction To OSGi](https://reader033.vdocuments.mx/reader033/viewer/2022052315/554f42dfb4c905cd048b5559/html5/thumbnails/14.jpg)
Java Execution Environment
Managing the runtime environment
What do I require to run?
JRE Level
GUI Requirements
Matching application requirements with the platform
Execution Environment
Module
Lifecycle
Service
Security
Hardware / OS
Bundles
14
![Page 15: Introduction To OSGi](https://reader033.vdocuments.mx/reader033/viewer/2022052315/554f42dfb4c905cd048b5559/html5/thumbnails/15.jpg)
Module Layer
Packaging and deployment standards
Specify constraints on dependencies and requirements
Visibility between components
Execution Environment
Module
Lifecycle
Service
Security
Hardware / OS
Bundles
15
![Page 16: Introduction To OSGi](https://reader033.vdocuments.mx/reader033/viewer/2022052315/554f42dfb4c905cd048b5559/html5/thumbnails/16.jpg)
Lifecycle Layer
Fine grained events for application and component lifecycle
Installing, starting, stopping
Standard API for registering, listening, and acting on events
No custom API needed for plugins and extensions
Execution Environment
Module
Lifecycle
Service
Security
Hardware / OS
Bundles
16
![Page 17: Introduction To OSGi](https://reader033.vdocuments.mx/reader033/viewer/2022052315/554f42dfb4c905cd048b5559/html5/thumbnails/17.jpg)
Services Layer
Standard methods for registering service instances
Discover and bind to services from other components
Reference tracking
Execution Environment
Module
Lifecycle
Service
Security
Hardware / OS
Bundles
17
![Page 18: Introduction To OSGi](https://reader033.vdocuments.mx/reader033/viewer/2022052315/554f42dfb4c905cd048b5559/html5/thumbnails/18.jpg)
Security Layer
Protect Visibility between components
Example: Vendor A only wants to use the XYZ service provided by Vendor A (could be multiple other implementations of XYZ)
Constraints can be expressed using certificates from signed jars or attributes for bundle, service, etc.
Execution Environment
Module
Lifecycle
Service
Security
Hardware / OS
Bundles
18
![Page 19: Introduction To OSGi](https://reader033.vdocuments.mx/reader033/viewer/2022052315/554f42dfb4c905cd048b5559/html5/thumbnails/19.jpg)
Layer Details
Module, Lifecycle, and Service layers are where most work is done for enterprise Java development
Security is important but not as widely utilized
19
![Page 20: Introduction To OSGi](https://reader033.vdocuments.mx/reader033/viewer/2022052315/554f42dfb4c905cd048b5559/html5/thumbnails/20.jpg)
Java Modularity Limitations
Scoping and visibility is limited to packages (no module scoping)
Dependency management? Managed through classpath
Version handling? First package match on classpath
Modularity is not supported as a first class citizen
20
![Page 21: Introduction To OSGi](https://reader033.vdocuments.mx/reader033/viewer/2022052315/554f42dfb4c905cd048b5559/html5/thumbnails/21.jpg)
Module Layer
Bundles are the primary building block
Package visibility and sharing
Security constraints on packages
Classloader per bundle
Graph of classloaders, resolved at deploy time
Execution Environment
Module
Lifecycle
Service
Se
cu
rity
Hardware / OS
Bundles
21
![Page 22: Introduction To OSGi](https://reader033.vdocuments.mx/reader033/viewer/2022052315/554f42dfb4c905cd048b5559/html5/thumbnails/22.jpg)
Module Layer
Bundle - Just a jar file
META-INF/manifest.mf
Dependencies
Versioning
Consistency
Execution Environment
Module
Lifecycle
Service
Security
Hardware / OS
Bundles
� � � � � � � � � � � � � � � � �
� �� � � � � � � � � � � � � � �Manifest-Version: 1.0
Import-Package: ...
Export-Package: ...
Bundle-Activator: ...
Bundle-Version: 1.1.0.SNAPSHOT
Bundle-Name: ...
Bundle-ManifestVersion: 2
Bundle-SymbolicName: ...
22
![Page 23: Introduction To OSGi](https://reader033.vdocuments.mx/reader033/viewer/2022052315/554f42dfb4c905cd048b5559/html5/thumbnails/23.jpg)
Module Layer - Example Manifest
Bundle-ManifestVersion: 2 Bundle-SymbolicName: org.apache.servicemix.kernel.filemonitorBundle-Version: 1.1.0.SNAPSHOTImport-Package: org.apache.commons.logging,org.apache.servicemix.kerne l.filemonitor,org.osgi.framework,org.osgi.service.cm;version="1.2",or g.osgi.service.packageadmin,org.osgi.util.tracker;version="1.3"Export-Package: org.apache.servicemix.kernel.filemonitor;uses:="org.os gi.framework,org.apache.commons.logging,org.osgi.service.cm,org.osgi. service.packageadmin,org.osgi.util.tracker"Bundle-Activator: org.apache.servicemix.kernel.filemonitor.FileMonitorActivatorBundle-Name: Apache ServiceMix Kernel :: File MonitorBundle-Description: This bundle monitors the deploy directory for new OSGi bundles in jar form, expanded form or for configuration f ile changes and undeploys/redeploys them
Text
META-INF/manifest.mf
23
![Page 24: Introduction To OSGi](https://reader033.vdocuments.mx/reader033/viewer/2022052315/554f42dfb4c905cd048b5559/html5/thumbnails/24.jpg)
Module Layer - Example Manifest
Bundle-ManifestVersion: 2 Bundle-SymbolicName: org.apache.servicemix.kernel.filemonitorBundle-Version: 1.1.0.SNAPSHOTImport-Package: org.apache.commons.logging,org.apache.servicemix.kerne l.filemonitor,org.osgi.framework,org.osgi.service.cm;version="1.2",or g.osgi.service.packageadmin,org.osgi.util.tracker;version="1.3"Export-Package: org.apache.servicemix.kernel.filemonitor;uses:="org.os gi.framework,org.apache.commons.logging,org.osgi.service.cm,org.osgi. service.packageadmin,org.osgi.util.tracker"Bundle-Activator: org.apache.servicemix.kernel.filemonitor.FileMonitorActivatorBundle-Name: Apache ServiceMix Kernel :: File MonitorBundle-Description: This bundle monitors the deploy directory for new OSGi bundles in jar form, expanded form or for configuration f ile changes and undeploys/redeploys them
Text
META-INF/manifest.mf
24
![Page 25: Introduction To OSGi](https://reader033.vdocuments.mx/reader033/viewer/2022052315/554f42dfb4c905cd048b5559/html5/thumbnails/25.jpg)
Module Layer - Example Manifest
Bundle-ManifestVersion: 2 Bundle-SymbolicName: org.apache.servicemix.kernel.filemonitorBundle-Version: 1.1.0.SNAPSHOTImport-Package: org.apache.commons.logging,org.apache.servicemix.kerne l.filemonitor,org.osgi.framework,org.osgi.service.cm;version="1.2",or g.osgi.service.packageadmin,org.osgi.util.tracker;version="1.3"Export-Package: org.apache.servicemix.kernel.filemonitor;uses:="org.os gi.framework,org.apache.commons.logging,org.osgi.service.cm,org.osgi. service.packageadmin,org.osgi.util.tracker"Bundle-Activator: org.apache.servicemix.kernel.filemonitor.FileMonitorActivatorBundle-Name: Apache ServiceMix Kernel :: File MonitorBundle-Description: This bundle monitors the deploy directory for new OSGi bundles in jar form, expanded form or for configuration f ile changes and undeploys/redeploys them
Text
META-INF/manifest.mf
25
![Page 26: Introduction To OSGi](https://reader033.vdocuments.mx/reader033/viewer/2022052315/554f42dfb4c905cd048b5559/html5/thumbnails/26.jpg)
Module Layer - Example Manifest
Bundle-ManifestVersion: 2 Bundle-SymbolicName: org.apache.servicemix.kernel.filemonitorBundle-Version: 1.1.0.SNAPSHOTImport-Package: org.apache.commons.logging,org.apache.servicemix.kerne l.filemonitor,org.osgi.framework,org.osgi.service.cm;version="1.2",or g.osgi.service.packageadmin,org.osgi.util.tracker;version="1.3"Export-Package: org.apache.servicemix.kernel.filemonitor;uses:="org.os gi.framework,org.apache.commons.logging,org.osgi.service.cm,org.osgi. service.packageadmin,org.osgi.util.tracker"Bundle-Activator: org.apache.servicemix.kernel.filemonitor.FileMonitorActivatorBundle-Name: Apache ServiceMix Kernel :: File MonitorBundle-Description: This bundle monitors the deploy directory for new OSGi bundles in jar form, expanded form or for configuration f ile changes and undeploys/redeploys them
Text
META-INF/manifest.mf
26
![Page 27: Introduction To OSGi](https://reader033.vdocuments.mx/reader033/viewer/2022052315/554f42dfb4c905cd048b5559/html5/thumbnails/27.jpg)
Module Layer - Example Manifest
Bundle-ManifestVersion: 2 Bundle-SymbolicName: org.apache.servicemix.kernel.filemonitorBundle-Version: 1.1.0.SNAPSHOTImport-Package: org.apache.commons.logging,org.apache.servicemix.kerne l.filemonitor,org.osgi.framework,org.osgi.service.cm;version="1.2",or g.osgi.service.packageadmin,org.osgi.util.tracker;version="1.3"Export-Package: org.apache.servicemix.kernel.filemonitor;uses:="org.os gi.framework,org.apache.commons.logging,org.osgi.service.cm,org.osgi. service.packageadmin,org.osgi.util.tracker"Bundle-Activator: org.apache.servicemix.kernel.filemonitor.FileMonitorActivatorBundle-Name: Apache ServiceMix Kernel :: File MonitorBundle-Description: This bundle monitors the deploy directory for new OSGi bundles in jar form, expanded form or for configuration f ile changes and undeploys/redeploys them
Text
META-INF/manifest.mf
27
![Page 28: Introduction To OSGi](https://reader033.vdocuments.mx/reader033/viewer/2022052315/554f42dfb4c905cd048b5559/html5/thumbnails/28.jpg)
Module Layer - Example Manifest
Bundle-ManifestVersion: 2 Bundle-SymbolicName: org.apache.servicemix.kernel.filemonitorBundle-Version: 1.1.0.SNAPSHOTImport-Package: org.apache.commons.logging,org.apache.servicemix.kerne l.filemonitor,org.osgi.framework,org.osgi.service.cm;version="1.2",or g.osgi.service.packageadmin,org.osgi.util.tracker;version="1.3"Export-Package: org.apache.servicemix.kernel.filemonitor;uses:="org.os gi.framework,org.apache.commons.logging,org.osgi.service.cm,org.osgi. service.packageadmin,org.osgi.util.tracker"Bundle-Activator: org.apache.servicemix.kernel.filemonitor.FileMonitorActivatorBundle-Name: Apache ServiceMix Kernel :: File MonitorBundle-Description: This bundle monitors the deploy directory for new OSGi bundles in jar form, expanded form or for configuration f ile changes and undeploys/redeploys them
Text
META-INF/manifest.mf
28
![Page 29: Introduction To OSGi](https://reader033.vdocuments.mx/reader033/viewer/2022052315/554f42dfb4c905cd048b5559/html5/thumbnails/29.jpg)
Module Layer - Bundle Contents
Bundles may contain additional contents not usually included in jars.
Native code - Multiple platforms, OS, etc. loading rules specified in manifest
Embedded jar files - Bundle-Classpath allows embedded jars to be referenced from manifest.mf (not recommended)
Resource files - images, configuration, html
29
![Page 30: Introduction To OSGi](https://reader033.vdocuments.mx/reader033/viewer/2022052315/554f42dfb4c905cd048b5559/html5/thumbnails/30.jpg)
Module Layer - Bundle State
INSTALLED
UNINSTALLED RESOLVED
STARTING STOPPING
ACTIVE
uninstall resolve
update
uninstall
start
stop
install
30
![Page 31: Introduction To OSGi](https://reader033.vdocuments.mx/reader033/viewer/2022052315/554f42dfb4c905cd048b5559/html5/thumbnails/31.jpg)
Module Layer - Bundle State
INSTALLED
UNINSTALLED RESOLVED
STARTING STOPPING
ACTIVE
uninstall resolve
update
uninstall
start
stop
install
Resolution of dependencies at deployment
If resolution fails, bundle is not available for use
No runtime CNFE
Services and lifecycle not called until AFTER resolution
31
![Page 32: Introduction To OSGi](https://reader033.vdocuments.mx/reader033/viewer/2022052315/554f42dfb4c905cd048b5559/html5/thumbnails/32.jpg)
Module Layer - Resolution Goodies
Exporters can name arbitrary attributes for matching
Attributes can be mandatory for matching
org.apache.mypackageb-1.0.0.jar
META-INF/manifest.mf
Export-Package:
org.apache.mypackage;
version=”1.0.0”;flavor=”vanilla”
org.apache.bundlea-1.0.0.jar
META-INF/manifest.mf
Import-Package:
org.apache.mypackage;
version=”1.0.0”;flavor=”vanilla”
org.apache.mypackagea-1.0.0.jar
META-INF/manifest.mf
Export-Package:
org.apache.mypackage;
version=”1.0.0”
32
![Page 33: Introduction To OSGi](https://reader033.vdocuments.mx/reader033/viewer/2022052315/554f42dfb4c905cd048b5559/html5/thumbnails/33.jpg)
Module Layer - Resolution Goodies
Same package can be installed with different versions
Importers can specify version ranges for compatibility
Allows staged migration of multiple components
org.apache.mypackage-2.0.0.jar
META-INF/manifest.mf
Export-Package:
org.apache.mypackage;
version=”2.0.0”
org.apache.bundlea-1.0.0.jar
META-INF/manifest.mf
Import-Package:
org.apache.mypackage;
version=”[1.0.1,2.0.0)”
org.apache.mypackage-1.0.1.jar
META-INF/manifest.mf
Export-Package:
org.apache.mypackage;
version=”1.0.1”
33
![Page 34: Introduction To OSGi](https://reader033.vdocuments.mx/reader033/viewer/2022052315/554f42dfb4c905cd048b5559/html5/thumbnails/34.jpg)
Lifecycle Layer
Execution Environment
Module
Lifecycle
Service
Se
cu
rity
Hardware / OS
Bundles
Bundle-Activator: Like main() for your bundle.
Bundles can tap into the lifecycle events of the framework
Extremely powerful when combined with startlevel features
Ability to register listeners for bundle state changes
34
![Page 35: Introduction To OSGi](https://reader033.vdocuments.mx/reader033/viewer/2022052315/554f42dfb4c905cd048b5559/html5/thumbnails/35.jpg)
Lifecycle Layer
Execution Environment
Module
Lifecycle
Service
Security
Hardware / OS
Bundles
Bundle activation provides the bundle context to the bundle
Bundle context provides access to the framework and all services
Creates and registers service instances
Get reference to required services
Register listeners for bundle lifecycle BundleActivator.java
package org.osgi.framework; public interface BundleActivator { public void start(BundleContext context) throws Exception; public void stop(BundleContext context) throws Exception; }
35
![Page 36: Introduction To OSGi](https://reader033.vdocuments.mx/reader033/viewer/2022052315/554f42dfb4c905cd048b5559/html5/thumbnails/36.jpg)
Service Layer
Primary means of collaboration between components
Service Registry for discovering and binding to services
Ability to listen for services (Service Tracker)
Service oriented model for in VM interactions
RFC-119 Brings distributed services across instances
Execution Environment
Module
Lifecycle
Service
Se
cu
rity
Hardware / OS
Bundles
36
![Page 37: Introduction To OSGi](https://reader033.vdocuments.mx/reader033/viewer/2022052315/554f42dfb4c905cd048b5559/html5/thumbnails/37.jpg)
Start Level Service
Setting bundle start order
Similar to Unix init scripts
Start level can be changed up and down at runtime
Persistent start level on restarts
37
![Page 38: Introduction To OSGi](https://reader033.vdocuments.mx/reader033/viewer/2022052315/554f42dfb4c905cd048b5559/html5/thumbnails/38.jpg)
OSGi Compendium Services
Log Service
Http Service
Device Access
Configuration Admin
Metatype Service
Preferences Service
User Admin
Wire Admin
IO Connector
Initial Provisioning
UPnP
Declarative Services
Event Admin
Deployment Admin
Auto Configuration
Application Admin
DMT Admin
Monitor Admin
Service Tracker
38
![Page 39: Introduction To OSGi](https://reader033.vdocuments.mx/reader033/viewer/2022052315/554f42dfb4c905cd048b5559/html5/thumbnails/39.jpg)
Configuration Admin
Configuration provided by framework service
Notification to bundles when configuration changed
39
![Page 40: Introduction To OSGi](https://reader033.vdocuments.mx/reader033/viewer/2022052315/554f42dfb4c905cd048b5559/html5/thumbnails/40.jpg)
Best Practices
Use package names consistently - We use package name for artifact name (Eclipse plugins do too), with one package heirarchy per bundle. Quick recognition of artifact and package purpose.
Keep public and private classes in separate packages
Use explicit Import-Package. Don’t use Require-Bundle. Easy to use initially, but causes problems down the road.
Avoid Dynamic-Import - Defers classloading to runtime
Allows arbitrary Class.forName() use case but causes trouble
Use tools to compose manifest files and package bundles (Maven plugins, Eclipse PDE, etc.)
40
![Page 41: Introduction To OSGi](https://reader033.vdocuments.mx/reader033/viewer/2022052315/554f42dfb4c905cd048b5559/html5/thumbnails/41.jpg)
Tools for OSGi - BND
Peter Kriens - BND
Tool for analyzing dependencies and validating manifest.mf
Uses reflection to analyze imports and lists dependencies
Great tool for analyzing non-OSGi jar files and converting
41
![Page 42: Introduction To OSGi](https://reader033.vdocuments.mx/reader033/viewer/2022052315/554f42dfb4c905cd048b5559/html5/thumbnails/42.jpg)
Tools for OSGi - Maven Felix Plugin
Uses BND to automate creation of manifest.mf
Use packaging=bundle to invoke plugin in package lifecycle
pom.xml <plugin> <groupId>org.apache.felix</groupId> <artifactId>maven-bundle-plugin</artifactId> <configuration> <instructions> <Bundle-SymbolicName>${pom.artifactId}</Bundle-SymbolicName> <Export-Package>org.apache.servicemix.kernel.gshell.activemq;version=${project.version};-split-package:=merge-first</Export-Package> <Import-Package> org.apache.geronimo.gshell.wisdom.command, org.apache.servicemix.kernel.gshell.core, org.apache.geronimo.gshell.wisdom.registry, * </Import-Package> <Private-Package>!*</Private-Package> <Spring-Context>*;publish-context:=false;create-asynchronously:=false</Spring-Context> </instructions> </configuration> </plugin>
42
![Page 43: Introduction To OSGi](https://reader033.vdocuments.mx/reader033/viewer/2022052315/554f42dfb4c905cd048b5559/html5/thumbnails/43.jpg)
Tools for OSGi - Spring DM
SpringDM bridges the Spring world with OSGi Service Platform
Reuse existing knowledge of Spring
Limited knowledge of OSGi required
Expose spring beans in the OSGi Service Registry
Can be bound to by pure OSGi service consumers
Lookup and bind bean refs to OSGi services
43
![Page 44: Introduction To OSGi](https://reader033.vdocuments.mx/reader033/viewer/2022052315/554f42dfb4c905cd048b5559/html5/thumbnails/44.jpg)
Tools for OSGi - Spring DM
Example: ActiveMQ broker definition using SpringDM and OSGi
broker.xml <bean id="pooledConnectionFactory" class="org.apache.activemq.pool.PooledConnectionFactoryBean"> <property name="maxConnections" value="8" /> <property name="transactionManager" ref="transactionManager" /> <property name="connectionFactory" ref="activemqConnectionFactory" /> <property name="resourceName" value="activemq.${name}" /> </bean> <osgi:reference id="transactionManager" interface="javax.transaction.TransactionManager" cardinality="0..1"/> <osgi:service ref="pooledConnectionFactory"> <osgi:interfaces> <value>javax.jms.ConnectionFactory</value> </osgi:interfaces> <osgi:service-properties> <entry key="name" value="${name}"/> </osgi:service-properties> </osgi:service>
44
![Page 45: Introduction To OSGi](https://reader033.vdocuments.mx/reader033/viewer/2022052315/554f42dfb4c905cd048b5559/html5/thumbnails/45.jpg)
Tools for OSGi - Spring DM
Example: Using OSGi Configuration Admin for Property Placeholder
beans.xml <bean id="myTransform" class="org.apache.servicemix.examples.camel.MyTransform"> <property name="prefix" value="${prefix}"/> </bean> <osgix:property-placeholder persistent-id="org.apache.servicemix.examples"> <osgix:default-properties> <prop key="prefix">MyTransform</prop> </osgix:default-properties> </osgix:property-placeholder>
45
![Page 46: Introduction To OSGi](https://reader033.vdocuments.mx/reader033/viewer/2022052315/554f42dfb4c905cd048b5559/html5/thumbnails/46.jpg)
Conclusion
OSGi forces planning and engineering of bundle interactions
More work up front, but rewards come later
No silver bullet, bad code and bad ideas are still bad
Many built in features and services provided for applications
Modularization is rewarded when creating new systems and modifying existing ones
46
![Page 47: Introduction To OSGi](https://reader033.vdocuments.mx/reader033/viewer/2022052315/554f42dfb4c905cd048b5559/html5/thumbnails/47.jpg)
Tour of ServiceMix 4 OSGi Features
47
![Page 48: Introduction To OSGi](https://reader033.vdocuments.mx/reader033/viewer/2022052315/554f42dfb4c905cd048b5559/html5/thumbnails/48.jpg)
Questions?
48