320 likes | 450 Views
OSGi in action. BlueDavy http://www.osgi.org.cn http://blog.bluedavy.cn. 1.1 2007-10-20. Agenda. Use OSGi with popular framework Deploy exist system to OSGi The feature of OSGi application OSGi application design best practices OSGi application develop best practices Resources.
E N D
OSGi in action BlueDavy http://www.osgi.org.cn http://blog.bluedavy.cn 1.1 2007-10-20
Agenda • Use OSGi with popular framework • Deploy exist system to OSGi • The feature of OSGi application • OSGi application design best practices • OSGi application develop best practices • Resources 2
Use OSGi with popular framework • Use with Hibernate • Use with Spring • Use with Webwork • Intergration key factors 3
Use with Hibernate • Download Hibernate-OSGi • http://www.osgi.org.cn/Hibernate-OSGi; • install cn.org.osgi.hibernate bundle or import Hibernate-OSGi source project to eclipse. • Write demo bundle with Hibernate-OSGi to use Hibernate 4
Use with Hibernate • Change the connection info in hibernate.cfg.xml of cn.org.osgi.hibernate bundle; • New Plug-in project,and write persistent class as you always do,then generate persistent class hbm file; • Implemention DAO class with cn.org.osgi.hibernate.service.CommonDaoService or other common Hibernate DAO API; 5
Use with Hibernate • Register Persistent class as extension point; • create plugin.xml,then input following content into the file,just like this: • <extension point=“cn.org.osgi.hibernate.PoExtension"> • <po class="cn.org.osgi.bulletin.po.Bulletin"/> • </extension> • Start the application,then finish the demo that use OSGi with Hibernate 6
Use with Hibernate • Summary • the difference between use with hibernate and use with OSGi & hibernate only two sides: • don’t add resource mapping element to hibernate.cfg.xml any more; • Use extension point to register po. 7
Use with Hibernate • The implemention method of Hibernate-OSGi • Refactor AbstractClassGenerator.getClassLoader() method to sure use the AbstractClassGenerator class’s classloader to load the associate class • Why do this? • Just because AbstractClassGenerator use po class’s classloader to load cglib associate class,but now the bundle including po class don’t need import cglib jar. • Based on extension point to register/unregister po • Why do this? • Just because module seperation rule. • Use extension point so we can register po outside of HibernateModule. • The session service use Configuration.addClass to register po from other bundle. 8
Use with Hibernate • The weakpoint of Hibernate-OSGi • Not support many hibernate po advanced configuration just like po class cache etc. currently; • Not support multi sessionfactory currently; • Need support register connection info from other bundles; • When new pos added or exist pos removed,SessionFactory need be restarted; • Let’s improve Hibernate-OSGi together • If u want to join this group,pls visit this webpage: • http://www.osgi.org.cn/Hibernate-OSGi/join.html 9
Use with Spring • Download Spring-OSGi; • http://www.springframework.org/osgi • Create the build and run environment • Publish Spring bean as OSGi service • Inject OSGi service to Spring bean • Best practices • The weakpoint of Spring-OSGi 10
Use with Spring • Create the build and run environment • install these bundles to eclipse or equinox • aopalliance • aspectjrt • backport-util-concurrent • spring-aop • spring-aspects • spring-beans • spring-context • spring-core • spring-dao • spring-osgi-core • spring-osgi-extender • spring-osgi-io 11
Publish Spring bean as OSGi service • It’s very simple to do this • just write this element • <osgi:service id=“serviceID” ref=“spring bean name” interface=“OSGi service interface”/> • You can add osgi:service-properties to realize the properties configuration in OSGi component’s xml 12
Inject OSGi service to Spring bean • It’s also very simple to do this, just write this element • <osgi:reference id=“Just like Spring bean name” interface=“OSGi service ” cardinality=“[0..n]|[0..1]|[1..n]” filter=“” timeout=“” depends-on=“” context-classloader=“”/> • We can use two method to inject this OSGi service to spring bean • <bean name=“bean name” class=“bean class”> <property name=“OSGi service” ref=“OSGi reference id”/> </bean> • add osgi:listener to osgi:reference • <osgi:listener ref=“the spring bean name need inject this OSGi service” bind-method=“inject OSGi service’s method name” unbind-method=“when OSGi service unavaible,then call this method”/> • The bind-method need change to this kind signature public void some-method-name(service interface,Dictionary) • The difference between these two methods • The first method cann’t get the OSGi service’s dynamic changination,but the second method can do this. 13
Best practices • Only publish those pojo needed export as OSGi service; • Use osgi:listener method to inject OSGi service to spring bean; • Handle the OSGi service dynamic change; • If can publish the pojo in DS style,then use DS style; 14
The weakpoint of Spring-OSGi • Cann’t dynamic load spring bean bundle; • Spring-OSGi bundle must start before other bundles; • Spring-OSGi depends excessive bundles. 15
Use with Webwork • Download Webwork-OSGi • http://www.osgi.org.cn/Webwork-OSGi • Install cn.org.osgi.webwork bundle or Import Webwork-OSGi project to eclipse • The bundle did realize webwork intergration with Spring-OSGi • Write demo bundle with Webwork-OSGi to use webwork with OSGi 16
Use with Webwork • New Plug-in project,write action class and action xml as always you do; • <action name="list" class="LIST"> • Class property upside map to its OSGi service’s property • <property name="command" value="ADMINLOGIN"/> • Publish action class as OSGi service in ds style or spring-OSGi style; • Export the package where your action classes and action resource files in; • Register action xml file to extension point; • <extension point=“cn.org.osgi.webwork.actionextension"> <action configFile="cn/org/osgi/bulletin/list/action/xwork.xml"/> </extension> • Start the application,then u can visit the action 17
Use with Webwork • Summary • the difference between use with webwork and use with webwork-OSGi • the action class property is not the action class true name,but is the osgi service command property the action class published; • the action xml file is not write to a singlepoint xwork.xml,but register to webwork-OSGi based on extension point; 18
Use with Webwork • The implemention of Webwork-OSGi • Write own action xml file configuration provider class • so webwork-OSGi can dynamic load and unload action xml file outside webwork-OSGi bundle; • Write own ObjectFactory to load action and other class • so webwork-OSGi can load action class instance from OSGi service registration and then realize intergration with spring-OSGi; • Other class loading as webwork always do • Change webwork action xml file configuration provider and ObjectFactory 19
Use with Webwork • The weakpoint of Webwork-OSGi • Maybe we need write a webwork-OSGi bundle so when webwork update,we can update quickly; • Not support servlet filter configuration,but this is httpservice problem 20
Intergration key factors • Classloader factor • Can use OSGi Dynamic-ImportPackage and Export-Package to solve this factor. • Resource loader factor • Can use extension point to realize load resource dynamically and so resource can be placed in module style. • The most important factor:”modularity” & “Plug and Play” 21
Agenda • Use OSGi with popular framework • Deploy exist system to OSGi • The feature of OSGi application • OSGi application design best practices • OSGi application develop best practices • Resources 22
Deploy exist system to OSGi • Use bnd tool to do this • http://www.aqute.biz/Code/Bnd • http://www.aqute.biz/Code/BndCn • Step • Separate project packages in module style logically; • Define module need import package and export package; • Write bnd file for per module; • Run bnd tool then get the module jar file; • Deploy the module jar file to OSGi framework 23
Agenda • Use OSGi with popular framework • Deploy exist system to OSGi • The feature of OSGi application • OSGi application design best practices • OSGi application develop best practices • Resources 24
The feature of OSGi application • Strict and clear modularity • Quickly know the module dependency; • Quickly know the module exported function; • Quickly know how the module can be extensioned; • Reusable • Build company bundle respository • Dynamic • “Plug and Play” • Extensionable 25
Agenda • Use OSGi with popular framework • Deploy exist system to OSGi • The feature of OSGi application • OSGi application design best practices • OSGi application develop best practices • Resources 26
OSGi app design best practices • Clear and strict define module; • Module’s Export Function; • Module’s Dependency; • Module’s Extension Point; • Interface-oriented and SOCM; • Bundles compose of components,components communicate each other with OSGi service; • All service publish in interface type; • Split Interface & Implemention into separate bundles; 27
Agenda • Use OSGi with popular framework • Deploy exist system to OSGi • The feature of OSGi application • OSGi application design best practices • OSGi application develop best practices • Resources 28
OSGi app develop best practices • Keep the dynamic feature • Don’t suppose the dependence service usable; • Handle the dynamic change such as extension added/event published/service unavaible; • If the service is used only inside bundle,then don’t publish it as OSGi service; • Don’t make static dependency to other bundles; 29
Agenda • Use OSGi with popular framework • Deploy exist system to OSGi • The feature of OSGi application • OSGi application design best practices • OSGi application develop best practices • Resources 30
Resources • OSGi R4 Specifications • 《OSGi实战》Opendoc • 《OSGi进阶》Opendoc • http://www.osgi.org • http://www.osgi.org.cn • http://www.aqute.biz • http://blog.bluedavy.cn 31
OSGi China User Group http://www.osgi.org.cn Thank You ! Click to edit company slogan .