Class ConcurrentServiceReferenceSet<T>

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

public class ConcurrentServiceReferenceSet<T> extends 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&ltT&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&ltT&gt ref) {
  serviceSet.addReference(ref);
 }

 protected void unsetReferenceName(ServiceReference&ltT&gt ref) {
  serviceSet.removeReference(ref);
 }

 public Iterator&ltT&gt getReferenceName() {
  return serviceSet.getServices();
 }
 
  • Constructor Summary

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

    Modifier and Type
    Method
    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>
    The ConcurrentReferenceSet is ordered by the usual service ranking rules: highest service.ranking then lowest (first) service.id.
    The ConcurrentReferenceSet is ordered by the usual service ranking rules: highest service.ranking then lowest (first) service.id.
    getService(org.osgi.framework.ServiceReference<T> serviceReference)
    Find the provided reference in the set, and return the corresponding service.
    Allocate and return an iterator: The iterator will return the service associated with each ServiceReference as it progresses.
    Allocate and return an iterator: The iterator will return the service associated with each ServiceReference as it progresses.
    boolean
     
    boolean
    Check if there are any registered/added service references: this will return true if the set is empty (none available).
    Iterable<org.osgi.framework.ServiceReference<T>>
     
    boolean
    removeReference(org.osgi.framework.ServiceReference<T> reference)
    Removes the service reference from the set
     
     

    Methods inherited from class java.lang.Object

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

    • ConcurrentServiceReferenceSet

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

      public String toString()
      Overrides:
      toString in class 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 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 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 Iterable<T> services()
    • references

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