Class ConcurrentServiceReferenceSet<T>
java.lang.Object
com.ibm.wsspi.kernel.service.utils.ConcurrentServiceReferenceSet<T>
This provides a simple set implementation for lazy-resolution of services.
Use this class when you have frequent iteration with infrequent add/removal.
Services are stored in reverse order of
ServiceReference.compareTo(java.lang.Object)
: highest
service.ranking then lowest (first) service.id.
Usage (following OSGi DS naming conventions/patterns):
private final ConcurrentServiceReferenceSet<T> serviceSet = new ConcurrentServiceReferenceSet<T>("referenceName");
protected void activate(ComponentContext ctx) {
serviceSet.activate(ctx);
}
protected void deactivate(ComponentContext ctx) {
serviceSet.deactivate(ctx);
}
protected void setReferenceName(ServiceReference<T> ref) {
serviceSet.addReference(ref);
}
protected void unsetReferenceName(ServiceReference<T> ref) {
serviceSet.removeReference(ref);
}
public Iterator<T> getReferenceName() {
return serviceSet.getServices();
}
-
Constructor Summary
ConstructorDescriptionCreate a new ConcurrentServiceReferenceSet for the named service. -
Method Summary
Modifier and TypeMethodDescriptionvoid
activate
(org.osgi.service.component.ComponentContext context) boolean
addReference
(org.osgi.framework.ServiceReference<T> reference) Adds the service reference to the set, or notifies the set that the service ranking for the reference might have been updated.void
deactivate
(org.osgi.service.component.ComponentContext context) org.osgi.framework.ServiceReference<T>
The ConcurrentReferenceSet is ordered by the usual service ranking rules: highest service.ranking then lowest (first) service.id.The ConcurrentReferenceSet is ordered by the usual service ranking rules: highest service.ranking then lowest (first) service.id.getService
(org.osgi.framework.ServiceReference<T> serviceReference) Find the provided reference in the set, and return the corresponding service.Allocate and return an iterator: The iterator will return the service associated with each ServiceReference as it progresses.Allocate and return an iterator: The iterator will return the service associated with each ServiceReference as it progresses.boolean
isActive()
boolean
isEmpty()
Check if there are any registered/added service references: this will return true if the set is empty (none available).boolean
removeReference
(org.osgi.framework.ServiceReference<T> reference) Removes the service reference from the setservices()
toString()
-
Constructor Details
-
ConcurrentServiceReferenceSet
Create a new ConcurrentServiceReferenceSet for the named service. e.g. from bnd.bnd: referenceName=.... or from component.xml: <reference name="referenceName".... >- Parameters:
name
- Name of DS reference
-
-
Method Details
-
activate
public void activate(org.osgi.service.component.ComponentContext context) -
deactivate
public void deactivate(org.osgi.service.component.ComponentContext context) -
toString
-
addReference
Adds the service reference to the set, or notifies the set that the service ranking for the reference might have been updated.- Parameters:
reference
- ServiceReference for the target service- Returns:
- true if this set already contained the service reference
-
removeReference
Removes the service reference from the set- Parameters:
reference
- ServiceReference associated with service to be unset- Returns:
- true if this set contained the service reference
-
isEmpty
public boolean isEmpty()Check if there are any registered/added service references: this will return true if the set is empty (none available). If the set is not empty, the services will only be resolvable if there is a viable component context.- Returns:
- true if the list of registered service references is empty.
-
isActive
public boolean isActive() -
getService
Find the provided reference in the set, and return the corresponding service. Subject to the same restrictions/behavior as getServices.- Parameters:
serviceReference
- Service reference to find in the set- Returns:
- service associated with service reference, or null if the service could not be located.
-
getHighestRankedService
The ConcurrentReferenceSet is ordered by the usual service ranking rules: highest service.ranking then lowest (first) service.id.- Returns:
- The "first" service according to the ranking
-
getHighestRankedReference
The ConcurrentReferenceSet is ordered by the usual service ranking rules: highest service.ranking then lowest (first) service.id.- Returns:
- The "first" service reference according to the ranking
-
getServices
Allocate and return an iterator: The iterator will return the service associated with each ServiceReference as it progresses. Creation of the iterator does not eagerly resolve services: resolution is done only once per service reference, and only when "next" would retrieve that service.- Returns:
-
getServicesWithReferences
Allocate and return an iterator: The iterator will return the service associated with each ServiceReference as it progresses. Creation of the iterator does not eagerly resolve services: resolution is done only once per service reference, and only when "next" would retrieve that service.- Returns:
-
services
-
references
-