Class ServiceTracker<S,T,U extends org.osgi.framework.ServiceEvent>
- Type Parameters:
S
-T
-
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescription(package private) class
Abstract class to track items.private class
Inner class which subclasses AbstractTracked. -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate boolean
whether the DependencyManager is getting the service immediately.private String
protected final org.osgi.framework.BundleContext
The Bundle Context used by thisServiceTracker
.(package private) final ServiceTrackerCustomizer
<S, T, U> TheServiceTrackerCustomizer
for this tracker.(package private) static final boolean
protected final org.osgi.framework.Filter
The Filter used by thisServiceTracker
which specifies the search criteria for the services to track.private ExtendedServiceListenerContext
<U> (package private) final String
Filter string for use when adding the ServiceListener.private ServiceTracker<S,
T, U>.Tracked Tracked services:ServiceReference
-> customized Object andServiceListener
object -
Constructor Summary
ConstructorsConstructorDescriptionServiceTracker
(org.osgi.framework.BundleContext context, ServiceTrackerCustomizer<S, T, U> customizer, boolean initialActive, ExtendedServiceListenerContext<U> bundleComponentActivator, org.osgi.framework.Filter eventFilter, String classFilterString, String initialReferenceFilterString) Create aServiceTracker
on the specifiedFilter
object. -
Method Summary
Modifier and TypeMethodDescriptionaddingService
(org.osgi.framework.ServiceReference<S> reference, int trackingCount) Default implementation of theServiceTrackerCustomizer.addingService
method.close
(AtomicInteger trackingCount) Close thisServiceTracker
.void
completeClose
(Map<org.osgi.framework.ServiceReference<S>, T> toUntrack) (package private) void
private org.osgi.framework.ServiceReference<S>[]
getInitialReferences
(String className, String filterString) Returns the list of initialServiceReference
s that will be tracked by thisServiceTracker
.getService
(org.osgi.framework.ServiceReference<S> reference) Returns the service object for the specifiedServiceReference
if the specified referenced service is being tracked by thisServiceTracker
.int
org.osgi.framework.ServiceReference<S>[]
Return an array ofServiceReference
s for all services being tracked by thisServiceTracker
.Object[]
Return an array of service objects for all services being tracked by thisServiceTracker
.T[]
getServices
(T[] array) Return an array of service objects for all services being tracked by thisServiceTracker
.getTracked
(Boolean activate, AtomicInteger trackingCount) Return aSortedMap
of theServiceReference
s and service objects for all services being tracked by thisServiceTracker
.int
Returns the tracking count for thisServiceTracker
.boolean
isActive()
boolean
isEmpty()
Return if thisServiceTracker
is empty.(package private) void
modified()
Called by the Tracked object whenever the set of tracked services is modified.void
modifiedService
(org.osgi.framework.ServiceReference<S> reference, T service, int trackingCount) Default implementation of theServiceTrackerCustomizer.modifiedService
method.void
open
(boolean trackAllServices, AtomicInteger trackingCount) Open thisServiceTracker
and begin tracking services.void
open
(AtomicInteger trackingCount) Open thisServiceTracker
and begin tracking services.void
Remove a service from thisServiceTracker
.void
removedService
(org.osgi.framework.ServiceReference<S> reference, T service, int trackingCount) Default implementation of theServiceTrackerCustomizer.removedService
method.int
size()
Return the number of services being tracked by thisServiceTracker
.tracked()
Accessor method for the current Tracked object.
-
Field Details
-
DEBUG
static final boolean DEBUG- See Also:
-
context
protected final org.osgi.framework.BundleContext contextThe Bundle Context used by thisServiceTracker
. -
eventFilter
protected final org.osgi.framework.Filter eventFilterThe Filter used by thisServiceTracker
which specifies the search criteria for the services to track.- Since:
- 1.1
-
customizer
TheServiceTrackerCustomizer
for this tracker. -
initialReferenceFilterString
Filter string for use when adding the ServiceListener. If this field is set, then certain optimizations can be taken since we don't have a user supplied filter. -
tracked
Tracked services:ServiceReference
-> customized Object andServiceListener
object -
active
private boolean activewhether the DependencyManager is getting the service immediately. -
extendedServiceListenerContext
private ExtendedServiceListenerContext<U extends org.osgi.framework.ServiceEvent> extendedServiceListenerContext -
classFilterString
-
-
Constructor Details
-
ServiceTracker
public ServiceTracker(org.osgi.framework.BundleContext context, ServiceTrackerCustomizer<S, T, U> customizer, boolean initialActive, ExtendedServiceListenerContext<U> bundleComponentActivator, org.osgi.framework.Filter eventFilter, String classFilterString, String initialReferenceFilterString) Create aServiceTracker
on the specifiedFilter
object.Services which match the specified
Filter
object will be tracked by thisServiceTracker
.- Parameters:
context
- TheBundleContext
against which the tracking is done.customizer
- The customizer object to call when services are added, modified, or removed in thisServiceTracker
. If customizer is null, then thisServiceTracker
will be used as theServiceTrackerCustomizer
and thisServiceTracker
will call theServiceTrackerCustomizer
methods on itself.initialActive
- Initial active state of the tracker.bundleComponentActivator
- TODOeventFilter
- TheFilter
to select the services to be tracked.classFilterString
- TODOinitialReferenceFilterString
- TODO- Since:
- 1.1
-
-
Method Details
-
tracked
Accessor method for the current Tracked object. This method is only intended to be used by the unsynchronized methods which do not modify the tracked field.- Returns:
- The current Tracked object.
-
open
Open thisServiceTracker
and begin tracking services.This implementation calls
open(false)
.- Parameters:
trackingCount
-- Throws:
IllegalStateException
- If theBundleContext
with which thisServiceTracker
was created is no longer valid.- See Also:
-
open
Open thisServiceTracker
and begin tracking services.Services which match the search criteria specified when this
ServiceTracker
was created are now tracked by thisServiceTracker
.- Parameters:
trackAllServices
- Iftrue
, then thisServiceTracker
will track all matching services regardless of class loader accessibility. Iffalse
, then thisServiceTracker
will only track matching services which are class loader accessible to the bundle whoseBundleContext
is used by thisServiceTracker
.trackingCount
-- Throws:
IllegalStateException
- If theBundleContext
with which thisServiceTracker
was created is no longer valid.- Since:
- 1.3
-
getInitialReferences
private org.osgi.framework.ServiceReference<S>[] getInitialReferences(String className, String filterString) throws org.osgi.framework.InvalidSyntaxException Returns the list of initialServiceReference
s that will be tracked by thisServiceTracker
.- Parameters:
className
- The class name with which the service was registered, ornull
for all services.filterString
- The filter criteria ornull
for all services.- Returns:
- The list of initial
ServiceReference
s. - Throws:
org.osgi.framework.InvalidSyntaxException
- If the specified filterString has an invalid syntax.
-
close
Close thisServiceTracker
.This method should be called when this
ServiceTracker
should end the tracking of services.This implementation calls
getServiceReferences()
to get the list of tracked services to remove.- Parameters:
trackingCount
-
-
completeClose
-
addingService
Default implementation of theServiceTrackerCustomizer.addingService
method.This method is only called when this
ServiceTracker
has been constructed with anull ServiceTrackerCustomizer
argument.This implementation returns the result of calling
getService
on theBundleContext
with which thisServiceTracker
was created passing the specifiedServiceReference
.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
to unget the service.- Parameters:
reference
- The reference to the service being added to thisServiceTracker
.- Returns:
- The service object to be tracked for the service added to this
ServiceTracker
.
-
modifiedService
public void modifiedService(org.osgi.framework.ServiceReference<S> reference, T service, int trackingCount) Default implementation of theServiceTrackerCustomizer.modifiedService
method.This method is only called when this
ServiceTracker
has been constructed with anull ServiceTrackerCustomizer
argument.This implementation does nothing.
- Parameters:
reference
- The reference to modified service.service
- The service object for the modified service.- See Also:
-
removedService
public void removedService(org.osgi.framework.ServiceReference<S> reference, T service, int trackingCount) Default implementation of theServiceTrackerCustomizer.removedService
method.This method is only called when this
ServiceTracker
has been constructed with anull ServiceTrackerCustomizer
argument.This implementation calls
ungetService
, on theBundleContext
with which thisServiceTracker
was created, passing the specifiedServiceReference
.This method can be overridden in a subclass. If the default implementation of
addingService
method was used, this method must unget the service.- Parameters:
reference
- The reference to removed service.service
- The service object for the removed service.- See Also:
-
getServiceReferences
Return an array ofServiceReference
s for all services being tracked by thisServiceTracker
.- Returns:
- Array of
ServiceReference
s ornull
if no services are being tracked.
-
getService
Returns the service object for the specifiedServiceReference
if the specified referenced service is being tracked by thisServiceTracker
.- Parameters:
reference
- The reference to the desired service.- Returns:
- A service object or
null
if the service referenced by the specifiedServiceReference
is not being tracked.
-
getServices
Return an array of service objects for all services being tracked by thisServiceTracker
.This implementation calls
getServiceReferences()
to get the list of references for the tracked services and then callsgetService(ServiceReference)
for each reference to get the tracked service object.- Returns:
- An array of service objects or
null
if no services are being tracked.
-
remove
Remove a service from thisServiceTracker
. The specified service will be removed from thisServiceTracker
. If the specified service was being tracked then theServiceTrackerCustomizer.removedService
method will be called for that service.- Parameters:
reference
- The reference to the service to be removed.
-
size
public int size()Return the number of services being tracked by thisServiceTracker
.- Returns:
- The number of services being tracked.
-
getTrackingCount
public int getTrackingCount()Returns the tracking count for thisServiceTracker
. The tracking count is initialized to 0 when thisServiceTracker
is opened. Every time a service is added, modified or removed from thisServiceTracker
, the tracking count is incremented.The tracking count can be used to determine if this
ServiceTracker
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 thisServiceTracker
since the previous tracking count was collected.- Returns:
- The tracking count for this
ServiceTracker
or -1 if thisServiceTracker
is not open. - Since:
- 1.2
-
modified
void modified()Called by the Tracked object whenever the set of tracked services is modified. Clears the cache. -
getTracked
public SortedMap<org.osgi.framework.ServiceReference<S>,T> getTracked(Boolean activate, AtomicInteger trackingCount) Return aSortedMap
of theServiceReference
s and service objects for all services being tracked by thisServiceTracker
. The map is sorted in reverse natural order ofServiceReference
. That is, the first entry is the service with the highest ranking and the lowest service id.- Parameters:
activate
-trackingCount
-- Returns:
- A
SortedMap
with theServiceReference
s and service objects for all services being tracked by thisServiceTracker
. If no services are being tracked, then the returned map is empty. - Since:
- 1.5
-
deactivate
void deactivate() -
isEmpty
public boolean isEmpty()Return if thisServiceTracker
is empty.- Returns:
true
if thisServiceTracker
is not tracking any services.- Since:
- 1.5
-
getServiceCount
public int getServiceCount() -
isActive
public boolean isActive() -
getServices
Return an array of service objects for all services being tracked by thisServiceTracker
. The runtime type of the returned array is that of the specified array.This implementation calls
getServiceReferences()
to get the list of references for the tracked services and then callsgetService(ServiceReference)
for each reference to get the tracked service object.- Parameters:
array
- An array into which the tracked service objects will be stored, if the array is large enough.- Returns:
- An array of service objects being tracked. If the specified array
is large enough to hold the result, then the specified array is
returned. If the specified array is longer then necessary to hold
the result, the array element after the last service object is
set to
null
. If the specified array is not large enough to hold the result, a new array is created and returned. - Since:
- 1.5
-