Package org.apache.geronimo.osgi.locator
Class ProviderLocator
java.lang.Object
org.apache.geronimo.osgi.locator.ProviderLocator
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate static org.osgi.framework.BundleContext
private static Object
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic void
destroy()
Cleanup resources on bundle shutdown.private static Object
Retrieve the registry from the tracker if it is available, all without causing the interface class to load.static Object
getService
(String iface, Class<?> contextClass, ClassLoader loader) Get a single service instance that matches an interface definition.static Class
<?> getServiceClass
(String iface, Class<?> contextClass, ClassLoader loader) Locate a service class that matches an interface definition.getServiceClasses
(String iface, Class<?> contextClass, ClassLoader loader) Get a list of service class implementations that match an interface name.getServices
(String iface, Class<?> contextClass, ClassLoader loader) Get a list of services that match a given interface name.static void
init
(org.osgi.framework.BundleContext c) initialize the tracker statics for this bundlestatic Class
<?> Utility class for locating a class with OSGi registry support.static Class
<?> Utility class for locating a class with OSGi registry support.static Class
<?> loadClass
(String className, Class<?> contextClass, ClassLoader loader) Standardized utility method for performing class lookups with support for OSGi registry lookups.static Class
<?> Locate a class by its provider id indicator.Locate all class files that match a given factory id.private static Class
<?> locateServiceClass
(String iface, Class<?> contextClass, ClassLoader loader) Locate the first class for a META-INF/services definition of a given interface class.private static Collection
<Class<?>> locateServiceClasses
(String iface, Class<?> contextClass, ClassLoader loader) Locate all classes that map to a given provider class definition.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.private static String
locateServiceClassName
(String iface, ClassLoader loader) Locate a classpath-define service mapping.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.(package private) static void
locateServiceClassNames
(String iface, ClassLoader loader, Set names) Locate all class names name for a META-INF/services definition of a given class.static String
lookupByJREPropertyFile
(String path, String property) Perform a service class discovery by looking for a property in a target properties file located in the java.home directory.Parse a definition file and return the names of all included implementation classes contained within the file.
-
Field Details
-
context
private static org.osgi.framework.BundleContext context -
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
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
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
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
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
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
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
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
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.
-