Class ConcurrentServiceReferenceSetMap<K,​V>


  • public class ConcurrentServiceReferenceSetMap<K,​V>
    extends java.lang.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<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

      Constructors 
      Constructor Description
      ConcurrentServiceReferenceSetMap​(java.lang.String name)
      Create a new ConcurrentServiceReferenceMap for the named service.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void activate​(org.osgi.service.component.ComponentContext context)  
      void deactivate​(org.osgi.service.component.ComponentContext context)
      Deactivates the map.
      java.util.Iterator<V> getServices​(K key)
      Retrieve an iterator for the services associated with the given key.
      Services are returned in service rank order.
      java.util.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.
      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.
      java.lang.String toString()  
      • Methods inherited from class java.lang.Object

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

      • ConcurrentServiceReferenceSetMap

        public ConcurrentServiceReferenceSetMap​(java.lang.String name)
        Create a new ConcurrentServiceReferenceMap for the named service. e.g. from bnd.bnd: referenceName=.... or from component.xml:
        Parameters:
        name - Name of DS reference
    • Method Detail

      • 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 java.lang.String toString()
        Overrides:
        toString in class java.lang.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 java.util.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 java.util.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.