Class ProviderLocator

java.lang.Object
org.apache.geronimo.osgi.locator.ProviderLocator

public class ProviderLocator extends Object
  • Field Details

    • context

      private static org.osgi.framework.BundleContext context
    • registryTracker

      private static Object registryTracker
  • Constructor Details

    • ProviderLocator

      private ProviderLocator()
  • Method Details

    • init

      public static void init(org.osgi.framework.BundleContext c)
      initialize the tracker statics for this bundle
      Parameters:
      c - The starup BundleContext.
    • destroy

      public static void destroy()
      Cleanup resources on bundle shutdown.
    • locate

      public static Class<?> locate(String providerId)
      Locate a class by its provider id indicator. .
      Parameters:
      providerId - The provider id (generally, a fully qualified class name).
      Returns:
      The Class corresponding to this provider id. Returns null if this is not registered or the indicated class can't be loaded.
    • locateAll

      public static List<Class<?>> locateAll(String providerId)
      Locate all class files that match a given factory id.
      Parameters:
      providerId - The target provider identifier.
      Returns:
      A List containing the class objects corresponding to the provider identifier. Returns an empty list if no matching classes can be located.
    • loadClass

      public static Class<?> loadClass(String className) throws ClassNotFoundException
      Utility class for locating a class with OSGi registry support. Uses the thread context classloader as part of the search order.
      Parameters:
      className - The name of the target class.
      Returns:
      The loaded class.
      Throws:
      ClassNotFoundException - Thrown if the class cannot be located.
    • loadClass

      public static Class<?> loadClass(String className, Class<?> contextClass) throws ClassNotFoundException
      Utility class for locating a class with OSGi registry support. Uses the thread context classloader as part of the search order.
      Parameters:
      className - The name of the target class.
      Returns:
      The loaded class.
      Throws:
      ClassNotFoundException - Thrown if the class cannot be located.
    • loadClass

      public static Class<?> loadClass(String className, Class<?> contextClass, ClassLoader loader) throws ClassNotFoundException
      Standardized utility method for performing class lookups with support for OSGi registry lookups.
      Parameters:
      className - The name of the target class.
      loader - An optional class loader.
      Returns:
      The loaded class
      Throws:
      ClassNotFoundException - Thrown if the class cannot be loaded.
    • getService

      public static Object getService(String iface, Class<?> contextClass, ClassLoader loader) throws Exception
      Get a single service instance that matches an interface definition.
      Parameters:
      iface - The name of the required interface.
      contextClass - The class requesting the lookup (used for class resolution).
      loader - A class loader to use for searching for service definitions and loading classes.
      Returns:
      The service instance, or null if no matching services can be found.
      Throws:
      Exception - Thrown for any classloading or exceptions thrown trying to instantiate a service instance.
    • getServiceClass

      public static Class<?> getServiceClass(String iface, Class<?> contextClass, ClassLoader loader) throws ClassNotFoundException
      Locate a service class that matches an interface definition.
      Parameters:
      iface - The name of the required interface.
      contextClass - The class requesting the lookup (used for class resolution).
      loader - A class loader to use for searching for service definitions and loading classes.
      Returns:
      The located class, or null if no matching services can be found.
      Throws:
      Exception - Thrown for any classloading exceptions thrown trying to load the class.
      ClassNotFoundException
    • getServices

      public static List<Object> getServices(String iface, Class<?> contextClass, ClassLoader loader) throws Exception
      Get a list of services that match a given interface name. This searches both the current class path and the global repository for matches.
      Parameters:
      iface - The name of the required interface.
      contextClass - The class requesting the lookup (used for class resolution).
      loader - A class loader to use for searching for service definitions and loading classes.
      Returns:
      A list of matching services. Returns an empty list if there are no matches.
      Throws:
      Exception - Thrown for any classloading or exceptions thrown trying to instantiate a service instance.
    • getServiceClasses

      public static List<Class<?>> getServiceClasses(String iface, Class<?> contextClass, ClassLoader loader) throws Exception
      Get a list of service class implementations that match an interface name. This searches both the current class path and the global repository for matches.
      Parameters:
      iface - The name of the required interface.
      contextClass - The class requesting the lookup (used for class resolution).
      loader - A class loader to use for searching for service definitions and loading classes.
      Returns:
      A list of matching provider classes. Returns an empty list if there are no matches.
      Throws:
      Exception - Thrown for any classloading exceptions thrown trying to load a provider class.
    • locateServiceClassName

      private static String locateServiceClassName(String iface, Class<?> contextClass, ClassLoader loader)
      Locate the first class name for a META-INF/services definition of a given class. The first matching provider is returned.
      Parameters:
      iface - The interface class name used for the match.
      loader - The classloader for locating resources.
      Returns:
      The mapped provider name, if found. Returns null if no mapping is located.
    • locateServiceClassName

      private static String locateServiceClassName(String iface, ClassLoader loader)
      Locate a classpath-define service mapping.
      Parameters:
      iface - The required interface name.
      loader - The ClassLoader instance to use to locate the service.
      Returns:
      The mapped class name, if one is found. Returns null if the mapping is not located.
    • locateServiceClass

      private static Class<?> locateServiceClass(String iface, Class<?> contextClass, ClassLoader loader) throws ClassNotFoundException
      Locate the first class for a META-INF/services definition of a given interface class. The first matching provider is returned.
      Parameters:
      iface - The interface class name used for the match.
      loader - The classloader for locating resources.
      Returns:
      The mapped provider class, if found. Returns null if no mapping is located.
      Throws:
      ClassNotFoundException
    • locateServiceClassNames

      private static Collection<String> locateServiceClassNames(String iface, Class<?> contextClass, ClassLoader loader)
      Locate all class names name for a META-INF/services definition of a given class.
      Parameters:
      iface - The interface class name used for the match.
      loader - The classloader for locating resources.
      Returns:
      The mapped provider name, if found. Returns null if no mapping is located.
    • locateServiceClassNames

      static void locateServiceClassNames(String iface, ClassLoader loader, Set names)
      Locate all class names name for a META-INF/services definition of a given class.
      Parameters:
      iface - The interface class name used for the match.
      loader - The classloader for locating resources.
    • locateServiceClasses

      private static Collection<Class<?>> locateServiceClasses(String iface, Class<?> contextClass, ClassLoader loader) throws ClassNotFoundException
      Locate all classes that map to a given provider class definition. This will search both the services directories, as well as the provider classes from the OSGi provider registry.
      Parameters:
      iface - The interface class name used for the match.
      loader - The classloader for locating resources.
      Returns:
      A list of all mapped classes, if found. Returns an empty list if no mappings are found.
      Throws:
      ClassNotFoundException
    • parseServiceDefinition

      private static List<String> parseServiceDefinition(URL u)
      Parse a definition file and return the names of all included implementation classes contained within the file.
      Parameters:
      u - The URL of the file
      Returns:
      A list of all matching classes. Returns an empty list if no matches are found.
    • lookupByJREPropertyFile

      public static String lookupByJREPropertyFile(String path, String property) throws IOException
      Perform a service class discovery by looking for a property in a target properties file located in the java.home directory.
      Parameters:
      path - The relative path to the desired properties file.
      property - The name of the required property.
      Returns:
      The value of the named property within the properties file. Returns null if the property doesn't exist or the properties file doesn't exist.
      Throws:
      IOException
    • getRegistry

      private static Object getRegistry()
      Retrieve the registry from the tracker if it is available, all without causing the interface class to load.
      Returns:
      The registry service instance, or null if it is not available for any reason.