| java.lang.Object org.apache.commons.discovery.tools.DiscoverClass
DiscoverClass | public class DiscoverClass (Code) | | Discover class that implements a given service interface,
with discovery and configuration features similar to that employed
by standard Java APIs such as JAXP.
In the context of this package, a service interface is defined by a
Service Provider Interface (SPI). The SPI is expressed as a Java interface,
abstract class, or (base) class that defines an expected programming
interface.
DiscoverClass provides the find methods for locating a
class that implements a service interface (SPI). Each form of
find varies slightly, but they all perform the same basic
function.
The DiscoverClass.find methods proceed as follows:
-
Get the name of an implementation class. The name is the first
non-null value obtained from the following resources:
-
If the name of the implementation class is non-null, load that class.
The class loaded is the first class loaded by the following sequence
of class loaders:
- Thread Context Class Loader
- DiscoverSingleton's Caller's Class Loader
- SPI's Class Loader
- DiscoverSingleton's (this class or wrapper) Class Loader
- System Class Loader
An exception is thrown if the class cannot be loaded.
-
If the name of the implementation class is null, AND the default
implementation class name (
defaultImpl ) is null,
then an exception is thrown.
-
If the name of the implementation class is null, AND the default
implementation class (
defaultImpl ) is non-null,
then load the default implementation class. The class loaded is the
first class loaded by the following sequence of class loaders:
- SPI's Class Loader
- DiscoverSingleton's (this class or wrapper) Class Loader
- System Class Loader
This limits the scope in which the default class loader can be found
to the SPI, DiscoverSingleton, and System class loaders. The assumption here
is that the default implementation is closely associated with the SPI
or system, and is not defined in the user's application space.
An exception is thrown if the class cannot be loaded.
-
Verify that the loaded class implements the SPI: an exception is thrown
if the loaded class does not implement the SPI.
IMPLEMENTATION NOTE - This implementation is modelled
after the SAXParserFactory and DocumentBuilderFactory implementations
(corresponding to the JAXP pluggability APIs) found in Apache Xerces.
author: Richard A. Sitze author: Craig R. McClanahan author: Costin Manolache version: $Revision: 480374 $ $Date: 2006-11-28 19:33:25 -0800 (Tue, 28 Nov 2006) $ |
Constructor Summary | |
public | DiscoverClass() Create a class instance with dynamic environment
(thread context class loader is determined on each call). | public | DiscoverClass(ClassLoaders classLoaders) Create a class instance with dynamic environment
(thread context class loader is determined on each call). |
Method Summary | |
public static String[] | discoverClassNames(SPInterface spi, Properties properties) Discover names of SPI implementation Classes from properties.
The names are the non-null values, in order, obtained from the following
resources:
- ManagedProperty.getProperty(SPI.class.getName());
- properties.getProperty(SPI.class.getName());
Parameters: properties - Properties that may define the implementationclass name(s). | public Class | find(Class spiClass) Find class implementing SPI.
Parameters: spiClass - Service Provider Interface Class. | public Class | find(Class spiClass, Properties properties) Find class implementing SPI.
Parameters: spiClass - Service Provider Interface Class. Parameters: properties - Used to determine name of SPI implementation. | public Class | find(Class spiClass, String defaultImpl) Find class implementing SPI.
Parameters: spiClass - Service Provider Interface Class. Parameters: defaultImpl - Default implementation name. | public Class | find(Class spiClass, Properties properties, String defaultImpl) Find class implementing SPI.
Parameters: spiClass - Service Provider Interface Class. Parameters: properties - Used to determine name of SPI implementation,. Parameters: defaultImpl - Default implementation class. | public Class | find(Class spiClass, String propertiesFileName, String defaultImpl) Find class implementing SPI.
Parameters: spiClass - Service Provider Interface Class. Parameters: propertiesFileName - Used to determine name of SPI implementation,. Parameters: defaultImpl - Default implementation class. | public static Class | find(ClassLoaders loaders, SPInterface spi, PropertiesHolder properties, DefaultClassHolder defaultImpl) Find class implementing SPI.
Parameters: spi - Service Provider Interface Class. Parameters: properties - Used to determine name of SPI implementation,. Parameters: defaultImpl - Default implementation class. | public ClassLoaders | getClassLoaders(Class spiClass) | public static String | getManagedProperty(String propertyName) Load the class whose name is given by the value of a (Managed)
System Property. | public Object | newInstance(Class spiClass) Create new instance of class implementing SPI.
Parameters: spiClass - Service Provider Interface Class. | public Object | newInstance(Class spiClass, Properties properties) Create new instance of class implementing SPI.
Parameters: spiClass - Service Provider Interface Class. Parameters: properties - Used to determine name of SPI implementation,and passed to implementation.init() method ifimplementation implements Service interface. | public Object | newInstance(Class spiClass, String defaultImpl) Create new instance of class implementing SPI.
Parameters: spiClass - Service Provider Interface Class. Parameters: defaultImpl - Default implementation. | public Object | newInstance(Class spiClass, Properties properties, String defaultImpl) Create new instance of class implementing SPI.
Parameters: spiClass - Service Provider Interface Class. Parameters: properties - Used to determine name of SPI implementation,and passed to implementation.init() method ifimplementation implements Service interface. Parameters: defaultImpl - Default implementation. | public Object | newInstance(Class spiClass, String propertiesFileName, String defaultImpl) Create new instance of class implementing SPI.
Parameters: spiClass - Service Provider Interface Class. Parameters: propertiesFileName - Used to determine name of SPI implementation,and passed to implementation.init() method ifimplementation implements Service interface. Parameters: defaultImpl - Default implementation. | public static Object | newInstance(ClassLoaders loaders, SPInterface spi, PropertiesHolder properties, DefaultClassHolder defaultImpl) Create new instance of class implementing SPI.
Parameters: spi - Service Provider Interface Class. Parameters: properties - Used to determine name of SPI implementation,and passed to implementation.init() method ifimplementation implements Service interface. Parameters: defaultImpl - Default implementation. |
nullProperties | final public static PropertiesHolder nullProperties(Code) | | Readable placeholder for a null value.
|
DiscoverClass | public DiscoverClass()(Code) | | Create a class instance with dynamic environment
(thread context class loader is determined on each call).
Dynamically construct class loaders on each call.
|
DiscoverClass | public DiscoverClass(ClassLoaders classLoaders)(Code) | | Create a class instance with dynamic environment
(thread context class loader is determined on each call).
Cache static list of class loaders for each call.
|
discoverClassNames | public static String[] discoverClassNames(SPInterface spi, Properties properties)(Code) | | Discover names of SPI implementation Classes from properties.
The names are the non-null values, in order, obtained from the following
resources:
- ManagedProperty.getProperty(SPI.class.getName());
- properties.getProperty(SPI.class.getName());
Parameters: properties - Properties that may define the implementationclass name(s). String[] Name of classes implementing the SPI. exception: DiscoveryException - Thrown if the name of a class implementingthe SPI cannot be found. |
find | public Class find(Class spiClass) throws DiscoveryException(Code) | | Find class implementing SPI.
Parameters: spiClass - Service Provider Interface Class. Class implementing the SPI. exception: DiscoveryException - Thrown if the name of a class implementingthe SPI cannot be found, if the class cannot be loaded, or ifthe resulting class does not implement (or extend) the SPI. |
find | public Class find(Class spiClass, Properties properties) throws DiscoveryException(Code) | | Find class implementing SPI.
Parameters: spiClass - Service Provider Interface Class. Parameters: properties - Used to determine name of SPI implementation. Class implementing the SPI. exception: DiscoveryException - Thrown if the name of a class implementingthe SPI cannot be found, if the class cannot be loaded, or ifthe resulting class does not implement (or extend) the SPI. |
find | public Class find(Class spiClass, String defaultImpl) throws DiscoveryException(Code) | | Find class implementing SPI.
Parameters: spiClass - Service Provider Interface Class. Parameters: defaultImpl - Default implementation name. Class implementing the SPI. exception: DiscoveryException - Thrown if the name of a class implementingthe SPI cannot be found, if the class cannot be loaded, or ifthe resulting class does not implement (or extend) the SPI. |
find | public Class find(Class spiClass, Properties properties, String defaultImpl) throws DiscoveryException(Code) | | Find class implementing SPI.
Parameters: spiClass - Service Provider Interface Class. Parameters: properties - Used to determine name of SPI implementation,. Parameters: defaultImpl - Default implementation class. Class implementing the SPI. exception: DiscoveryException - Thrown if the name of a class implementingthe SPI cannot be found, if the class cannot be loaded, or ifthe resulting class does not implement (or extend) the SPI. |
find | public Class find(Class spiClass, String propertiesFileName, String defaultImpl) throws DiscoveryException(Code) | | Find class implementing SPI.
Parameters: spiClass - Service Provider Interface Class. Parameters: propertiesFileName - Used to determine name of SPI implementation,. Parameters: defaultImpl - Default implementation class. Class implementing the SPI. exception: DiscoveryException - Thrown if the name of a class implementingthe SPI cannot be found, if the class cannot be loaded, or ifthe resulting class does not implement (or extend) the SPI. |
find | public static Class find(ClassLoaders loaders, SPInterface spi, PropertiesHolder properties, DefaultClassHolder defaultImpl) throws DiscoveryException(Code) | | Find class implementing SPI.
Parameters: spi - Service Provider Interface Class. Parameters: properties - Used to determine name of SPI implementation,. Parameters: defaultImpl - Default implementation class. Class implementing the SPI. exception: DiscoveryException - Thrown if the name of a class implementingthe SPI cannot be found, if the class cannot be loaded, or ifthe resulting class does not implement (or extend) the SPI. |
getManagedProperty | public static String getManagedProperty(String propertyName)(Code) | | Load the class whose name is given by the value of a (Managed)
System Property.
See Also: ManagedProperties Parameters: propertName - the name of the system property whose value isthe name of the class to load. |
newInstance | public Object newInstance(Class spiClass, String propertiesFileName, String defaultImpl) throws DiscoveryException, InstantiationException, IllegalAccessException, NoSuchMethodException, InvocationTargetException(Code) | | Create new instance of class implementing SPI.
Parameters: spiClass - Service Provider Interface Class. Parameters: propertiesFileName - Used to determine name of SPI implementation,and passed to implementation.init() method ifimplementation implements Service interface. Parameters: defaultImpl - Default implementation. Instance of a class implementing the SPI. exception: DiscoveryException - Thrown if the name of a class implementingthe SPI cannot be found, if the class cannot be loaded andinstantiated, or if the resulting class does not implement(or extend) the SPI. |
newInstance | public static Object newInstance(ClassLoaders loaders, SPInterface spi, PropertiesHolder properties, DefaultClassHolder defaultImpl) throws DiscoveryException, InstantiationException, IllegalAccessException, NoSuchMethodException, InvocationTargetException(Code) | | Create new instance of class implementing SPI.
Parameters: spi - Service Provider Interface Class. Parameters: properties - Used to determine name of SPI implementation,and passed to implementation.init() method ifimplementation implements Service interface. Parameters: defaultImpl - Default implementation. Instance of a class implementing the SPI. exception: DiscoveryException - Thrown if the name of a class implementingthe SPI cannot be found, if the class cannot be loaded andinstantiated, or if the resulting class does not implement(or extend) the SPI. |
|
|