Intro To OSGi

7,670 views
7,394 views

Published on

OSGi has gained popularity over the last two years. The platform has some very interesting features like versioning, dynamic updates and it's service oriented nature. These characteristics however come with a price. A firm understanding of how and why OSGi works how it works, is a necessity if you plan on getting into OSGi.

This talk will start with some basic principals on the java platform and will gradually move towards the OSGi infrastructure explaining the OSGi fundamentals. The following topics will be covered:

* Classloading in OSGi
* Lifecycle management of OSGi bundles
* OSGi Service, the service registry and service composition models

Afterwards, we will explain the generally accepted best practices and OSGi design patterns.

Published in: Business, Technology

Intro To OSGi

  1. 1. Introduction in OSGi 2009 www.bejug.org
  2. 2. Speaker’s qualifications  Lead architect & project manager @ Ebit  10 years experience in JSE/JEE development  Steering member of the Devoxx conference and BeJUG  Talks at Bejug & SpringOne  Prince2 and Scrum certified www.bejug.org
  3. 3. Imtech ICT Belgium www.bejug.org
  4. 4. 3 Companies – 1 Mindset Developmen Data Infrastruct t of Warehousi ure Software ng Solutions Solutions and Business Services Java Intelligenc Open Source e ICT Solutions and Services - Since 1996 Specific and in-depth knowledge – 78 employees www.bejug.org
  5. 5. Agenda  Modularity in Java  OSGi Basics  OSGi Best Practices  Conclusion www.bejug.org
  6. 6. Modularity in Java  Modularity Matters – Component reuse – Consistency – Efficiency – Robustness – Maintainability – Scalability www.bejug.org
  7. 7. Modularity in Java  Different approaches: – OSGi – HK2 (Apache Harmony) – JSR 277/294 – JSR 232/291 – Spar – Jigsaw project (only JDK) – … www.bejug.org
  8. 8. Modularity in Java  Common problems in Java – JAR HELL – No versioning – The Classpath – Class visibility – Hot deployment – Write once, run anywhere www.bejug.org
  9. 9. Agenda  Modularity in Java  OSGi Basics  OSGi Best Practices  Conclusion www.bejug.org
  10. 10. OSGi Basics  What is OSGi  Classloading in OSGi  The Bundle Lifecycle  OSGi Services  Demo www.bejug.org
  11. 11. What is OSGi  OSGi is a service oriented platform  On top of a unique classloading mechanism  Enabling features like: – Versioning – Encapsulation – Runtime Dynamics www.bejug.org
  12. 12. What is OSGi www.bejug.org
  13. 13. OSGi Basics  What is OSGi  Classloading in OSGi Welcome to the World of ClassNotFoundExceptions and ClassDefNotFoundErrors  The Bundle Lifecycle  OSGi Services  Demo www.bejug.org
  14. 14. Classloading in OSGi  Classloading 1 O 1 – What is a class?  Compile time  Runtime – A classloader defines an isolated class space. www.bejug.org
  15. 15. Classloading in OSGi  How can a classloader share it’s class space with other classloaders?  Classloader hierarchy • Linear hierarchy • Tree hierarchy  Classloader delegation model • Parent first delegation model • Child first delegation model www.bejug.org
  16. 16. Classloading in OSGi  Default linear parent first delegation model www.bejug.org
  17. 17. Classloading in OSGi  Linear parent first delegation model  no versioning  Breaking the linear structure to allow versioning public static void main(String[] args) throws Exception { URL[] urls = ((URLClassLoader)TestApp.class.getClassLoader()).getURLs(); URLClassLoader urlCL = new URLClassLoader(urls, null); Class personClass = urlCL.loadClass("be.ebit.bejug.model.Person"); Object personInstance = personClass.newInstance(); Person p = (Person) personInstance; } www.bejug.org
  18. 18. Classloading in OSGi  Tree parent delegation model: www.bejug.org
  19. 19. Classloading in OSGi  Moving towards OSGi: public static void main(String[] args) throws Exception { //Path to model.jar version 1 URL[] urls = new URL[]{new URL(“<path>/modelv1.jar”)} //Path to model.jar version 2 URL[] urls = new URL[]{new URL(“<path>/modelv2.jar”)} URLClassLoader urlCL1 = new URLClassLoader(urls,null); URLClassLoader urlCL2 = new URLClassLoader(urls,null); Class personClassV1 = urlCL1.loadClass("be.ebit.springone.model.Person"); Class personClassV2 = urlCL2.loadClass("be.ebit.springone.model.Person"); } www.bejug.org
  20. 20. Classloading in OSGi www.bejug.org
  21. 21. Classloading in OSGi  How does OSGi fit in? – ModelV1.jar  Bundle A – ModelV2.jar  Bundle B  Each bundle with its own ClassLoader (and thread)  The non-linear classloader structure allows versioning within one JVM.  Basic principle behind the versioning capabilities in OSGi.  Cfr. Servlet containers www.bejug.org
  22. 22. Classloading in OSGi www.bejug.org
  23. 23. Classloading in OSGi  The parent first delegation model does NOT allow communication between bundle classloaders – The FrontV1 bundle classloader cannot get a Person class  Solution? – Extending the classloading mechanism www.bejug.org
  24. 24. Classloading in OSGi www.bejug.org
  25. 25. Classloading in OSGi  Bundle classloaders can delegate classloading to: – The parent classloader  parent first delegation – Other bundle classloaders  bundle delegation  The problem is choice: – Parent or bundle delegation? – If bundle delegation: to which bundle classloader? www.bejug.org
  26. 26. Classloading in OSGi  OSGi Delegation Rules: – Parent Delegation Model is used if: – Otherwise Bundle Delegation Model is used www.bejug.org
  27. 27. Classloading in OSGi  The Bundle Delegation Model: – To which bundle classloader to delegate? – Metadata in the Bundle Manifest to the rescue:  1 Import/export-packages – what packages are needed by the bundle. – what packages are provided by the bundle.  2 Required bundles  3 Bundle classpath  4 Fragment bundles  5 Dynamic imports www.bejug.org
  28. 28. Classloading in OSGi  How to wire the classloaders?  Classloader infrastructure  General wiring resolution rules: – Ensures that only one version of a class is visible within a classloader:  class space consistency – Uses the highest version within the constraints specified  Version ranges  Custom qualifiers www.bejug.org
  29. 29. Classloading in OSGi www.bejug.org
  30. 30. Classloading in OSGi  Constraint solving: an example www.bejug.org
  31. 31. Classloading in OSGi  For each imported package a wire exists to the providing bundle classloader  The wires are calculated at bundle resolution  This wiring is NOT static: – Bundles can come and go – Dynamic updates  This wiring process is repeated (partially) with each refresh without a JVM restart. www.bejug.org
  32. 32. Classloading in OSGi  Bundle Delegation Model (Runtime) www.bejug.org
  33. 33. Classloading in OSGi  The total picture: www.bejug.org
  34. 34. Classloading in OSGi  Fine-tuning the choice of delegation model: – Bootdelegation:  Additional classes to be loaded by the parent classloader  System property: org.osgi.framework.bootdelegation  No versioning – System packages:  Exported by the system bundle (bundle 0)  System property: org.osgi.framework.system.packages  Versioning  Takes part in the wiring process  Last option is preferred www.bejug.org
  35. 35. Classloading in OSGi www.bejug.org
  36. 36. Classloading in OSGi  Parent first delegation model: – No versioning – Static ‘wiring’ – See-all approach  Bundle delegation model: – Versioning – By default, only the exports are visible – Support for dynamic updates/dynamic wiring www.bejug.org
  37. 37. OSGi Basics  What is OSGi  Classloading in OSGi  The Bundle Lifecycle  OSGi Services  Demo www.bejug.org
  38. 38. The Bundle Lifecycle www.bejug.org
  39. 39. The Bundle Lifecycle  The Bundle Activator – Start() & Stop() – Resource Mgnt, Thread Mgnt, Services Lifecycle Mgnt  Events: – Bundle events – Framework events  The Bundle Context – Environment information – Installing bundles – Installing services www.bejug.org
  40. 40. The Bundle Lifecycle  Bundle updates, uninstalls & refreshes – Update: migrate from one version to another  New exported packages are made available  Old exported packages remain when used – Uninstall  New exported packages are made avialable  Old exported packages remain when used – RefreshPackages: The effective update & removal  A package dependency graph is created  The exporting bundle & all dependent bundles are stopped and restarted. www.bejug.org
  41. 41. The Bundle Lifecycle  Uninstall Model V1 Bundle www.bejug.org
  42. 42. The Bundle Lifecycle  Model V1 Bundle is marked for deleting www.bejug.org
  43. 43. The Bundle Lifecycle  Install & Start SecondFrontV1 Bundle – (imports be.ebit.bejug.model) www.bejug.org
  44. 44. The Bundle Lifecycle  RefreshPackages (or restart framework) – Resolution (wiring) process is redone www.bejug.org
  45. 45. OSGi Basics  What is OSGi  Classloading in OSGi  The Bundle Lifecycle  OSGi Services  Demo www.bejug.org
  46. 46. OSGi Services www.bejug.org
  47. 47. OSGi Services  Services  Service interface  Service implementation  ServiceFactories  ServiceRegistry  Registration/Unregistration  ServiceReference: search base  Service Events/Listeners www.bejug.org
  48. 48. OSGi Services  Service lookup is text-based – Filter (interface + criteria)  Services can come and go  Stale references  Services are fully loaded before registration  Multi-threading  OSGi development is NOT trivial! www.bejug.org
  49. 49. OSGi Services  Extension Points: – Not part of the specification – Extension points and extensions – One-to-many – Lazy loading – Less support for service dynamics (restart of eclipse)  Extension Points doesn’t solve all problems! www.bejug.org
  50. 50. OSGi Services  Easing OSGi Component Development: – Declarative Services – Spring DM – iPOJO  Seperation of responsibilities: – Implementation of the service – Publication of the service  Two component models in the specification: – Declarative Services – RFC 124 (Spring DM-based). www.bejug.org
  51. 51. OSGi Services  Common characteristics: – Declaration of services – Creation of services externalized (outside the bundle) – Lazy loading – Service composition – Service dependencies & lifecycle management – Dynamic dependencies www.bejug.org
  52. 52. OSGi Basics  What is OSGi  Classloading in OSGi  The Bundle Lifecycle  OSGi Services  Demo www.bejug.org
  53. 53. Demo www.bejug.org
  54. 54. Demo www.bejug.org
  55. 55. Agenda  Modularity in Java  OSGi Basics  OSGi Best Practices  Conclusion www.bejug.org
  56. 56. OSGi Patterns & Best Practices  OSGi Patterns – Extender Pattern – Configuration Fragment Bundles – Whiteboard Pattern www.bejug.org
  57. 57. Extender Pattern www.bejug.org
  58. 58. Configuration Fragment Bundles  Examples: – Log4J configuration, – Custom configuration of the spring extender bundle www.bejug.org
  59. 59. Whiteboard Pattern www.bejug.org
  60. 60. OSGi Patterns & Best Practices  Best Practices: – Use imports instead of the parent classloader (except java.*) – Minimize dependencies – Hide implementation details – Start ordering dependencies – Thread safety – Framework Callbacks – Classloader hierarchy dependencies – OSGi Framework coupling www.bejug.org
  61. 61. Conclusion  OSGi is a platform full of potential: – Enhances encapsulation – Versioning – Runtime dynamics – Service-oriented  A different mindset is needed! www.bejug.org
  62. 62. Q&A – http://belgium.osgiusers.org – www.ouforum.be www.bejug.org
  63. 63. Links  http://www.osgi.org  http://www.springsource.org/osgi  http://www.dynamicjava.org  http://belgium.osgiusers.org www.bejug.org

×