com.ibm.wsspi.kernel.service.utils

Class ConcurrentServiceReferenceSet<T>

  • java.lang.Object
    • com.ibm.wsspi.kernel.service.utils.ConcurrentServiceReferenceSet<T>


  • public class ConcurrentServiceReferenceSet<T>
    extends java.lang.Object
    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

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

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method and Description
      void 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> getHighestRankedReference()
      The ConcurrentReferenceSet is ordered by the usual service ranking rules: highest service.ranking then lowest (first) service.id.
      T getHighestRankedService()
      The ConcurrentReferenceSet is ordered by the usual service ranking rules: highest service.ranking then lowest (first) service.id.
      T getService(org.osgi.framework.ServiceReference<T> serviceReference)
      Find the provided reference in the set, and return the corresponding service.
      java.util.Iterator<T> getServices()
      Allocate and return an iterator: The iterator will return the service associated with each ServiceReference as it progresses.
      java.util.Iterator<ServiceAndServiceReferencePair<T>> getServicesWithReferences()
      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).
      java.lang.Iterable<org.osgi.framework.ServiceReference<T>> references() 
      boolean removeReference(org.osgi.framework.ServiceReference<T> reference)
      Removes the service reference from the set
      java.lang.Iterable<T> services() 
      java.lang.String toString() 
      • Methods inherited from class java.lang.Object

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

      • ConcurrentServiceReferenceSet

        public ConcurrentServiceReferenceSet(java.lang.String name)
        Create a new ConcurrentServiceReferenceSet 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)
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object
      • addReference

        public 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.
        Parameters:
        reference - ServiceReference for the target service
        Returns:
        true if this set already contained the service reference
      • removeReference

        public boolean removeReference(org.osgi.framework.ServiceReference<T> reference)
        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

        public T getService(org.osgi.framework.ServiceReference<T> serviceReference)
        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

        public T 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

        public org.osgi.framework.ServiceReference<T> 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

        public java.util.Iterator<T> 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

        public java.util.Iterator<ServiceAndServiceReferencePair<T>> 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

        public java.lang.Iterable<T> services()
      • references

        public java.lang.Iterable<org.osgi.framework.ServiceReference<T>> references()