SlideShare uma empresa Scribd logo
1 de 28
Baixar para ler offline
Why is OSGi dynamic ?
Christian Campo, compeople AG
EclipseCon Europe 2012,
Overview

               • OSGi is...
               • Lifecycle
               • Services / Extensions
               • Sample
               • Workaround
               • Others




compeople AG        | EclipseCon Europe 2012   | Why are OSGi dynamic ?   | 12.09.2012   |   2
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 2012
compeople AG        | EclipseCon Europe 2012   | Why are OSGi dynamic ?   | 12.09.2012    |          3
OSGi is ...


                       Bundle                  Service                    Extension



                       started                 started                    installed
                       stopped                 stopped                    uninstalled
                       installed
                       uninstalled




compeople AG        | EclipseCon Europe 2012   | Why are OSGi dynamic ?      | 12.09.2012   |   4
OSGi Lifecycle ...


                       Bundle

                          Service

                          stopped
                          started


                          Extension

                          uninstalled
                          installed
                       uninstalled
                       stopped
                       started




compeople AG        | EclipseCon Europe 2012   | Why are OSGi dynamic ?   | 12.09.2012   |   5
OSGi Service Usage ...

                                               Bundle
                                                IService

                                               started

               Bundle                                                          Bundle

                Service                                                        MyComponent



                                                   ?
                stopped
                started                                                        serviceRef



               stopped
               started                                                         started




compeople AG        | EclipseCon Europe 2012        | Why are OSGi dynamic ?        | 12.09.2012   |   6
Extensions




                                                                                                ExtPoint


                                                ?
               Bundle                                                      Bundle

                Extension                                                  MyComponent
                                                                           createExecRef
                uninstalled
                installed


               uninstalled
               stopped
               started                                                     started




compeople AG         | EclipseCon Europe 2012   | Why are OSGi dynamic ?         | 12.09.2012       |      7
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
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 active




compeople AG        | EclipseCon Europe 2012   | Why are OSGi dynamic ?   | 12.09.2012   |   9
Sample

                                               Bundle
                                                ISearchService

                                               started

               Bundle                                                          Bundle

                SearchService                                                  MySearch

                started                                                        search



               started                                                         started




compeople AG        | EclipseCon Europe 2012        | Why are OSGi dynamic ?   | 12.09.2012   |   10
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
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
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
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
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
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
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
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 reacts




compeople AG        | EclipseCon Europe 2012   | Why are OSGi dynamic ?   | 12.09.2012   |   18
stopped egit.ui




compeople AG       | EclipseCon Europe 2012   | Why are OSGi dynamic ?   | 12.09.2012   |   19
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 BrakeService




compeople AG        | EclipseCon Europe 2012   | Why are OSGi dynamic ?   | 12.09.2012   |   20
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 them




compeople AG        | EclipseCon Europe 2012   | Why are OSGi dynamic ?   | 12.09.2012   |   21
The advantage ...

               • A missing service is not "normal", don't try to handle it.
               • Detect missing components at startup and fail instantly
               • Services don't 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
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 checks




compeople AG        | EclipseCon Europe 2012   | Why are OSGi dynamic ?   | 12.09.2012   |   23
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
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
Others ...




               OSGi !=                                            !=

                                         no dynamic lifecycle per component




compeople AG        | EclipseCon Europe 2012   | Why are OSGi dynamic ?   | 12.09.2012   |   26
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                                  avoid




compeople AG        | EclipseCon Europe 2012   | Why are OSGi dynamic ?   | 12.09.2012    |           27
Q&A




compeople AG   | EclipseCon Europe 2012   | Why are OSGi dynamic ?   | 12.09.2012   |   28

Mais conteúdo relacionado

Destaque

Mini lesson plan 1
Mini lesson plan 1Mini lesson plan 1
Mini lesson plan 1
dykemaem
 
Patricia talem
Patricia talemPatricia talem
Patricia talem
ptalem
 
