Class ConcurrentServiceReferenceSetMap<K,V>
java.lang.Object
com.ibm.wsspi.kernel.service.utils.ConcurrentServiceReferenceSetMap<K,V>
This provides a map implementation for lazy-resolution of multiple services.
Use this class when you have frequent iteration with infrequent add/removal.
Entries are not stored in any particular order, but services with the same
key 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 ConcurrentServiceReferenceSetMap<K,V> 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<V> ref) {
K key;
serviceMap.putReference(key, ref);
}
protected void unsetReferenceName(ServiceReference<V> ref) {
K key;
serviceMap.removeReference(key, ref);
}
public Iterator<T> getServices() {
return serviceSet.getServices();
}
-
Constructor Summary
ConstructorsConstructorDescriptionCreate a new ConcurrentServiceReferenceMap for the named service. -
Method Summary
Modifier and TypeMethodDescriptionvoidactivate(org.osgi.service.component.ComponentContext context) voiddeactivate(org.osgi.service.component.ComponentContext context) Deactivates the map.getServices(K key) Retrieve an iterator for the services associated with the given key.
Services are returned in service rank order.Retrieve an iterator for service & service reference pairs for a given key
Services are returned in service rank order.
Service References are available to query properties etc.booleanisEmpty()Check if there are any registered/added service references: this will return true if all the known sets for all known keys report as empty.booleanputReference(K key, org.osgi.framework.ServiceReference<V> reference) Associates the reference with the key.booleanremoveReference(K key, org.osgi.framework.ServiceReference<V> reference) Removes the reference associated with the key.toString()
-
Constructor Details
-
ConcurrentServiceReferenceSetMap
Create a new ConcurrentServiceReferenceMap 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) Deactivates the map. Will trigger a release of all held services. -
toString
-
putReference
Associates the reference with the key.- Parameters:
key- Key associated with this referencereference- ServiceReference for the target service- Returns:
- true if this is replacing a previous (non-null) service reference
-
removeReference
Removes the reference associated with the key.- Parameters:
key- Key associated with this referencereference- ServiceReference for the target service- Returns:
- true if reference was unset (not previously replaced)
-
isEmpty
public boolean isEmpty()Check if there are any registered/added service references: this will return true if all the known sets for all known keys report as empty.- Returns:
- true if the known sets of registered service references are empty.
-
getServices
Retrieve an iterator for the services associated with the given key.
Services are returned in service rank order.- Parameters:
key- The key associated with the requested service- Returns:
- Iterator for services if any available, null otherwise.
-
getServicesWithReferences
Retrieve an iterator for service & service reference pairs for a given key
Services are returned in service rank order.
Service References are available to query properties etc.- Parameters:
key- The key associated with the requested service- Returns:
- Iterator supplying pairs of service & service reference if any services are available, null otherwise.
-