Hi, I'm trying to get a clear picture of the ServiceTracker. I've looked at some examples (e.g. http://www.aqute.biz/Snippets/Tracker), but they all seem rather complicated. I'm especially interested in knowing when I can assume a service object to exist.
It is clear to me from the specification that a service object is available (different from null) when the default implementation of addingService returns. So to avoid constantly calling myTracker.getService() (and check for null) whenever I want to invoke a method of the service object, I can derive my own ServiceTracker by overriding addingService (using the LogService as an example): @Override public LogService addingService(ServiceReference<LogService> reference) { myLogService = super.addingService(reference); // Start the thread(s) that refer to (use) myLogService return myLogService; } ... and use myLogService until the service becomes unavailable (invalid). It is less clear to me how to know when the service becomes unavailable. The specification says: removedService(ServiceReference,T) - Called whenever a tracked service is removed from the ServiceTracker object. IMHO "is removed" is a bit unspecific (before/after?). However, I found in the Apache Felix implementation (which isn't a specification, of course) that removedService is invoked while handling the UNREGISTERING event: UNREGISTERING - A service object is in the process of being unregistered. This event is synchro- nously delivered before the service object has completed unregistering. That is, during the deliv- ery of this event, the service object is still valid. So I should be on the safe side if I also override removedService: @Override public void removedService(ServiceReference<LogService> reference, LogService service) { // Interrupt and join the thread(s) that refer to (use) myLogService myLogService = null; super.removedService(reference, service); } Doing it this way, using myLogService in the thread(s) started in addingService and stopped in in removeService should be safe, right? - Michael
_______________________________________________ OSGi Developer Mail List osgi-dev@mail.osgi.org https://mail.osgi.org/mailman/listinfo/osgi-dev