Jacob feldman’s chanukah list 2010 final
Jacob feldman’s chanukah list 2010 finalJacob feldman’s chanukah list 2010 final
Jacob feldman’s chanukah list 2010 final
Jacob Feldman
 
Animation rig set up
Animation rig set upAnimation rig set up
Animation rig set up
harrietmedia
 

Destaque (20)

Moda verano
Moda veranoModa verano
Moda verano
 
GI2013 ppt andreopoulos+kazakis_v2 the+sustainable+future+eco+landmarks
GI2013 ppt andreopoulos+kazakis_v2 the+sustainable+future+eco+landmarksGI2013 ppt andreopoulos+kazakis_v2 the+sustainable+future+eco+landmarks
GI2013 ppt andreopoulos+kazakis_v2 the+sustainable+future+eco+landmarks
 
All your appliances are belong to us
All your appliances are belong to usAll your appliances are belong to us
All your appliances are belong to us
 
Chap 1 pfin
Chap 1 pfinChap 1 pfin
Chap 1 pfin
 
Gj11e ch02
Gj11e ch02Gj11e ch02
Gj11e ch02
 
Indagine sui visitatori del carnevale di putignano 2005
Indagine sui visitatori del carnevale di putignano 2005Indagine sui visitatori del carnevale di putignano 2005
Indagine sui visitatori del carnevale di putignano 2005
 
Kliment oggioni ppt_gi2011_env_europe_remote_final
Kliment oggioni ppt_gi2011_env_europe_remote_finalKliment oggioni ppt_gi2011_env_europe_remote_final
Kliment oggioni ppt_gi2011_env_europe_remote_final
 
Mini lesson plan 1
Mini lesson plan 1Mini lesson plan 1
Mini lesson plan 1
 
Patricia talem
Patricia talemPatricia talem
Patricia talem
 
GI2013 ppt decewicz_dresden2013.pdf
GI2013 ppt decewicz_dresden2013.pdfGI2013 ppt decewicz_dresden2013.pdf
GI2013 ppt decewicz_dresden2013.pdf
 
GI2012 hoffmann-oddp
GI2012 hoffmann-oddpGI2012 hoffmann-oddp
GI2012 hoffmann-oddp
 
Presentation - Recreating Treasures
Presentation - Recreating TreasuresPresentation - Recreating Treasures
Presentation - Recreating Treasures
 
презентация1лб
презентация1лбпрезентация1лб
презентация1лб
 
Jacob feldman’s chanukah list 2010 final
Jacob feldman’s chanukah list 2010 finalJacob feldman’s chanukah list 2010 final
Jacob feldman’s chanukah list 2010 final
 
Open Resources for Research Students and Digital Scholars
Open Resources for Research Students and Digital ScholarsOpen Resources for Research Students and Digital Scholars
Open Resources for Research Students and Digital Scholars
 
GI2013 ppt vohnout&team-enviro_grids
GI2013 ppt vohnout&team-enviro_gridsGI2013 ppt vohnout&team-enviro_grids
GI2013 ppt vohnout&team-enviro_grids
 
GI2012 trakas standards ogc
GI2012 trakas standards ogcGI2012 trakas standards ogc
GI2012 trakas standards ogc
 
Animation rig set up
Animation rig set upAnimation rig set up
Animation rig set up
 
GI2011 Lach cost+benefit factors of regio_sdi
GI2011 Lach cost+benefit factors of regio_sdiGI2011 Lach cost+benefit factors of regio_sdi
GI2011 Lach cost+benefit factors of regio_sdi
 
GI2013 ppt hoffmann_review_x-gdi_sustainability
GI2013 ppt hoffmann_review_x-gdi_sustainabilityGI2013 ppt hoffmann_review_x-gdi_sustainability
GI2013 ppt hoffmann_review_x-gdi_sustainability
 

Semelhante a Why is os gi dynamic.pptx

Bpel And OSGi
Bpel And OSGi Bpel And OSGi
Bpel And OSGi
zoppello
 
Bpel And Osgi
Bpel And OsgiBpel And Osgi
Bpel And Osgi
zoppello
 
