|
Knopflerfish OSGi 1.3.3 | |||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectorg.osgi.util.tracker.ServiceTracker
Utility class for grabbing services matching certain criteria.
Typical use would be:
// Create and open a tracker for the log service ServiceTracker logTracker = new ServiceTracker(bc, LogService.class.getname(), null); logTracker.open(); ... // use the service ((LogService)logTracker.getService()).log(LogService.LOG_INFO, "message"));Note that the above code might fail with NullPointerException if no LogService is available.
Field Summary | |
protected ServiceReference |
bestSR
|
protected long |
bestSRID
|
protected long |
bestSRRank
|
protected BundleContext |
context
|
protected ServiceTrackerCustomizer |
customizer
|
protected Filter |
filter
|
protected ServiceListener |
srListener
|
protected java.util.Hashtable |
tracked
|
protected int |
trackingCount
|
Constructor Summary | |
ServiceTracker(BundleContext context,
Filter filter,
ServiceTrackerCustomizer customizer)
Create a ServiceTracker object on the specified Filter object. |
|
ServiceTracker(BundleContext context,
ServiceReference reference,
ServiceTrackerCustomizer customizer)
Create a ServiceTracker object on the specified ServiceReference object. |
|
ServiceTracker(BundleContext context,
java.lang.String clazz,
ServiceTrackerCustomizer customizer)
Create a ServiceTracker object on the specified class name. |
Method Summary | |
java.lang.Object |
addingService(ServiceReference reference)
Default implementation of the ServiceTrackerCustomizer.addingService method. |
void |
close()
Close this ServiceTracker object. |
protected void |
finalize()
Calls the close method. |
java.lang.Object |
getService()
Returns a service object for one of the services being tracked by this ServiceTracker object. |
java.lang.Object |
getService(ServiceReference reference)
Returns the service object for the specified ServiceReference object if the referenced service is being tracked. |
ServiceReference |
getServiceReference()
Returns a ServiceReference object for one of the services being tracked by this ServiceTracker object. |
ServiceReference[] |
getServiceReferences()
Return an array of ServiceReference objects for all services being tracked. |
java.lang.Object[] |
getServices()
Return an array of service objects for all services being tracked. |
int |
getTrackingCount()
|
void |
modifiedService(ServiceReference reference,
java.lang.Object service)
Default implementation of the ServiceTrackerCustomizer.modifiedService method. |
void |
open()
Open this ServiceTracker and begin tracking services. |
void |
remove(ServiceReference reference)
Remove a service from this ServiceTracker object. |
void |
removedService(ServiceReference reference,
java.lang.Object service)
Default implementation of the ServiceTrackerCustomizer.removedService method. |
int |
size()
Number of services being tracked. |
java.lang.String |
toString()
|
protected void |
updateBest(ServiceReference sr)
|
java.lang.Object |
waitForService(long timeout)
Wait for at least one service to be tracked by this ServiceTracker object. |
Methods inherited from class java.lang.Object |
clone, equals, getClass, hashCode, notify, notifyAll, wait, wait, wait |
Field Detail |
protected BundleContext context
protected Filter filter
protected ServiceTrackerCustomizer customizer
protected java.util.Hashtable tracked
protected ServiceListener srListener
protected ServiceReference bestSR
protected long bestSRRank
protected long bestSRID
protected int trackingCount
Constructor Detail |
public ServiceTracker(BundleContext context, ServiceReference reference, ServiceTrackerCustomizer customizer)
The service referenced by the specified ServiceReference object will be tracked by this ServiceTracker object.
context
- BundleContext object against which
the tracking is done.reference
- ServiceReference object for the
service to be tracked.customizer
- The customizer object to call when services are
added, modified, or removed in this
ServiceTracker object.
If customizer is null, then this
ServiceTracker object will be used
as the ServiceTrackerCustomizer object
and the ServiceTracker object will call
the ServiceTrackerCustomizer methods on
itself.public ServiceTracker(BundleContext context, java.lang.String clazz, ServiceTrackerCustomizer customizer)
Services registered under the specified class name will be tracked by this ServiceTracker object.
context
- BundleContext object against which the
tracking is done.clazz
- Class name of the services to be tracked.customizer
- The customizer object to call when services are
added, modified, or removed in
this ServiceTracker object.
If customizer is null, then this
ServiceTracker object will be used
as the ServiceTrackerCustomizer object
and the ServiceTracker object
will call the ServiceTrackerCustomizer
methods on itself.
java.lang.IllegalArgumentException
- if the class name is null,
empty string or causes a
InvalidSyntaxExceptionpublic ServiceTracker(BundleContext context, Filter filter, ServiceTrackerCustomizer customizer)
Services which match the specified Filter object will be tracked by this ServiceTracker object.
context
- BundleContext object against which the
tracking is done.filter
- Filter object to select the
services to be tracked.customizer
- The customizer object to call when services are
added, modified, or removed in this
ServiceTracker object.
If customizer is null, then this
ServiceTracker object will be used
as the ServiceTrackerCustomizer object
and the ServiceTracker
object will call the ServiceTrackerCustomizer
methods on itself.Method Detail |
public java.lang.String toString()
public void open()
Tracking is done by adding a ServiceListener to the bundlecontext used when creating the tracker.
If the tracker is already opened, do nothing.
java.lang.IllegalStateException
- if the BundleContext
object with which this ServiceTracker object was
created is no longer valid.public void close()
This method should be called when this ServiceTracker object should end the tracking of services.
If the tracker is not opened, do nothing.
protected void finalize() throws java.lang.Throwable
java.lang.Throwable
public java.lang.Object addingService(ServiceReference reference)
This method is only called when this ServiceTracker object has been constructed with a null ServiceTrackerCustomizer argument. The default implementation returns the result of calling getService(reference).
This method can be overridden to customize the service object to be tracked for the service being added.
addingService
in interface ServiceTrackerCustomizer
reference
- Reference to service being added to this
ServiceTracker object.
public void modifiedService(ServiceReference reference, java.lang.Object service)
This method is only called when this ServiceTracker object has been constructed with a null ServiceTrackerCustomizer argument. The default implementation does nothing.
modifiedService
in interface ServiceTrackerCustomizer
reference
- Reference to modified service.service
- The modified service.public void removedService(ServiceReference reference, java.lang.Object service)
This method is only called when this ServiceTracker object has been constructed with a null ServiceTrackerCustomizer argument. The default implementation calls ungetService, on the BundleContext object with which this ServiceTracker object was created, passing the specified ServiceReference object.
removedService
in interface ServiceTrackerCustomizer
reference
- Reference to removed service.service
- The service object for the removed service.public java.lang.Object waitForService(long timeout) throws java.lang.InterruptedException
Don't use this method. You'll get bad karma for a long time. If you really need the functionity, you're probably much better off using a ServiceListener directly.
timeout
- time interval in milliseconds to wait. If zero,
the method will wait indefinately.
java.lang.InterruptedException
public ServiceReference[] getServiceReferences()
public java.lang.Object[] getServices()
protected void updateBest(ServiceReference sr)
public ServiceReference getServiceReference()
If multiple services are being tracked, the service with the highest ranking (as specified in its service.ranking property) is returned.
If there is a tie in ranking, the service with the lowest service ID (as specified in its service.id property); that is, the service that was registered first is returned.
This is the same algorithm used by BundleContext.getServiceReference.
Implementation note: This code uses a cached best service reference for quick retrieval. The cache is rebuilt at service registration/unregistation.
public java.lang.Object getService(ServiceReference reference)
reference
- Reference to a service.
public java.lang.Object getService()
If any services are being tracked, this method returns the result of calling getService(getServiceReference()).
public void remove(ServiceReference reference)
reference
- Reference to the service to be removed.public int size()
public int getTrackingCount()
|
Knopflerfish OSGi 1.3.3 | |||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |