Intro To OSGi

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    1 Favorite

    Intro To OSGi - Presentation Transcript

    1. Introduction in OSGi 2009 www.bejug.org
    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. Imtech ICT Belgium www.bejug.org
    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. Agenda  Modularity in Java  OSGi Basics  OSGi Best Practices  Conclusion www.bejug.org
    6. Modularity in Java  Modularity Matters – Component reuse – Consistency – Efficiency – Robustness – Maintainability – Scalability www.bejug.org
    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. 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. Agenda  Modularity in Java  OSGi Basics  OSGi Best Practices  Conclusion www.bejug.org
    10. OSGi Basics  What is OSGi  Classloading in OSGi  The Bundle Lifecycle  OSGi Services  Demo www.bejug.org
    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. What is OSGi www.bejug.org
    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. 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. 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. Classloading in OSGi  Default linear parent first delegation model www.bejug.org
    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. Classloading in OSGi  Tree parent delegation model: www.bejug.org
    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. Classloading in OSGi www.bejug.org
    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. Classloading in OSGi www.bejug.org
    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. Classloading in OSGi www.bejug.org
    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. Classloading in OSGi  OSGi Delegation Rules: – Parent Delegation Model is used if: – Otherwise Bundle Delegation Model is used www.bejug.org
    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. 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. Classloading in OSGi www.bejug.org
    30. Classloading in OSGi  Constraint solving: an example www.bejug.org
    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. Classloading in OSGi  Bundle Delegation Model (Runtime) www.bejug.org
    33. Classloading in OSGi  The total picture: www.bejug.org
    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. Classloading in OSGi www.bejug.org
    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. OSGi Basics  What is OSGi  Classloading in OSGi  The Bundle Lifecycle  OSGi Services  Demo www.bejug.org
    38. The Bundle Lifecycle www.bejug.org
    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. 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. The Bundle Lifecycle  Uninstall Model V1 Bundle www.bejug.org
    42. The Bundle Lifecycle  Model V1 Bundle is marked for deleting www.bejug.org
    43. The Bundle Lifecycle  Install & Start SecondFrontV1 Bundle – (imports be.ebit.bejug.model) www.bejug.org
    44. The Bundle Lifecycle  RefreshPackages (or restart framework) – Resolution (wiring) process is redone www.bejug.org
    45. OSGi Basics  What is OSGi  Classloading in OSGi  The Bundle Lifecycle  OSGi Services  Demo www.bejug.org
    46. OSGi Services www.bejug.org
    47. OSGi Services  Services  Service interface  Service implementation  ServiceFactories  ServiceRegistry  Registration/Unregistration  ServiceReference: search base  Service Events/Listeners www.bejug.org
    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. 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. 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. 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. OSGi Basics  What is OSGi  Classloading in OSGi  The Bundle Lifecycle  OSGi Services  Demo www.bejug.org
    53. Demo www.bejug.org
    54. Demo www.bejug.org
    55. Agenda  Modularity in Java  OSGi Basics  OSGi Best Practices  Conclusion www.bejug.org
    56. OSGi Patterns & Best Practices  OSGi Patterns – Extender Pattern – Configuration Fragment Bundles – Whiteboard Pattern www.bejug.org
    57. Extender Pattern www.bejug.org
    58. Configuration Fragment Bundles  Examples: – Log4J configuration, – Custom configuration of the spring extender bundle www.bejug.org
    59. Whiteboard Pattern www.bejug.org
    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. Conclusion  OSGi is a platform full of potential: – Enhances encapsulation – Versioning – Runtime dynamics – Service-oriented  A different mindset is needed! www.bejug.org
    62. Q&A – http://belgium.osgiusers.org – www.ouforum.be www.bejug.org
    63. Links  http://www.osgi.org  http://www.springsource.org/osgi  http://www.dynamicjava.org  http://belgium.osgiusers.org www.bejug.org

    + stephanjstephanj, 4 months ago

    custom

    474 views, 1 favs, 3 embeds more stats

    OSGi has gained popularity over the last two years. more

    More info about this document

    © All Rights Reserved

    Go to text version

    • Total Views 474
      • 468 on SlideShare
      • 6 from embeds
    • Comments 0
    • Favorites 1
    • Downloads 34
    Most viewed embeds
    • 3 views on http://iteman.tumblr.com
    • 2 views on http://www.bejug.be
    • 1 views on http://www.bejug.org

    more

    All embeds
    • 3 views on http://iteman.tumblr.com
    • 2 views on http://www.bejug.be
    • 1 views on http://www.bejug.org

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories

    Tags