Bpel And OSGi
Bpel And OSGi Bpel And OSGi
Bpel And OSGi
zoppello
 
SMILA - The Integration Framework
SMILA - The Integration FrameworkSMILA - The Integration Framework
SMILA - The Integration Framework
novakovic
 

Semelhante a Why is os gi dynamic.pptx (20)

Paremus Cloud and OSGi Beyond the VM - OSGi Cloud Workshop March 2012
Paremus Cloud and OSGi Beyond the VM - OSGi Cloud Workshop March 2012Paremus Cloud and OSGi Beyond the VM - OSGi Cloud Workshop March 2012
Paremus Cloud and OSGi Beyond the VM - OSGi Cloud Workshop March 2012
 
The OSGi Framework Multiplication
The OSGi Framework MultiplicationThe OSGi Framework Multiplication
The OSGi Framework Multiplication
 
Eclipse Con2009 Practical Process Orchestration
Eclipse Con2009 Practical Process OrchestrationEclipse Con2009 Practical Process Orchestration
Eclipse Con2009 Practical Process Orchestration
 
Osgi Devconeu 2009 Welcome Christer Larsson
Osgi Devconeu 2009 Welcome Christer LarssonOsgi Devconeu 2009 Welcome Christer Larsson
Osgi Devconeu 2009 Welcome Christer Larsson
 
OSGi Mars World in Action
OSGi Mars World in ActionOSGi Mars World in Action
OSGi Mars World in Action
 
Nuxeo World Session: Nuxeo & OSGi
Nuxeo World Session: Nuxeo & OSGiNuxeo World Session: Nuxeo & OSGi
Nuxeo World Session: Nuxeo & OSGi
 
What is os gi and what does osgi
What is os gi and what does osgiWhat is os gi and what does osgi
What is os gi and what does osgi
 
Equinox -The adoption of the OSGi standard in enterprise solutions
Equinox -The adoption of the OSGi standard in enterprise solutions Equinox -The adoption of the OSGi standard in enterprise solutions
Equinox -The adoption of the OSGi standard in enterprise solutions
 
OSGi tech session
OSGi tech sessionOSGi tech session
OSGi tech session
 
OSGi DevCon 2009 Review
OSGi DevCon 2009 ReviewOSGi DevCon 2009 Review
OSGi DevCon 2009 Review
 
Best Practices for (Enterprise) OSGi applications - Tim Ward
Best Practices for (Enterprise) OSGi applications - Tim WardBest Practices for (Enterprise) OSGi applications - Tim Ward
Best Practices for (Enterprise) OSGi applications - Tim Ward
 
Bpel And OSGi
Bpel And OSGi Bpel And OSGi
Bpel And OSGi
 
Bpel And Osgi
Bpel And OsgiBpel And Osgi
Bpel And Osgi
 
Bpel And OSGi
Bpel And OSGi Bpel And OSGi
Bpel And OSGi
 
Modular Java EE in the Cloud
Modular Java EE in the CloudModular Java EE in the Cloud
Modular Java EE in the Cloud
 
BPEL & OSGi at EclipseCon 2010
BPEL & OSGi at EclipseCon 2010BPEL & OSGi at EclipseCon 2010
BPEL & OSGi at EclipseCon 2010
 
Liferay Module Framework
Liferay Module FrameworkLiferay Module Framework
Liferay Module Framework
 
Smila ESE 2008
Smila ESE 2008Smila ESE 2008
Smila ESE 2008
 
SMILA - The Integration Framework
SMILA - The Integration FrameworkSMILA - The Integration Framework
SMILA - The Integration Framework
 
FraSCAti with OSGi
FraSCAti with OSGiFraSCAti with OSGi
FraSCAti with OSGi
 

Mais de christiancampo (7)

What makes an application a good Application (Eclipse Finance Day 2012 Zürich)
What makes an application a good Application (Eclipse Finance Day 2012 Zürich)What makes an application a good Application (Eclipse Finance Day 2012 Zürich)
What makes an application a good Application (Eclipse Finance Day 2012 Zürich)
 
