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
ConstructorDescriptionCreate a new ConcurrentServiceReferenceMap for the named service. -
Method Summary
Modifier and TypeMethodDescriptionvoid
activate
(org.osgi.service.component.ComponentContext context) void
deactivate
(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.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.boolean
putReference
(K key, org.osgi.framework.ServiceReference<V> reference) Associates the reference with the key.boolean
removeReference
(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.
-