osgi blueprint services
DESCRIPTION
TRANSCRIPT
![Page 1: OSGi Blueprint Services](https://reader033.vdocuments.us/reader033/viewer/2022051411/540ecf638d7f72747e8b5097/html5/thumbnails/1.jpg)
OSGi Blueprint Services
Blueprint ServicesBlueprint Services
DI brought to OSGi
Guillaume Nodet
![Page 2: OSGi Blueprint Services](https://reader033.vdocuments.us/reader033/viewer/2022051411/540ecf638d7f72747e8b5097/html5/thumbnails/2.jpg)
OSGi DevCon, June 22, 2009 Copyright Guillaume Nodet, Licensed under ASL 2.0 1
OSGi Blueprint Services
Author• Guillaume Nodet• ASF Member, VP Apache ServiceMix,
PMC member of various Apacheprojects (ServiceMix, Felix, Geronimo,Mina …)
• Software Architect at Progress Software• OSGi Enterprise Expert Group
![Page 3: OSGi Blueprint Services](https://reader033.vdocuments.us/reader033/viewer/2022051411/540ecf638d7f72747e8b5097/html5/thumbnails/3.jpg)
OSGi DevCon, June 22, 2009 Copyright Guillaume Nodet, Licensed under ASL 2.0 2
OSGi Blueprint Services
Agenda• Introduction• Configuration• Beans• Service references• Service registrations• Advanced uses• Next steps• Conclusion
![Page 4: OSGi Blueprint Services](https://reader033.vdocuments.us/reader033/viewer/2022051411/540ecf638d7f72747e8b5097/html5/thumbnails/4.jpg)
OSGi DevCon, June 22, 2009 Copyright Guillaume Nodet, Licensed under ASL 2.0 3
OSGi Blueprint Services
Introduction• Dependency injection / IOC• Handle legacy code• Handle the OSGi dynamics• Hide the OSGi API
![Page 5: OSGi Blueprint Services](https://reader033.vdocuments.us/reader033/viewer/2022051411/540ecf638d7f72747e8b5097/html5/thumbnails/5.jpg)
OSGi DevCon, June 22, 2009 Copyright Guillaume Nodet, Licensed under ASL 2.0 4
OSGi Blueprint Services
Configuration• Extender pattern• XML resources• Metadata
Blueprint Bundle
Blueprint Extender
XMLMetadata
![Page 6: OSGi Blueprint Services](https://reader033.vdocuments.us/reader033/viewer/2022051411/540ecf638d7f72747e8b5097/html5/thumbnails/6.jpg)
OSGi DevCon, June 22, 2009 Copyright Guillaume Nodet, Licensed under ASL 2.0 5
OSGi Blueprint Services
Blueprint XML definition
blueprint ::= <type-converters> manager * manager ::= <bean> | <service> | service-reference service-reference ::= <reference> | <ref-list> type-converter ::= <bean> | <ref>
![Page 7: OSGi Blueprint Services](https://reader033.vdocuments.us/reader033/viewer/2022051411/540ecf638d7f72747e8b5097/html5/thumbnails/7.jpg)
OSGi DevCon, June 22, 2009 Copyright Guillaume Nodet, Licensed under ASL 2.0 6
OSGi Blueprint Services
Simple example
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0”> <service interface=“osgi.devcon.User”> <bean class=“osgi.devcon.impl.UserImpl”> <argument value=“gnodet” /> </bean> </service></blueprint>
bundleContext.registerService( osgi.devcon.User.class.getName(), new osgi.devcon.impl.UserImpl(“gnodet”), new Hashtable());
![Page 8: OSGi Blueprint Services](https://reader033.vdocuments.us/reader033/viewer/2022051411/540ecf638d7f72747e8b5097/html5/thumbnails/8.jpg)
OSGi DevCon, June 22, 2009 Copyright Guillaume Nodet, Licensed under ASL 2.0 7
OSGi Blueprint Services
Simple example
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0”> <service interface=“osgi.devcon.User”> <bean class=“osgi.devcon.impl.UserImpl”> <argument value=“gnodet” /> </bean> </service></blueprint>
bundleContext.registerService( osgi.devcon.User.class.getName(), new osgi.devcon.impl.UserImpl(“gnodet”), new Hashtable());
Top level element
![Page 9: OSGi Blueprint Services](https://reader033.vdocuments.us/reader033/viewer/2022051411/540ecf638d7f72747e8b5097/html5/thumbnails/9.jpg)
OSGi DevCon, June 22, 2009 Copyright Guillaume Nodet, Licensed under ASL 2.0 8
OSGi Blueprint Services
Simple example
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0”> <service interface=“osgi.devcon.User”> <bean class=“osgi.devcon.impl.UserImpl”> <argument value=“gnodet” /> </bean> </service></blueprint>
bundleContext.registerService( osgi.devcon.User.class.getName(), new osgi.devcon.impl.UserImpl(“gnodet”), new Hashtable());
Blueprint namespace
![Page 10: OSGi Blueprint Services](https://reader033.vdocuments.us/reader033/viewer/2022051411/540ecf638d7f72747e8b5097/html5/thumbnails/10.jpg)
OSGi DevCon, June 22, 2009 Copyright Guillaume Nodet, Licensed under ASL 2.0 9
OSGi Blueprint Services
Simple example
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0”> <service interface=“osgi.devcon.User”> <bean class=“osgi.devcon.impl.UserImpl”> <argument value=“gnodet” /> </bean> </service></blueprint>
bundleContext.registerService( osgi.devcon.User.class.getName(), new osgi.devcon.impl.UserImpl(“gnodet”), new Hashtable());
Manager definition
![Page 11: OSGi Blueprint Services](https://reader033.vdocuments.us/reader033/viewer/2022051411/540ecf638d7f72747e8b5097/html5/thumbnails/11.jpg)
OSGi DevCon, June 22, 2009 Copyright Guillaume Nodet, Licensed under ASL 2.0 10
OSGi Blueprint Services
Manager types• Bean• Single Service
Reference• Multiple Service
References• Service
Registration
![Page 12: OSGi Blueprint Services](https://reader033.vdocuments.us/reader033/viewer/2022051411/540ecf638d7f72747e8b5097/html5/thumbnails/12.jpg)
OSGi DevCon, June 22, 2009 Copyright Guillaume Nodet, Licensed under ASL 2.0 11
OSGi Blueprint Services
Managers• Described by some metadata• Provide objects• Activation / deactivation• Dependencies (implicit or explicit)• Initialization
– Eager– Lazy
• Id• Inlined managers
![Page 13: OSGi Blueprint Services](https://reader033.vdocuments.us/reader033/viewer/2022051411/540ecf638d7f72747e8b5097/html5/thumbnails/13.jpg)
OSGi DevCon, June 22, 2009 Copyright Guillaume Nodet, Licensed under ASL 2.0 12
OSGi Blueprint Services
Bean manager
<bean class=“osgi.devcon.impl.UserImpl”> <argument value=”gnodet” /> <property name=“arrival” value=“22/06/09” /></bean>
![Page 14: OSGi Blueprint Services](https://reader033.vdocuments.us/reader033/viewer/2022051411/540ecf638d7f72747e8b5097/html5/thumbnails/14.jpg)
OSGi DevCon, June 22, 2009 Copyright Guillaume Nodet, Licensed under ASL 2.0 13
OSGi Blueprint Services
Bean creation• Constructor creation
• Constructor creation with arguments
<bean class=“osgi.devcon.impl.UserImpl” />
<bean class=“osgi.devcon.impl.UserImpl”> <argument value=“gnodet” /></bean>
new osgi.devcon.impl.UserImpl()
new osgi.devcon.impl.UserImpl(“gnodet”)
![Page 15: OSGi Blueprint Services](https://reader033.vdocuments.us/reader033/viewer/2022051411/540ecf638d7f72747e8b5097/html5/thumbnails/15.jpg)
OSGi DevCon, June 22, 2009 Copyright Guillaume Nodet, Licensed under ASL 2.0 14
OSGi Blueprint Services
Bean creation
• Static factory
<bean class=“osgi.devcon.impl.UserFactory” factory-method=“createUser”> <argument value=“gnodet” /></bean>
osgi.devcon.impl.UserFactory .createUser( “gnodet”)
![Page 16: OSGi Blueprint Services](https://reader033.vdocuments.us/reader033/viewer/2022051411/540ecf638d7f72747e8b5097/html5/thumbnails/16.jpg)
OSGi DevCon, June 22, 2009 Copyright Guillaume Nodet, Licensed under ASL 2.0 15
OSGi Blueprint Services
Bean creation
• Instance factory<bean factory-ref=“userFactory” factory-method=“createUser”> <argument value=“gnodet” /></bean>
osgi.devcon.impl.UserFactory userFactory = …userFactory.createUser( “gnodet”)
![Page 17: OSGi Blueprint Services](https://reader033.vdocuments.us/reader033/viewer/2022051411/540ecf638d7f72747e8b5097/html5/thumbnails/17.jpg)
OSGi DevCon, June 22, 2009 Copyright Guillaume Nodet, Licensed under ASL 2.0 16
OSGi Blueprint Services
Bean arguments
<argument value=“gnodet”/>
<argument ref=“[refid]”/>
<argument> [any value]</argument>
![Page 18: OSGi Blueprint Services](https://reader033.vdocuments.us/reader033/viewer/2022051411/540ecf638d7f72747e8b5097/html5/thumbnails/18.jpg)
OSGi DevCon, June 22, 2009 Copyright Guillaume Nodet, Licensed under ASL 2.0 17
OSGi Blueprint Services
Bean arguments
<argument value=“gnodet”/>
<argument ref=“[refid]”/>
<argument> [any value]</argument> Plain value
![Page 19: OSGi Blueprint Services](https://reader033.vdocuments.us/reader033/viewer/2022051411/540ecf638d7f72747e8b5097/html5/thumbnails/19.jpg)
OSGi DevCon, June 22, 2009 Copyright Guillaume Nodet, Licensed under ASL 2.0 18
OSGi Blueprint Services
Bean arguments
<argument value=“gnodet”/>
<argument ref=“[refid]”/>
<argument> [any value]</argument> Reference to a top
level manager
![Page 20: OSGi Blueprint Services](https://reader033.vdocuments.us/reader033/viewer/2022051411/540ecf638d7f72747e8b5097/html5/thumbnails/20.jpg)
OSGi DevCon, June 22, 2009 Copyright Guillaume Nodet, Licensed under ASL 2.0 19
OSGi Blueprint Services
Bean arguments
<argument value=“gnodet”/>
<argument ref=“[refid]”/>
<argument> [any value]</argument> Complex value
![Page 21: OSGi Blueprint Services](https://reader033.vdocuments.us/reader033/viewer/2022051411/540ecf638d7f72747e8b5097/html5/thumbnails/21.jpg)
OSGi DevCon, June 22, 2009 Copyright Guillaume Nodet, Licensed under ASL 2.0 20
OSGi Blueprint Services
Bean properties
<bean class=“osgi.devcon.impl.UserImpl”> <property name=“userId” value=“gnodet” /></bean>
UserImpl user = new osgi.devcon.impl.UserImpl();user.setUserId(“gnodet”);
![Page 22: OSGi Blueprint Services](https://reader033.vdocuments.us/reader033/viewer/2022051411/540ecf638d7f72747e8b5097/html5/thumbnails/22.jpg)
OSGi DevCon, June 22, 2009 Copyright Guillaume Nodet, Licensed under ASL 2.0 21
OSGi Blueprint Services
Bean properties
<bean class=“osgi.devcon.impl.UserImpl”> <property name=“userId” value=“gnodet” /></bean>
UserImpl user = new osgi.devcon.impl.UserImpl();user.setUserId(“gnodet”);
Property name
![Page 23: OSGi Blueprint Services](https://reader033.vdocuments.us/reader033/viewer/2022051411/540ecf638d7f72747e8b5097/html5/thumbnails/23.jpg)
OSGi DevCon, June 22, 2009 Copyright Guillaume Nodet, Licensed under ASL 2.0 22
OSGi Blueprint Services
Bean properties
<bean class=“osgi.devcon.impl.UserImpl”> <property name=“userId” value=“gnodet” /></bean>
UserImpl user = new osgi.devcon.impl.UserImpl();user.setUserId(“gnodet”);
Property value
![Page 24: OSGi Blueprint Services](https://reader033.vdocuments.us/reader033/viewer/2022051411/540ecf638d7f72747e8b5097/html5/thumbnails/24.jpg)
OSGi DevCon, June 22, 2009 Copyright Guillaume Nodet, Licensed under ASL 2.0 23
OSGi Blueprint Services
Bean properties
<property name=“userId” value=“gnodet”/>
<property name=“userId” ref=“[refid]”/>
<property name=“userId”> [any value]</property>
![Page 25: OSGi Blueprint Services](https://reader033.vdocuments.us/reader033/viewer/2022051411/540ecf638d7f72747e8b5097/html5/thumbnails/25.jpg)
OSGi DevCon, June 22, 2009 Copyright Guillaume Nodet, Licensed under ASL 2.0 24
OSGi Blueprint Services
Bean scope
• Singleton– a single instance will be reused
• Prototype– a new instance will be created each time it
is injected
![Page 26: OSGi Blueprint Services](https://reader033.vdocuments.us/reader033/viewer/2022051411/540ecf638d7f72747e8b5097/html5/thumbnails/26.jpg)
OSGi DevCon, June 22, 2009 Copyright Guillaume Nodet, Licensed under ASL 2.0 25
OSGi Blueprint Services
Values• <null/>• <bean>• <reference>• <ref-list>• <service>• <ref>• <idref>
• <value>• <list>• <set>• <map>• <array>• <props>
![Page 27: OSGi Blueprint Services](https://reader033.vdocuments.us/reader033/viewer/2022051411/540ecf638d7f72747e8b5097/html5/thumbnails/27.jpg)
OSGi DevCon, June 22, 2009 Copyright Guillaume Nodet, Licensed under ASL 2.0 26
OSGi Blueprint Services
<ref />
• Injects an object provided by themanager with the given id
<bean id=“regId” … />
<bean class=“osgi.devcon.impl.UserImpl”> <property name=“registration”> <ref component-id=“regId” /> </property></bean>
<bean class=“osgi.devcon.impl.UserImpl”> <property name=“registration” ref=“regId” /></bean>
![Page 28: OSGi Blueprint Services](https://reader033.vdocuments.us/reader033/viewer/2022051411/540ecf638d7f72747e8b5097/html5/thumbnails/28.jpg)
OSGi DevCon, June 22, 2009 Copyright Guillaume Nodet, Licensed under ASL 2.0 27
OSGi Blueprint Services
<ref />
• Injects an object provided by themanager with the given id
<bean id=“regId” … />
<bean class=“osgi.devcon.impl.UserImpl”> <property name=“registration”> <ref component-id=“regId” /> </property></bean>
<bean class=“osgi.devcon.impl.UserImpl”> <property name=“registration” ref=“regId” /></bean>
Property value
![Page 29: OSGi Blueprint Services](https://reader033.vdocuments.us/reader033/viewer/2022051411/540ecf638d7f72747e8b5097/html5/thumbnails/29.jpg)
OSGi DevCon, June 22, 2009 Copyright Guillaume Nodet, Licensed under ASL 2.0 28
OSGi Blueprint Services
<idref />
• Injects the id of an existing object
<bean id=“regId” … />
<bean class=“osgi.devcon.impl.UserImpl”> <property name=“registrationId”> <idref component-id=“regId” /> </property></bean>
![Page 30: OSGi Blueprint Services](https://reader033.vdocuments.us/reader033/viewer/2022051411/540ecf638d7f72747e8b5097/html5/thumbnails/30.jpg)
OSGi DevCon, June 22, 2009 Copyright Guillaume Nodet, Licensed under ASL 2.0 29
OSGi Blueprint Services
<value>
• Insert the content of the element text
<bean class=“osgi.devcon.impl.UserImpl”> <property name=“userId”> <value>gnodet</value> </property></bean>
<bean class=“osgi.devcon.impl.UserImpl”> <property name=“userId” value=“gnodet” /></bean>
![Page 31: OSGi Blueprint Services](https://reader033.vdocuments.us/reader033/viewer/2022051411/540ecf638d7f72747e8b5097/html5/thumbnails/31.jpg)
OSGi DevCon, June 22, 2009 Copyright Guillaume Nodet, Licensed under ASL 2.0 30
OSGi Blueprint Services
<list>, <set> and <array>
• Inserts a collection of objects
<list> <list> <value>2</value> <value>7</value> </list> <list value-type=“int”> <value>9</value> <value>5</value> </list></list>
Arrays.asList( Arrays.asList(“2”,”7”), Arrays.asList(9,5))
![Page 32: OSGi Blueprint Services](https://reader033.vdocuments.us/reader033/viewer/2022051411/540ecf638d7f72747e8b5097/html5/thumbnails/32.jpg)
OSGi DevCon, June 22, 2009 Copyright Guillaume Nodet, Licensed under ASL 2.0 31
OSGi Blueprint Services
<list>, <set> and <array>
• Inserts a collection of objects
<list> <list> <value>2</value> <value>7</value> </list> <list value-type=“int”> <value>9</value> <value>5</value> </list></list>
Arrays.asList( Arrays.asList(“2”,”7”), Arrays.asList(9,5))
Type of the values
![Page 33: OSGi Blueprint Services](https://reader033.vdocuments.us/reader033/viewer/2022051411/540ecf638d7f72747e8b5097/html5/thumbnails/33.jpg)
OSGi DevCon, June 22, 2009 Copyright Guillaume Nodet, Licensed under ASL 2.0 32
OSGi Blueprint Services
<map>
• Inserts a map of objects<map> <entry key="cheese" value="cheddar"/> <entry key="fruit" value="orange"/></map>
<map> <entry key-ref="keyId" value="cheddar"/> <entry key="fruit" value-ref="valueId"/></map>
<map key-type=”...” value-type="... "> <entry ...></map>
![Page 34: OSGi Blueprint Services](https://reader033.vdocuments.us/reader033/viewer/2022051411/540ecf638d7f72747e8b5097/html5/thumbnails/34.jpg)
OSGi DevCon, June 22, 2009 Copyright Guillaume Nodet, Licensed under ASL 2.0 33
OSGi Blueprint Services
<map>
• Inserts a map of objects<map> <entry> <key> <value type="org.osgi.framework.Version"> 3.2.1 </value> </key> <bean ... /> </entry></map>
![Page 35: OSGi Blueprint Services](https://reader033.vdocuments.us/reader033/viewer/2022051411/540ecf638d7f72747e8b5097/html5/thumbnails/35.jpg)
OSGi DevCon, June 22, 2009 Copyright Guillaume Nodet, Licensed under ASL 2.0 34
OSGi Blueprint Services
<props>
• Inserts a java.util.Properties object
<props> <prop key="1">one</prop> <prop key="2" value="two" /></props>
![Page 36: OSGi Blueprint Services](https://reader033.vdocuments.us/reader033/viewer/2022051411/540ecf638d7f72747e8b5097/html5/thumbnails/36.jpg)
OSGi DevCon, June 22, 2009 Copyright Guillaume Nodet, Licensed under ASL 2.0 35
OSGi Blueprint Services
Components as values• Instances provided by managers can be
injected
<list> <bean class="com.acme.FooImpl"/></list>
![Page 37: OSGi Blueprint Services](https://reader033.vdocuments.us/reader033/viewer/2022051411/540ecf638d7f72747e8b5097/html5/thumbnails/37.jpg)
OSGi DevCon, June 22, 2009 Copyright Guillaume Nodet, Licensed under ASL 2.0 36
OSGi Blueprint Services
Service References• Single service: <reference>• Multiple services: <ref-list>
<reference id="user1" interface="osgi.devcon.User" filter="(name=gnodet)" />
<ref-list id=”all-users" interface="osgi.devcon.User” />
![Page 38: OSGi Blueprint Services](https://reader033.vdocuments.us/reader033/viewer/2022051411/540ecf638d7f72747e8b5097/html5/thumbnails/38.jpg)
OSGi DevCon, June 22, 2009 Copyright Guillaume Nodet, Licensed under ASL 2.0 37
OSGi Blueprint Services
<reference>
• Provides a proxy to an OSGi service• Availability: mandatory or optional• Timeout• Damping
injected beans
proxy
backingservice
services service providers
![Page 39: OSGi Blueprint Services](https://reader033.vdocuments.us/reader033/viewer/2022051411/540ecf638d7f72747e8b5097/html5/thumbnails/39.jpg)
OSGi DevCon, June 22, 2009 Copyright Guillaume Nodet, Licensed under ASL 2.0 38
OSGi Blueprint Services
<ref-list>
• Provides a read-only and dynamic list ofOSGi service
• Availability: mandatory or optional
injected beans proxies
backingservice
services service providers
list
![Page 40: OSGi Blueprint Services](https://reader033.vdocuments.us/reader033/viewer/2022051411/540ecf638d7f72747e8b5097/html5/thumbnails/40.jpg)
OSGi DevCon, June 22, 2009 Copyright Guillaume Nodet, Licensed under ASL 2.0 39
OSGi Blueprint Services
Service References Listeners<bean id="listener" ... />
<ref-list interface="osgi.devcon.User"> <reference-listener ref="listener" bind-method="bind" unbind-method="unbind" /></ref-list>
public class Listener { public void bind(User user) { } public void unbind(User user) { }}
public void (T)public void (T, Map)public void (ServiceReference)
![Page 41: OSGi Blueprint Services](https://reader033.vdocuments.us/reader033/viewer/2022051411/540ecf638d7f72747e8b5097/html5/thumbnails/41.jpg)
OSGi DevCon, June 22, 2009 Copyright Guillaume Nodet, Licensed under ASL 2.0 40
OSGi Blueprint Services
Service References Listeners<bean id="listener" ... />
<ref-list interface="osgi.devcon.User"> <reference-listener ref="listener" bind-method="bind" unbind-method="unbind" /></ref-list>
public class Listener { public void bind(User user) { } public void unbind(User user) { }}
public void (T)public void (T, Map)public void (ServiceReference)
Bind method
![Page 42: OSGi Blueprint Services](https://reader033.vdocuments.us/reader033/viewer/2022051411/540ecf638d7f72747e8b5097/html5/thumbnails/42.jpg)
OSGi DevCon, June 22, 2009 Copyright Guillaume Nodet, Licensed under ASL 2.0 41
OSGi Blueprint Services
Service registrations• Expose an object as an OSGi service• Register a ServiceFactory• Dependencies on service references
<service ref="user" interface="osgi.devcon.User" />
<service auto-export="interfaces"> <bean class="osgi.devcon.impl.UserImpl” /></service>
![Page 43: OSGi Blueprint Services](https://reader033.vdocuments.us/reader033/viewer/2022051411/540ecf638d7f72747e8b5097/html5/thumbnails/43.jpg)
OSGi DevCon, June 22, 2009 Copyright Guillaume Nodet, Licensed under ASL 2.0 42
OSGi Blueprint Services
Service properties• Expose an object as an OSGi service
<service ref="fooImpl" interface="osgi.devcon.User"> <service-properties> <entry key="name" value="gnodet"/> </service-properties></service>
![Page 44: OSGi Blueprint Services](https://reader033.vdocuments.us/reader033/viewer/2022051411/540ecf638d7f72747e8b5097/html5/thumbnails/44.jpg)
OSGi DevCon, June 22, 2009 Copyright Guillaume Nodet, Licensed under ASL 2.0 43
OSGi Blueprint Services
Service Registration Listeners<bean id="listener" ... />
<service ref="..." interface="osgi.devcon.User"> <registration-listener ref="listener" registration-method="register" unregistration-method="unregister" /></ref-list>
public class Listener { public void register(User user, Map props) { } public void unregister(User user, Map props) { }}
public void (T, Map)
![Page 45: OSGi Blueprint Services](https://reader033.vdocuments.us/reader033/viewer/2022051411/540ecf638d7f72747e8b5097/html5/thumbnails/45.jpg)
OSGi DevCon, June 22, 2009 Copyright Guillaume Nodet, Licensed under ASL 2.0 44
OSGi Blueprint Services
Lifecycle
![Page 46: OSGi Blueprint Services](https://reader033.vdocuments.us/reader033/viewer/2022051411/540ecf638d7f72747e8b5097/html5/thumbnails/46.jpg)
OSGi DevCon, June 22, 2009 Copyright Guillaume Nodet, Licensed under ASL 2.0 45
OSGi Blueprint Services
LifecycleSupport for lazy
activattion
![Page 47: OSGi Blueprint Services](https://reader033.vdocuments.us/reader033/viewer/2022051411/540ecf638d7f72747e8b5097/html5/thumbnails/47.jpg)
OSGi DevCon, June 22, 2009 Copyright Guillaume Nodet, Licensed under ASL 2.0 46
OSGi Blueprint Services
LifecycleTrack mandatory
references
![Page 48: OSGi Blueprint Services](https://reader033.vdocuments.us/reader033/viewer/2022051411/540ecf638d7f72747e8b5097/html5/thumbnails/48.jpg)
OSGi DevCon, June 22, 2009 Copyright Guillaume Nodet, Licensed under ASL 2.0 47
OSGi Blueprint Services
Lifecycle
![Page 49: OSGi Blueprint Services](https://reader033.vdocuments.us/reader033/viewer/2022051411/540ecf638d7f72747e8b5097/html5/thumbnails/49.jpg)
OSGi DevCon, June 22, 2009 Copyright Guillaume Nodet, Licensed under ASL 2.0 48
OSGi Blueprint Services
Advanced use• Conversions• Disambiguation• Creating custom converters• Use of <idref>• <ref-list> can be injected asList<ServiceReference>
• Use of the ranking attribute on<service>
• Blueprint Events
![Page 50: OSGi Blueprint Services](https://reader033.vdocuments.us/reader033/viewer/2022051411/540ecf638d7f72747e8b5097/html5/thumbnails/50.jpg)
OSGi DevCon, June 22, 2009 Copyright Guillaume Nodet, Licensed under ASL 2.0 49
OSGi Blueprint Services
Conversions• Arrays, collections, maps• Primitives / wrapped primitives• Simple types with a String constructor• Locale, Pattern, Properties, Class• JDK 5 Generics• Custom converters
![Page 51: OSGi Blueprint Services](https://reader033.vdocuments.us/reader033/viewer/2022051411/540ecf638d7f72747e8b5097/html5/thumbnails/51.jpg)
OSGi DevCon, June 22, 2009 Copyright Guillaume Nodet, Licensed under ASL 2.0 50
OSGi Blueprint Services
Disambiguation• Constructors / factory methods can
have multiple overloadspublic class Bar { public Bar(File file) { ... } public Bar(URI uri) { ... }}
<bean class="foo.Bar"> <argument type="java.net.URI" value="file://hello.txt"/></bean>
![Page 52: OSGi Blueprint Services](https://reader033.vdocuments.us/reader033/viewer/2022051411/540ecf638d7f72747e8b5097/html5/thumbnails/52.jpg)
OSGi DevCon, June 22, 2009 Copyright Guillaume Nodet, Licensed under ASL 2.0 51
OSGi Blueprint Services
Custom converters<type-converters> <bean id="converter1" class=”foo.DateTypeConverter"> <property name="format" value="yyyy.MM.dd"/> </bean></type-converters>
<bean class=“...”> <property name=“date” value=“2009.06.22” /></bean>
public class DateTypeConverter { public boolean canConvert(Object fromValue, CollapsedType toType) { ... } public Object convert(Object fromValue, CollapsedType toType) throws Exception { ... }}
![Page 53: OSGi Blueprint Services](https://reader033.vdocuments.us/reader033/viewer/2022051411/540ecf638d7f72747e8b5097/html5/thumbnails/53.jpg)
OSGi DevCon, June 22, 2009 Copyright Guillaume Nodet, Licensed under ASL 2.0 52
OSGi Blueprint Services
<ref-list> asList<ServiceReference>
<ref-list interface=“osgi.devcon.User” member-type=“service-reference” />
![Page 54: OSGi Blueprint Services](https://reader033.vdocuments.us/reader033/viewer/2022051411/540ecf638d7f72747e8b5097/html5/thumbnails/54.jpg)
OSGi DevCon, June 22, 2009 Copyright Guillaume Nodet, Licensed under ASL 2.0 53
OSGi Blueprint Services
Other advanced uses• <ref-list> asList<ServiceReference>
• Use of ranking attribute on<service>
<ref-list interface=“osgi.devcon.User” member-type=“service-reference” />
<service ref=“foo” interface=“osgi.devcon.User” ranking=“5” />
![Page 55: OSGi Blueprint Services](https://reader033.vdocuments.us/reader033/viewer/2022051411/540ecf638d7f72747e8b5097/html5/thumbnails/55.jpg)
OSGi DevCon, June 22, 2009 Copyright Guillaume Nodet, Licensed under ASL 2.0 54
OSGi Blueprint Services
Use of <idref>
• Prototypes• Use of the Blueprint API
<bean id=“bar” class=“foo.Bar” scope=“prototype”> <property name=“prop” value=“val” /></bean>
<bean class=“foo.BarCreator”> <property name=“blueprintContainer” ref=“blueprintContainer” /> <property name=“id”> <idref component-id=“bar” /> </property></bean>
Bar bar = (Bar) blueprintContainer.getComponent(id)
![Page 56: OSGi Blueprint Services](https://reader033.vdocuments.us/reader033/viewer/2022051411/540ecf638d7f72747e8b5097/html5/thumbnails/56.jpg)
OSGi DevCon, June 22, 2009 Copyright Guillaume Nodet, Licensed under ASL 2.0 55
OSGi Blueprint Services
Blueprint events• Register listeners• Blueprint events
– CREATING– CREATED– DESTROYING– DESTROYED– FAILURE– GRACE_PERIOD– WAITING
public interface BlueprintListener { void blueprintEvent(BlueprintEvent event);}
![Page 57: OSGi Blueprint Services](https://reader033.vdocuments.us/reader033/viewer/2022051411/540ecf638d7f72747e8b5097/html5/thumbnails/57.jpg)
OSGi DevCon, June 22, 2009 Copyright Guillaume Nodet, Licensed under ASL 2.0 56
OSGi Blueprint Services
Next steps• Custom namespace handlers• Config Admin support
![Page 58: OSGi Blueprint Services](https://reader033.vdocuments.us/reader033/viewer/2022051411/540ecf638d7f72747e8b5097/html5/thumbnails/58.jpg)
OSGi DevCon, June 22, 2009 Copyright Guillaume Nodet, Licensed under ASL 2.0 57
OSGi Blueprint Services
Custom namespaces<ext:property-placeholder system-properties=“override”> <ext:default-properties> <ext:property name=“name” value=“value” /> </ext:default-properties></ext:property>
<bean ...> <property name=“prop” value=“${name}” /></bean>
<reference interface=“foo.Bar” ext:proxy-method=“classes” />
![Page 59: OSGi Blueprint Services](https://reader033.vdocuments.us/reader033/viewer/2022051411/540ecf638d7f72747e8b5097/html5/thumbnails/59.jpg)
OSGi DevCon, June 22, 2009 Copyright Guillaume Nodet, Licensed under ASL 2.0 58
OSGi Blueprint Services
Config Admin• Injection of values from a Configuration
<cm:property-placeholder persistent-id=“foo.bar” /> <cm:default-properties> <cm:property name=“name” value=“value” /> </cm:default-properties></cm:property>
<bean ...> <property name=“prop” value=“${name}” /></bean>
![Page 60: OSGi Blueprint Services](https://reader033.vdocuments.us/reader033/viewer/2022051411/540ecf638d7f72747e8b5097/html5/thumbnails/60.jpg)
OSGi DevCon, June 22, 2009 Copyright Guillaume Nodet, Licensed under ASL 2.0 59
OSGi Blueprint Services
Config Admin• Support for managed properties
<bean class=“foo.Bar”> <cm:managed-properties persistent-id=“foo.bar” updated-strategy=“component-managed” update-method=“update” /></bean>
![Page 61: OSGi Blueprint Services](https://reader033.vdocuments.us/reader033/viewer/2022051411/540ecf638d7f72747e8b5097/html5/thumbnails/61.jpg)
OSGi DevCon, June 22, 2009 Copyright Guillaume Nodet, Licensed under ASL 2.0 60
OSGi Blueprint Services
Config Admin• Support for managed service factories
<cm:managed-service-factory factory-pid=“foo.bar” interface=“foo.Bar”> <service-properties> <entry key=“key1” value=“value1” /> </service-properties> <cm:managed-component class=“foo.BarImpl” /></bean>
![Page 62: OSGi Blueprint Services](https://reader033.vdocuments.us/reader033/viewer/2022051411/540ecf638d7f72747e8b5097/html5/thumbnails/62.jpg)
OSGi DevCon, June 22, 2009 Copyright Guillaume Nodet, Licensed under ASL 2.0 61
OSGi Blueprint Services
Implementations• Spring-DM (RI)
– Based on the Spring Framework– > 2 Mo but provide more features
• Geronimo blueprint– Clean implementation of Blueprint– Size < 300 Ko– Integrated in Apache Felix Karaf
![Page 63: OSGi Blueprint Services](https://reader033.vdocuments.us/reader033/viewer/2022051411/540ecf638d7f72747e8b5097/html5/thumbnails/63.jpg)
OSGi DevCon, June 22, 2009 Copyright Guillaume Nodet, Licensed under ASL 2.0 62
OSGi Blueprint Services
Conclusion• Existing alternatives
– DS, iPojo, Peaberry• Strengths of blueprint
– Familiarity with Spring– More powerful Dependency Injection– Easily extensible through namespaces
[email protected]://svn.apache.org/repos/asf/geronimo/sandbox/blueprint