Riena onrap econ-2011
Riena onrap econ-2011Riena onrap econ-2011
Riena onrap econ-2011
 
Swt qt econ-2010
Swt qt econ-2010Swt qt econ-2010
Swt qt econ-2010
 
Swt qt ese-2009
Swt qt ese-2009Swt qt ese-2009
Swt qt ese-2009
 
Riena on-e4-ese2010
Riena on-e4-ese2010Riena on-e4-ese2010
Riena on-e4-ese2010
 
Riena on-rap-ese2010
Riena on-rap-ese2010Riena on-rap-ese2010
Riena on-rap-ese2010
 
Swt qt ese2010
Swt qt ese2010Swt qt ese2010
Swt qt ese2010
 

Último

Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
vu2urc
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 

Último (20)

Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdf
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of Brazil
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 

Why is os gi dynamic.pptx

  • 1. Why is OSGi dynamic ? Christian Campo, compeople AG EclipseCon Europe 2012,
  • 2. Overview • OSGi is... • Lifecycle • Services / Extensions • Sample • Workaround • Others compeople AG | EclipseCon Europe 2012 | Why are OSGi dynamic ? | 12.09.2012 | 2
  • 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 2012 compeople AG | EclipseCon Europe 2012 | Why are OSGi dynamic ? | 12.09.2012 | 3
  • 4. OSGi is ... Bundle Service Extension started started installed stopped stopped uninstalled installed uninstalled compeople AG | EclipseCon Europe 2012 | Why are OSGi dynamic ? | 12.09.2012 | 4
  • 5. OSGi Lifecycle ... Bundle Service stopped started Extension uninstalled installed uninstalled stopped started compeople AG | EclipseCon Europe 2012 | Why are OSGi dynamic ? | 12.09.2012 | 5
  • 6. OSGi Service Usage ... Bundle IService started Bundle Bundle Service MyComponent ? stopped started serviceRef stopped started started compeople AG | EclipseCon Europe 2012 | Why are OSGi dynamic ? | 12.09.2012 | 6
  • 7. Extensions ExtPoint ? Bundle Bundle Extension MyComponent createExecRef uninstalled installed uninstalled stopped started started compeople AG | EclipseCon Europe 2012 | Why are OSGi dynamic ? | 12.09.2012 | 7
  • 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. 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 active compeople AG | EclipseCon Europe 2012 | Why are OSGi dynamic ? | 12.09.2012 | 9
  • 10. Sample Bundle ISearchService started Bundle Bundle SearchService MySearch started search started started compeople AG | EclipseCon Europe 2012 | Why are OSGi dynamic ? | 12.09.2012 | 10
  • 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. 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. 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. 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. 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. 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. 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. 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 reacts compeople AG | EclipseCon Europe 2012 | Why are OSGi dynamic ? | 12.09.2012 | 18
  • 19. stopped egit.ui compeople AG | EclipseCon Europe 2012 | Why are OSGi dynamic ? | 12.09.2012 | 19
  • 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 BrakeService compeople AG | EclipseCon Europe 2012 | Why are OSGi dynamic ? | 12.09.2012 | 20
  • 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 them compeople AG | EclipseCon Europe 2012 | Why are OSGi dynamic ? | 12.09.2012 | 21
  • 22. The advantage ... • A missing service is not "normal", don't try to handle it. • Detect missing components at startup and fail instantly • Services don't 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. 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 checks compeople AG | EclipseCon Europe 2012 | Why are OSGi dynamic ? | 12.09.2012 | 23
  • 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. 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. Others ... OSGi != != no dynamic lifecycle per component compeople AG | EclipseCon Europe 2012 | Why are OSGi dynamic ? | 12.09.2012 | 26
  • 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 avoid compeople AG | EclipseCon Europe 2012 | Why are OSGi dynamic ? | 12.09.2012 | 27
  • 28. Q&A compeople AG | EclipseCon Europe 2012 | Why are OSGi dynamic ? | 12.09.2012 | 28