Difference between revisions of "Tutorial OSGi avec Apache Felix - Partie 4"

From air
Jump to navigation Jump to search
Line 4: Line 4:
   
 
* Felix Framework Distribution (voir [[Tutorial OSGi avec Apache Felix - Partie 1]])
 
* Felix Framework Distribution (voir [[Tutorial OSGi avec Apache Felix - Partie 1]])
  +
** Install the iPOJO Core bundle[http://felix.apache.org/site/download.html]
 
* [http://www.eclipse.org/downloads/ Eclipse].
 
* [http://www.eclipse.org/downloads/ Eclipse].
 
** To support OSGi development, Eclipse needs the '''PDE''' (Plug-in Development Environment) plug-in, bundled in ''Eclipse IDE for Java EE Developers''
 
** To support OSGi development, Eclipse needs the '''PDE''' (Plug-in Development Environment) plug-in, bundled in ''Eclipse IDE for Java EE Developers''

Revision as of 18:24, 19 December 2012

Revenir au sommaire

Requirements

  • Felix Framework Distribution (voir Tutorial OSGi avec Apache Felix - Partie 1)
    • Install the iPOJO Core bundle[1]
  • Eclipse.
    • To support OSGi development, Eclipse needs the PDE (Plug-in Development Environment) plug-in, bundled in Eclipse IDE for Java EE Developers
  • iPOJO Nature plug-in for Eclipse as an archive distribution
    • Install the iPOJO Project Nature and iPOJO Nature Dependencies plug-ins

Eclipse Configuration

By default, Eclipse uses its installation directory as the Target Platform, i.e. the group of bundles accessible by your bundle project. You should declare the installation folder of the Felix Framework as the target platform to avoid compilation and access rights errors.

  1. Open Eclipse preferences
  2. Plug-in Development > Target Platform
  3. Add...
    1. Create an empty target platform (check nothing...)
    2. Add the bin and bundle folders of your Felix installation to the Target Platform
  4. Set the new target platform as the current one

I. Activator

  1. Create an Eclipse Plug-in project fr.erods.tp.bundle1
    • New > Plug-in project
    • Select the option "Target Platform" > "an OSGi framework" > standard
    • Next
    • Check "Generate an activator"
    • Finish
  2. Open the activator class and print some text when the bundle starts and stops
  3. Export the bundle JAR file with iPOJO Nature
    • Right click on the bundle project > Export > iPOJO Bundle
    • Choose an output folder (the Felix installation folder)
    • Finish
  4. Install and test the bundle using the Felix shell (start/update/stop)

II. Pure-OSGi service

  1. Create an new bundle project fr.erods.tp.api.
    • Activator is not needed: uncheck "Generate an activator" in step 2
  2. Create the fr.erods.tp.api.IScheduleService interface with two methods:
    • int createJob(Runnable aRunnable, int aDelay)
    • void deleteJob(int aId)
  3. Export the API package
    • Open the Manifest.mf file of fr.erods.tp.api
    • In tab "Runtime" > "Exported Packages" > Add
      • Select the fr.erods.tp.api package
  4. Implement the service in bundle 1
    • Create the class fr.erods.tp.bundle1.ScheduleImpl, implementing IScheduleService in the bundle 1.
  5. Register the service with the activator of bundle 1
  6. Implement a service consumer in a new bundle
    • Create project fr.erods.tp.bundle2
    • Import the API package
      • In the Manifest.mf file of bundle 2
      • In tab "Dependencies" > "Imported Packages" > Add
      • Select the fr.erods.tp.api package
    • Implement a Consumer class, implementing the OSGi ServiceListener interface
    • Print a message when the service is bound/unbound
  7. Test the bundles in Felix

II. iPOJO: provide and consume with iPOJO

  1. Add the iPOJO Nature to projects bundle 1 and bundle 2
    • Select the projects
    • Right click > Add iPOJO Nature
    • Check Use annotations'

Consumer

  1. Implement a ConsumerIpojo class in bundle 2
    • See How to use iPOJO Annotations
    • The component must be instantiated automatically
    • Print a message when the component is (in)validated and when the service is (un)bound
  2. Test

Provider

  1. Implement a ServiceProviderIpojo class in bundle 1
    • See How to use iPOJO Annotations
    • The component must be instantiated automatically
    • The component must provide its service
    • Print a message when the component is (in)validated
  2. Test

Note: The consumer should call methods of the service and traces should be printed in order to show which service the consumer is bound to.

III. Whiteboard pattern

  1. Create interface IJobListener in the API package, with two methods:
    • void onJobCreation(int aId)
    • void onJobDeletion(int aId)
  2. Modify the schedule component (in bundle 1)
    • Make it require listeners, as an optional requirement
    • Notify them on job creation/deletion
  3. Create a new bundle project fr.erods.tp.bundle3
    • Add the iPOJO Nature and annotations
    • Let it import the API package
  4. Create a component providing an IJobListener service in bundle 3
  5. Add job creation / deletion operations in a consumer
  6. Test

IV. Config Admin with iPOJO

See Combining iPOJO and Configuration Admin

V. JMX MBean with iPOJO

1. Create a new bundle, with iPOJO annotations to list current jobs status


VI. Gogo Command with iPOJO

1. Create a new bundle, with iPOJO annotations to list current jobs status

VII. Event Admin with iPOJO

1. Create a new bundle, with iPOJO annotations to send events on jobs status changes

IX. Extender with iPOJO

??

X. Guidelines & Good Practices ("OSGi Zen")