Class ConcurrentServiceReferenceSetMap<K,V>

java.lang.Object
com.ibm.wsspi.kernel.service.utils.ConcurrentServiceReferenceSetMap<K,V>

public class ConcurrentServiceReferenceSetMap<K,V> extends Object
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&ltK,V&gt serviceSet = new ConcurrentServiceReferenceSet&ltT&gt("referenceName");
 
 protected void activate(ComponentContext ctx) {
  serviceSet.activate(ctx);
 }
 
 protected void deactivate(ComponentContext ctx) {
  serviceSet.deactivate(ctx);
 }
 
 protected void setReferenceName(ServiceReference&ltV&gt ref) {
  K key;
  serviceMap.putReference(key, ref);
 }
 
 protected void unsetReferenceName(ServiceReference&ltV&gt ref) {
  K key;
  serviceMap.removeReference(key, ref);
 }
 
 public Iterator&ltT&gt getServices() {
  return serviceSet.getServices();
 }
 
  • Constructor Summary

    Constructors
    Constructor
    Description
    Create a new ConcurrentServiceReferenceMap for the named service.
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    activate(org.osgi.service.component.ComponentContext context)
     
    void
    deactivate(org.osgi.service.component.ComponentContext context)
    Deactivates the map.
    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
    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.
     

    Methods inherited from class java.lang.Object

    equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
  • Constructor Details

    • ConcurrentServiceReferenceSetMap

      public ConcurrentServiceReferenceSetMap(String name)
      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

      public String toString()
      Overrides:
      toString in class Object
    • putReference

      public boolean putReference(K key, org.osgi.framework.ServiceReference<V> reference)
      Associates the reference with the key.
      Parameters:
      key - Key associated with this reference
      reference - ServiceReference for the target service
      Returns:
      true if this is replacing a previous (non-null) service reference
    • removeReference

      public boolean removeReference(K key, org.osgi.framework.ServiceReference<V> reference)
      Removes the reference associated with the key.
      Parameters:
      key - Key associated with this reference
      reference - 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

      public Iterator<V> getServices(K key)
      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

      public Iterator<ServiceAndServiceReferencePair<V>> getServicesWithReferences(K key)
      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.