|
OSGi™ Service Platform Release 4 Version 4.1 |
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object org.osgi.util.tracker.ServiceTracker
The ServiceTracker
class simplifies using services from the
Framework's service registry.
A ServiceTracker
object is constructed with search criteria
and a ServiceTrackerCustomizer
object. A
ServiceTracker
object can use the
ServiceTrackerCustomizer
object to customize the service
objects to be tracked. The ServiceTracker
object can then be
opened to begin tracking all services in the Framework's service registry
that match the specified search criteria. The ServiceTracker
object correctly handles all of the details of listening to
ServiceEvent
objects and getting and ungetting services.
The getServiceReferences
method can be called to get
references to the services being tracked. The getService
and
getServices
methods can be called to get the service objects
for the tracked service.
The ServiceTracker
class is thread-safe. It does not call a
ServiceTrackerCustomizer
object while holding any locks.
ServiceTrackerCustomizer
implementations must also be
thread-safe.
Field Summary | |
protected BundleContext |
context
Bundle context against which this ServiceTracker object is
tracking. |
protected Filter |
filter
Filter specifying search criteria for the services to track. |
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. |
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 by this ServiceTracker object. |
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 by this ServiceTracker object. |
java.lang.Object[] |
getServices()
Return an array of service objects for all services being tracked by this ServiceTracker object. |
int |
getTrackingCount()
Returns the tracking count for this ServiceTracker object. |
void |
modifiedService(ServiceReference reference,
java.lang.Object service)
Default implementation of the ServiceTrackerCustomizer.modifiedService method. |
void |
open()
Open this ServiceTracker object and begin tracking
services. |
void |
open(boolean trackAllServices)
Open this ServiceTracker object 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()
Return the number of services being tracked by this ServiceTracker object. |
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, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
protected final BundleContext context
ServiceTracker
object is
tracking.
protected final Filter filter
Constructor Detail |
public ServiceTracker(BundleContext context, ServiceReference reference, ServiceTrackerCustomizer customizer)
ServiceTracker
object on the specified
ServiceReference
object.
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)
ServiceTracker
object on the specified class
name.
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.public ServiceTracker(BundleContext context, Filter filter, ServiceTrackerCustomizer customizer)
ServiceTracker
object on the specified
Filter
object.
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 void open()
ServiceTracker
object and begin tracking
services.
This method calls open(false)
.
java.lang.IllegalStateException
- if the BundleContext
object with which this ServiceTracker
object was
created is no longer valid.open(boolean)
public void open(boolean trackAllServices)
ServiceTracker
object and begin tracking
services.
Services which match the search criteria specified when this
ServiceTracker
object was created are now tracked by this
ServiceTracker
object.
trackAllServices
- If true
, then this
ServiceTracker
will track all matching services
regardless of class loader accessibility. If false
,
then this ServiceTracker
will only track matching
services which are class loader accessibile to the bundle whose
BundleContext
is used by this
ServiceTracker
.
java.lang.IllegalStateException
- if the BundleContext
object with which this ServiceTracker
object was
created is no longer valid.public void close()
ServiceTracker
object.
This method should be called when this ServiceTracker
object should end the tracking of services.
public java.lang.Object addingService(ServiceReference reference)
ServiceTrackerCustomizer.addingService
method.
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
, on the BundleContext
object
with which this ServiceTracker
object was created, passing
the specified ServiceReference
object.
This method can be overridden in a subclass to customize the service object to be tracked for the service being added. In that case, take care not to rely on the default implementation of removedService that will unget the service.
addingService
in interface ServiceTrackerCustomizer
reference
- Reference to service being added to this
ServiceTracker
object.
ServiceTracker
object.ServiceTrackerCustomizer
public void modifiedService(ServiceReference reference, java.lang.Object service)
ServiceTrackerCustomizer.modifiedService
method.
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 service object for the modified service.ServiceTrackerCustomizer
public void removedService(ServiceReference reference, java.lang.Object service)
ServiceTrackerCustomizer.removedService
method.
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.
This method can be overridden in a subclass. If the default
implementation of addingService
method was used, this
method must unget the service.
removedService
in interface ServiceTrackerCustomizer
reference
- Reference to removed service.service
- The service object for the removed service.ServiceTrackerCustomizer
public java.lang.Object waitForService(long timeout) throws java.lang.InterruptedException
ServiceTracker
object.
It is strongly recommended that waitForService
is not used
during the calling of the BundleActivator
methods.
BundleActivator
methods are expected to complete in a
short period of time.
timeout
- time interval in milliseconds to wait. If zero, the method
will wait indefinately.
getService()
.
java.lang.InterruptedException
- If another thread has interrupted the
current thread.
java.lang.IllegalArgumentException
- If the value of timeout is negative.public ServiceReference[] getServiceReferences()
ServiceReference
objects for all
services being tracked by this ServiceTracker
object.
ServiceReference
objects or
null
if no service are being tracked.public ServiceReference getServiceReference()
ServiceReference
object for one of the services
being tracked by this ServiceTracker
object.
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
.
ServiceReference
object or null
if
no service is being tracked.public java.lang.Object getService(ServiceReference reference)
ServiceReference
object if the referenced service is being
tracked by this ServiceTracker
object.
reference
- Reference to the desired service.
null
if the service referenced
by the specified ServiceReference
object is not
being tracked.public java.lang.Object[] getServices()
ServiceTracker
object.
null
if no service are
being tracked.public java.lang.Object getService()
ServiceTracker
object.
If any services are being tracked, this method returns the result of
calling getService(getServiceReference())
.
null
if no service is being
tracked.public void remove(ServiceReference reference)
ServiceTracker
object.
The specified service will be removed from this
ServiceTracker
object. If the specified service was being
tracked then the ServiceTrackerCustomizer.removedService
method will be called for that service.
reference
- Reference to the service to be removed.public int size()
ServiceTracker
object.
public int getTrackingCount()
ServiceTracker
object.
The tracking count is initialized to 0 when this
ServiceTracker
object is opened. Every time a service is
added, modified or removed from this ServiceTracker
object
the tracking count is incremented.
The tracking count can be used to determine if this
ServiceTracker
object has added, modified or removed a
service by comparing a tracking count value previously collected with the
current tracking count value. If the value has not changed, then no
service has been added, modified or removed from this
ServiceTracker
object since the previous tracking count
was collected.
ServiceTracker
object
or -1 if this ServiceTracker
object is not open.
|
OSGi™ Service Platform Release 4 Version 4.1 |
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |