Why is os gi dynamic.pptx

542 views

Published on

Why is OSGi dynamic talk from EclipseCon Europe 2012

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
542
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
10
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Why is os gi dynamic.pptx

  1. 1. Why is OSGi dynamic ?Christian Campo, compeople AGEclipseCon Europe 2012,
  2. 2. Overview • OSGi is... • Lifecycle • Services / Extensions • Sample • Workaround • Otherscompeople AG | EclipseCon Europe 2012 | Why are OSGi dynamic ? | 12.09.2012 | 2
  3. 3. OSGi is ... ... a module system and service platform for the Java programming language that implements a complete and dynamic component model. Applications or components (coming in the form of bundles for deployment) can be installed, started, stopped, updated, and uninstalled without requiring a reboot. The service registry allows bundles to detect the addition of new services, or the removal of services, and adapt accordingly. *Wikipedia 2012compeople AG | EclipseCon Europe 2012 | Why are OSGi dynamic ? | 12.09.2012 | 3
  4. 4. OSGi is ... Bundle Service Extension started started installed stopped stopped uninstalled installed uninstalledcompeople AG | EclipseCon Europe 2012 | Why are OSGi dynamic ? | 12.09.2012 | 4
  5. 5. OSGi Lifecycle ... Bundle Service stopped started Extension uninstalled installed uninstalled stopped startedcompeople AG | EclipseCon Europe 2012 | Why are OSGi dynamic ? | 12.09.2012 | 5
  6. 6. OSGi Service Usage ... Bundle IService started Bundle Bundle Service MyComponent ? stopped started serviceRef stopped started startedcompeople AG | EclipseCon Europe 2012 | Why are OSGi dynamic ? | 12.09.2012 | 6
  7. 7. Extensions ExtPoint ? Bundle Bundle Extension MyComponent createExecRef uninstalled installed uninstalled stopped started startedcompeople AG | EclipseCon Europe 2012 | Why are OSGi dynamic ? | 12.09.2012 | 7
  8. 8. Lazy activation Bundle IService started stopped Bundle Bundle Service MyComponent stopped serviceRef stopped started stopped Who starts this bundle so the Service can be accessed ?compeople AG | EclipseCon Europe 2012 | Why are OSGi dynamic ? | 12.09.2012 | 8
  9. 9. Which means ... • A service references can become invalid anytime during runtime • Services are uncoupled from their consumer (no dependency) • Services need to be started before the lookup • Bundles are started lazy by default ›  you cannot rely on a bundle being activecompeople AG | EclipseCon Europe 2012 | Why are OSGi dynamic ? | 12.09.2012 | 9
  10. 10. Sample Bundle ISearchService started Bundle Bundle SearchService MySearch started search started startedcompeople AG | EclipseCon Europe 2012 | Why are OSGi dynamic ? | 12.09.2012 | 10
  11. 11. Which means ... (API approach) MySearch ref = context.getServiceReference(ISearchService.class.getName()); if (ref!=null) { ISearchService search = (ISearchService)context.getService(ref); if (search!=null) { search.findByName("Bill"); ... ... // is search still valid here ??? } context.ungetService(ref); }compeople AG | EclipseCon Europe 2012 | Why are OSGi dynamic ? | 12.09.2012 | 11
  12. 12. Which means .... (ServiceTracker) MySearch ServiceTracker tracker = new ServiceTracker(ctx, ISearchService.class.getName(), null); tracker.open(); ISearchService search = ((ISearchService )tracker.getService()); if (search!=null) { search.findByName("Bill"); ... ... // is search still valid here ??? }compeople AG | EclipseCon Europe 2012 | Why are OSGi dynamic ? | 12.09.2012 | 12
  13. 13. Which means ... (Declaritive approach) <component name= "MySearch"> <implementation class="org.example.MySearch"/> <reference bind="setCustomerSearch" cardinality="1..1" interface="org.eclipse.search.ISearchService" name="Search" policy="dynamic" unbind="unsetCustomerSearch"/> </component> Note: The declarative approach requires that DS controls the lifecyle of the target component. (MySearch). If that lifecycle is out of your control, you need an API. Both components should be DS to make sense.compeople AG | EclipseCon Europe 2012 | Why are OSGi dynamic ? | 12.09.2012 | 13
  14. 14. Which means ... (Declaritive approach) public class MySearch { public void setCustomerSearch(ISearchService search) { this.search = search; } public Customer[] listCustomer(String name) { return search.findByName(name); } public Customer findCustomer(String number) { return search.findByNumber(number); } public void unsetCustomerSearch(ISearchService search) { this.search = null; } }compeople AG | EclipseCon Europe 2012 | Why are OSGi dynamic ? | 12.09.2012 | 14
  15. 15. Which means ... (e4 approach) public class MySearch { @Inject private ISearchService search; public Customer[] listCustomer(String name) { return search.findByName(name); } public Customer findCustomer(String number) { return search.findByNumber(number); } }compeople AG | EclipseCon Europe 2012 | Why are OSGi dynamic ? | 12.09.2012 | 15
  16. 16. That things can break ... • NPE when accessing service that are injected ›  Service was not started ›  Service was stopped ›  No bundle in the setup implements the Service • Service instance exists, but Service-Bundle is stopped • Lazy activation does not work once a bundle is stopped • At startup no way to check that all dependencies are there.compeople AG | EclipseCon Europe 2012 | Why are OSGi dynamic ? | 12.09.2012 | 16
  17. 17. Are you ready ... ? • Is our code always ready that a reference to a service instance is no longer valid ? • In your RCP application, do you often stop and start bundles ? • Do you swap-in a new Service implementation at runtime ? OR do you need that dynamic ?compeople AG | EclipseCon Europe 2012 | Why are OSGi dynamic ? | 12.09.2012 | 17
  18. 18. Eclipse IDE... • A typical usecase for dynamic OSGi is installation of bundles in the Eclipse IDE • Did you notice that the "Apply changes" option from Eclipse 3.7 is gone in 3.8 and 4.2 ? • Did it ever work for you ? • Test with Eclipse IDE ›  install bundle in 3.7 and in 4.2 (no apply in 4.2) ›  stop a bundle in the console and see how the Eclipse IDE reactscompeople AG | EclipseCon Europe 2012 | Why are OSGi dynamic ? | 12.09.2012 | 18
  19. 19. stopped egit.uicompeople AG | EclipseCon Europe 2012 | Why are OSGi dynamic ? | 12.09.2012 | 19
  20. 20. Not everyone wants/needs dynamic ... • Often there is nothing reasonable to do when an injected service is not there. ›  SearchDialog without SearchService ›  SearchService without DatabaseConnectorService ›  Car without BrakeServicecompeople AG | EclipseCon Europe 2012 | Why are OSGi dynamic ? | 12.09.2012 | 20
  21. 21. Work-arounds • Frameworks on top of OSGi implement their own way of starting bundles EAGER • OSGi based servers want to start everything immediately • Applications manually start all necessary bundles and service at startup and never stop themcompeople AG | EclipseCon Europe 2012 | Why are OSGi dynamic ? | 12.09.2012 | 21
  22. 22. The advantage ... • A missing service is not "normal", dont try to handle it. • Detect missing components at startup and fail instantly • Services dont appear at some time. They are either there or not. • A Service cannot disappear while you are using it.compeople AG | EclipseCon Europe 2012 | Why are OSGi dynamic ? | 12.09.2012 | 22
  23. 23. There are exceptions... • Some Services need the dynamic (=flexibility) ›  i.e. change ServiceImplementation if you switch from online to offline • So document that decision and add the additional checkscompeople AG | EclipseCon Europe 2012 | Why are OSGi dynamic ? | 12.09.2012 | 23
  24. 24. Which means ... (API approach) ref = context.getServiceReference(ICustomerSearch.class.getName()); if (ref!=null) { ICustomerSearch search = (ICustomerSearch)context.getService(ref); // if (search!=null) { search.findByName("Bill"); ... ... // is search is valid here !!! // } context.ungetService(ref); // ??? }compeople AG | EclipseCon Europe 2012 | Why are OSGi dynamic ? | 12.09.2012 | 24
  25. 25. Which means ... (e4 approach) public class MySearch { @Inject private ISearchService search; public Customer[] listCustomer(String name) { return search.findByName(name); } public Customer findCustomer(String number) { return search.findByNumber(number); } }compeople AG | EclipseCon Europe 2012 | Why are OSGi dynamic ? | 12.09.2012 | 25
  26. 26. Others ... OSGi != != no dynamic lifecycle per componentcompeople AG | EclipseCon Europe 2012 | Why are OSGi dynamic ? | 12.09.2012 | 26
  27. 27. OSGi •  Modules as Bundles cool •  Bundles /w public API & private Impl cool cool •  OSGi Service •  Extensions cool •  Lazy Activation be careful •  Start / Stop Services on condition use with care •  Ability to stop Bundles at Runtime avoid •  Ability to replace Bundles at Runtime avoidcompeople AG | EclipseCon Europe 2012 | Why are OSGi dynamic ? | 12.09.2012 | 27
  28. 28. Q&Acompeople AG | EclipseCon Europe 2012 | Why are OSGi dynamic ? | 12.09.2012 | 28

×