OsGi.In.Action
Upcoming SlideShare
Loading in...5
×
 

OsGi.In.Action

on

  • 4,014 views

 

Statistics

Views

Total Views
4,014
Views on SlideShare
4,014
Embed Views
0

Actions

Likes
4
Downloads
124
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

OsGi.In.Action OsGi.In.Action Presentation Transcript

  • 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
  • Use OSGi with popular framework
    • Use with Hibernate
    • Use with Spring
    • Use with Webwork
    • Intergration key factors
  • 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
  • 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;
  • 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&quot;>
        • <po class=&quot;cn.org.osgi.bulletin.po.Bulletin&quot;/>
        • </extension>
    • Start the application,then finish the demo that use OSGi with Hibernate
  • 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.
  • 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.
  • 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
  • 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
  • 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
  • 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
  • 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.
  • 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;
  • 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.
  • 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
  • Use with Webwork
    • New Plug-in project,write action class and action xml as always you do;
      • <action name=&quot;list&quot; class=&quot;LIST&quot;>
      • Class property upside map to its OSGi service’s property
        • <property name=&quot;command&quot; value=&quot;ADMINLOGIN&quot;/>
    • 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&quot;>
      • <action configFile=&quot;cn/org/osgi/bulletin/list/action/xwork.xml&quot;/>
      • </extension>
    • Start the application,then u can visit the action
  • 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;
  • 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
  • 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
  • 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”
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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;
  • 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
  • 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;
  • 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
  • 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
  • Click to edit company slogan . OSGi China User Group http://www.osgi.org.cn Thank You !