It is more clear to clean up your service registrations and service
listeners in your BundleActivator.stop method.  In many cases you want to
unregister your listeners and services before you do other clean-up that
will invalidate the services/listeners and cause them to behave
incorrectly.  For example, closing a database connection that backs a
service implementation.  You should unregister the service before closing
the database connection.

The extra cleanup the Framework does is really a safeguard to prevent
invalid services and listeners from collecting in the Framework.

Tom




                                                                                
                                                
  From:       Meng Xin Zhu <[EMAIL PROTECTED]>                                  
                                                 
                                                                                
                                                
  To:         equinox-dev@eclipse.org                                           
                                                
                                                                                
                                                
  Cc:         Xiang Yu Hao <[EMAIL PROTECTED]>                                  
                                                 
                                                                                
                                                
  Date:       03/31/2008 05:17 AM                                               
                                                
                                                                                
                                                
  Subject:    [equinox-dev] my confusion for unregistering services in 
bundle.stop                                              
                                                                                
                                                





I find below description in the OSGi R4 specification section '4.3.6
Activation':

stop(BundleContext) – This method must undo all the actions of the
BundleActivator.start(BundleContext) method. However, it is unnecessary to
unregister services or Framework listeners, because they must be cleaned up
by the Framework anyway.

Recently I read a post introducing development best practices(it's ibm
internal site), it says:
While the OSGi Framework will clean up services and service references, it
is still good programming practice to clean up what you allocate.
If you register services in the start() method, unregister the services in
the stop() method.
If you create (and open) a ServiceTracker in the start() method, close it
in the stop() method.
If you start threads or jobs in your start() method, make sure that the
threads or jobs are terminated by your stop method.

Which practice I would choice when programming OSGi service under Equinox?
Thanks

Best Regards
Zhu Meng Xin
IBM Workplace Client Technology
Tel: 86-10-82452244-52342 Fax: 86-10-82452887
NOTES: Meng Xin Zhu/China/IBM E-mail: [EMAIL PROTECTED]
_______________________________________________
equinox-dev mailing list
equinox-dev@eclipse.org
https://dev.eclipse.org/mailman/listinfo/equinox-dev

<<inline: graycol.gif>>

<<inline: ecblank.gif>>

_______________________________________________
equinox-dev mailing list
equinox-dev@eclipse.org
https://dev.eclipse.org/mailman/listinfo/equinox-dev

Reply via email to