Class ServiceLocatorFactoryImpl


  • public class ServiceLocatorFactoryImpl
    extends ServiceLocatorFactory
    The implementation of the ServiceLocatorFactory that looks in the OSGi service registry or the META-INF/services for the implementation to use. Failing those things, it uses the standard default locator generator, which is found in auto-depends, which is the 99.9% case
    • Field Detail

      • DEBUG_SERVICE_LOCATOR_PROPERTY

        private static final java.lang.String DEBUG_SERVICE_LOCATOR_PROPERTY
        See Also:
        Constant Field Values
      • DEBUG_SERVICE_LOCATOR_LIFECYCLE

        private static final boolean DEBUG_SERVICE_LOCATOR_LIFECYCLE
      • sLock

        private static final java.lang.Object sLock
      • name_count

        private static int name_count
      • GENERATED_NAME_PREFIX

        private static final java.lang.String GENERATED_NAME_PREFIX
        See Also:
        Constant Field Values
      • lock

        private final java.lang.Object lock
      • serviceLocators

        private final java.util.HashMap<java.lang.String,​ServiceLocator> serviceLocators
    • Constructor Detail

      • ServiceLocatorFactoryImpl

        public ServiceLocatorFactoryImpl()
        This will create a new set of name to locator mappings
    • Method Detail

      • getOSGiSafeGenerators

        private static java.lang.Iterable<? extends ServiceLocatorGenerator> getOSGiSafeGenerators()
      • create

        public ServiceLocator create​(java.lang.String name)
        Description copied from class: ServiceLocatorFactory
        Creates (or finds) a ServiceLocator.

        If there is already a ServiceLocator with the given name then this method will return that locator.

        Specified by:
        create in class ServiceLocatorFactory
        Parameters:
        name - The name of this service locator. Passing a null name will result in a newly created service locator with a generated name and that will not be tracked by the system
        Returns:
        The created or found named ServiceLocator
      • find

        public ServiceLocator find​(java.lang.String name)
        Description copied from class: ServiceLocatorFactory
        Finds the ServiceLocator with this name
        Specified by:
        find in class ServiceLocatorFactory
        Parameters:
        name - May not be null, is the name of the ServiceLocator to find
        Returns:
        The ServiceLocator with the given name, or null if there is no ServiceLocator with that name
      • destroy

        public void destroy​(java.lang.String name)
        Description copied from class: ServiceLocatorFactory
        Removes the ServiceLocator with this name

        All services associated with this ServiceLocator will be shutdown

        Specified by:
        destroy in class ServiceLocatorFactory
        Parameters:
        name - The name of the ServiceLocator to destroy
      • destroy

        private void destroy​(java.lang.String name,
                             ServiceLocator locator)
      • destroy

        public void destroy​(ServiceLocator locator)
        Description copied from class: ServiceLocatorFactory
        Removes the given ServiceLocator

        All services associated with this ServiceLocator will be shutdown

        Specified by:
        destroy in class ServiceLocatorFactory
        Parameters:
        locator - The ServiceLocator to destroy. If null this will do nothing. If the ServiceLocator given was already destroyed this will do nothing
      • create

        public ServiceLocator create​(java.lang.String name,
                                     ServiceLocator parent)
        Description copied from class: ServiceLocatorFactory
        Creates or finds a ServiceLocator.

        If there is already a ServiceLocator with the given name then this method will return that ServiceLocator. The parent argument will be ignored in that case

        Specified by:
        create in class ServiceLocatorFactory
        Parameters:
        name - The name of this service locator. Passing a null name will result in a newly created service locator with a generated name and that will not be tracked by the system
        parent - The parent of this ServiceLocator. Services can be found in the parent (and all grand-parents). May be null if the returned ServiceLocator should not be parented
        Returns:
        The created or found named ServiceLocator
      • getGeneratedName

        private static java.lang.String getGeneratedName()
      • create

        public ServiceLocator create​(java.lang.String name,
                                     ServiceLocator parent,
                                     ServiceLocatorGenerator generator)
        Description copied from class: ServiceLocatorFactory
        Creates or finds a ServiceLocator.

        If there is already a ServiceLocator with the given name then this method will return that ServiceLocator. The parent argument will be ignored in that case. If a null name is given then a new ServiceLocator with a generated name will be returned.

        Specified by:
        create in class ServiceLocatorFactory
        Parameters:
        name - The name of this service locator. Passing a null name will result in a newly created service locator with a generated name and that will not be tracked by the system
        parent - The parent of this ServiceLocator. Services can be found in the parent (and all grand-parents). May be null if the returned ServiceLocator should not be parented
        generator - An implementation of the generator interface that can be used to provide an implementation of ServiceLocator. If null then the generator used will be discovered from the OSGi service registry or from META-INF/services
        Returns:
        The created or found named ServiceLocator
      • callListenerAdded

        private void callListenerAdded​(ServiceLocator added)
      • create

        public ServiceLocator create​(java.lang.String name,
                                     ServiceLocator parent,
                                     ServiceLocatorGenerator generator,
                                     ServiceLocatorFactory.CreatePolicy policy)
        Description copied from class: ServiceLocatorFactory
        Creates a ServiceLocator.

        If there is already a ServiceLocator with the given name then this method will honor the given CreatePolicy. return that ServiceLocator. The policies are

        • RETURN: Return the existing locator
        • DESTOY: Destroy the existing locator
        • ERROR: Throw an IllegalStateException exception
        Specified by:
        create in class ServiceLocatorFactory
        Parameters:
        name - The name of this service locator. Passing a null name will result in a newly created service locator with a generated name and that will not be tracked by the system
        parent - The parent of this ServiceLocator. Services can be found in the parent (and all grand-parents). May be null if the returned ServiceLocator should not be parented
        generator - An implementation of the generator interface that can be used to provide an implementation of ServiceLocator. If null then the generator used will be discovered from the OSGi service registry or from META-INF/services
        policy - The policy that should be used if there is an existing locator with the non-null name. If null the policy of RETURN will be used
        Returns:
        The created or found named ServiceLocator
      • addListener

        public void addListener​(ServiceLocatorListener listener)
        Description copied from class: ServiceLocatorFactory
        Adds a service listener to the unordered set of listeners that will be notified when named listeners are added or removed from the system. If this listener is already registered this method does nothing
        Specified by:
        addListener in class ServiceLocatorFactory
        Parameters:
        listener - The non-null listener to add to the system
      • removeListener

        public void removeListener​(ServiceLocatorListener listener)
        Description copied from class: ServiceLocatorFactory
        Removes a service listener from the set of listeners that are notified when named listeners are added or removed from the system
        Specified by:
        removeListener in class ServiceLocatorFactory
        Parameters:
        listener - The non-null listener to remove from the system