Package org.apache.catalina.core
Class DefaultInstanceManager
- java.lang.Object
-
- org.apache.catalina.core.DefaultInstanceManager
-
- All Implemented Interfaces:
InstanceManager
public class DefaultInstanceManager extends java.lang.Object implements InstanceManager
-
-
Field Summary
Fields Modifier and Type Field Description protected java.lang.ClassLoader
classLoader
protected java.lang.ClassLoader
containerClassLoader
protected boolean
ignoreAnnotations
protected boolean
privileged
protected static StringManager
sm
The string manager for this package.
-
Constructor Summary
Constructors Constructor Description DefaultInstanceManager(javax.naming.Context context, java.util.Map<java.lang.String,java.util.Map<java.lang.String,java.lang.String>> injectionMap, Context catalinaContext, java.lang.ClassLoader containerClassLoader)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
backgroundProcess()
Called by the component using the InstanceManager periodically to perform any regular maintenance that might be required.void
destroyInstance(java.lang.Object instance)
protected int
getAnnotationCacheSize()
Makes cache size available to unit tests.protected java.lang.Class<?>
loadClass(java.lang.String className, java.lang.ClassLoader classLoader)
protected java.lang.Class<?>
loadClassMaybePrivileged(java.lang.String className, java.lang.ClassLoader classLoader)
protected static void
lookupFieldResource(javax.naming.Context context, java.lang.Object instance, java.lang.reflect.Field field, java.lang.String name, java.lang.Class<?> clazz)
Inject resources in specified field.protected static void
lookupMethodResource(javax.naming.Context context, java.lang.Object instance, java.lang.reflect.Method method, java.lang.String name, java.lang.Class<?> clazz)
Inject resources in specified method.java.lang.Object
newInstance(java.lang.Class<?> clazz)
void
newInstance(java.lang.Object o)
java.lang.Object
newInstance(java.lang.String className)
java.lang.Object
newInstance(java.lang.String className, java.lang.ClassLoader classLoader)
protected void
populateAnnotationsCache(java.lang.Class<?> clazz, java.util.Map<java.lang.String,java.lang.String> injections)
Make sure that the annotations cache has been populated for the provided class.protected void
postConstruct(java.lang.Object instance, java.lang.Class<?> clazz)
Call postConstruct method on the specified instance recursively from deepest superclass to actual class.protected void
preDestroy(java.lang.Object instance, java.lang.Class<?> clazz)
Call preDestroy method on the specified instance recursively from deepest superclass to actual class.protected void
processAnnotations(java.lang.Object instance, java.util.Map<java.lang.String,java.lang.String> injections)
Inject resources in specified instance.
-
-
-
Field Detail
-
sm
protected static final StringManager sm
The string manager for this package.
-
classLoader
protected final java.lang.ClassLoader classLoader
-
containerClassLoader
protected final java.lang.ClassLoader containerClassLoader
-
privileged
protected final boolean privileged
-
ignoreAnnotations
protected final boolean ignoreAnnotations
-
-
Constructor Detail
-
DefaultInstanceManager
public DefaultInstanceManager(javax.naming.Context context, java.util.Map<java.lang.String,java.util.Map<java.lang.String,java.lang.String>> injectionMap, Context catalinaContext, java.lang.ClassLoader containerClassLoader)
-
-
Method Detail
-
newInstance
public java.lang.Object newInstance(java.lang.Class<?> clazz) throws java.lang.IllegalAccessException, java.lang.reflect.InvocationTargetException, javax.naming.NamingException, java.lang.InstantiationException, java.lang.IllegalArgumentException, java.lang.NoSuchMethodException, java.lang.SecurityException
- Specified by:
newInstance
in interfaceInstanceManager
- Throws:
java.lang.IllegalAccessException
java.lang.reflect.InvocationTargetException
javax.naming.NamingException
java.lang.InstantiationException
java.lang.IllegalArgumentException
java.lang.NoSuchMethodException
java.lang.SecurityException
-
newInstance
public java.lang.Object newInstance(java.lang.String className) throws java.lang.IllegalAccessException, java.lang.reflect.InvocationTargetException, javax.naming.NamingException, java.lang.InstantiationException, java.lang.ClassNotFoundException, java.lang.IllegalArgumentException, java.lang.NoSuchMethodException, java.lang.SecurityException
- Specified by:
newInstance
in interfaceInstanceManager
- Throws:
java.lang.IllegalAccessException
java.lang.reflect.InvocationTargetException
javax.naming.NamingException
java.lang.InstantiationException
java.lang.ClassNotFoundException
java.lang.IllegalArgumentException
java.lang.NoSuchMethodException
java.lang.SecurityException
-
newInstance
public java.lang.Object newInstance(java.lang.String className, java.lang.ClassLoader classLoader) throws java.lang.IllegalAccessException, javax.naming.NamingException, java.lang.reflect.InvocationTargetException, java.lang.InstantiationException, java.lang.ClassNotFoundException, java.lang.IllegalArgumentException, java.lang.NoSuchMethodException, java.lang.SecurityException
- Specified by:
newInstance
in interfaceInstanceManager
- Throws:
java.lang.IllegalAccessException
javax.naming.NamingException
java.lang.reflect.InvocationTargetException
java.lang.InstantiationException
java.lang.ClassNotFoundException
java.lang.IllegalArgumentException
java.lang.NoSuchMethodException
java.lang.SecurityException
-
newInstance
public void newInstance(java.lang.Object o) throws java.lang.IllegalAccessException, java.lang.reflect.InvocationTargetException, javax.naming.NamingException
- Specified by:
newInstance
in interfaceInstanceManager
- Throws:
java.lang.IllegalAccessException
java.lang.reflect.InvocationTargetException
javax.naming.NamingException
-
destroyInstance
public void destroyInstance(java.lang.Object instance) throws java.lang.IllegalAccessException, java.lang.reflect.InvocationTargetException
- Specified by:
destroyInstance
in interfaceInstanceManager
- Throws:
java.lang.IllegalAccessException
java.lang.reflect.InvocationTargetException
-
postConstruct
protected void postConstruct(java.lang.Object instance, java.lang.Class<?> clazz) throws java.lang.IllegalAccessException, java.lang.reflect.InvocationTargetException
Call postConstruct method on the specified instance recursively from deepest superclass to actual class.- Parameters:
instance
- object to call postconstruct methods onclazz
- (super) class to examine for postConstruct annotation.- Throws:
java.lang.IllegalAccessException
- if postConstruct method is inaccessible.java.lang.reflect.InvocationTargetException
- if call fails
-
preDestroy
protected void preDestroy(java.lang.Object instance, java.lang.Class<?> clazz) throws java.lang.IllegalAccessException, java.lang.reflect.InvocationTargetException
Call preDestroy method on the specified instance recursively from deepest superclass to actual class.- Parameters:
instance
- object to call preDestroy methods onclazz
- (super) class to examine for preDestroy annotation.- Throws:
java.lang.IllegalAccessException
- if preDestroy method is inaccessible.java.lang.reflect.InvocationTargetException
- if call fails
-
backgroundProcess
public void backgroundProcess()
Description copied from interface:InstanceManager
Called by the component using the InstanceManager periodically to perform any regular maintenance that might be required. By default, this method is a NO-OP.- Specified by:
backgroundProcess
in interfaceInstanceManager
-
populateAnnotationsCache
protected void populateAnnotationsCache(java.lang.Class<?> clazz, java.util.Map<java.lang.String,java.lang.String> injections) throws java.lang.IllegalAccessException, java.lang.reflect.InvocationTargetException, javax.naming.NamingException
Make sure that the annotations cache has been populated for the provided class.- Parameters:
clazz
- clazz to populate annotations forinjections
- map of injections for this class from xml deployment descriptor- Throws:
java.lang.IllegalAccessException
- if injection target is inaccessiblejavax.naming.NamingException
- if value cannot be looked up in jndijava.lang.reflect.InvocationTargetException
- if injection fails
-
processAnnotations
protected void processAnnotations(java.lang.Object instance, java.util.Map<java.lang.String,java.lang.String> injections) throws java.lang.IllegalAccessException, java.lang.reflect.InvocationTargetException, javax.naming.NamingException
Inject resources in specified instance.- Parameters:
instance
- instance to inject intoinjections
- map of injections for this class from xml deployment descriptor- Throws:
java.lang.IllegalAccessException
- if injection target is inaccessiblejavax.naming.NamingException
- if value cannot be looked up in jndijava.lang.reflect.InvocationTargetException
- if injection fails
-
getAnnotationCacheSize
protected int getAnnotationCacheSize()
Makes cache size available to unit tests.- Returns:
- the cache size
-
loadClassMaybePrivileged
protected java.lang.Class<?> loadClassMaybePrivileged(java.lang.String className, java.lang.ClassLoader classLoader) throws java.lang.ClassNotFoundException
- Throws:
java.lang.ClassNotFoundException
-
loadClass
protected java.lang.Class<?> loadClass(java.lang.String className, java.lang.ClassLoader classLoader) throws java.lang.ClassNotFoundException
- Throws:
java.lang.ClassNotFoundException
-
lookupFieldResource
protected static void lookupFieldResource(javax.naming.Context context, java.lang.Object instance, java.lang.reflect.Field field, java.lang.String name, java.lang.Class<?> clazz) throws javax.naming.NamingException, java.lang.IllegalAccessException
Inject resources in specified field.- Parameters:
context
- jndi context to extract value frominstance
- object to inject intofield
- field target for injectionname
- jndi name value is bound underclazz
- class annotation is defined in- Throws:
java.lang.IllegalAccessException
- if field is inaccessiblejavax.naming.NamingException
- if value is not accessible in naming context
-
lookupMethodResource
protected static void lookupMethodResource(javax.naming.Context context, java.lang.Object instance, java.lang.reflect.Method method, java.lang.String name, java.lang.Class<?> clazz) throws javax.naming.NamingException, java.lang.IllegalAccessException, java.lang.reflect.InvocationTargetException
Inject resources in specified method.- Parameters:
context
- jndi context to extract value frominstance
- object to inject intomethod
- field target for injectionname
- jndi name value is bound underclazz
- class annotation is defined in- Throws:
java.lang.IllegalAccessException
- if method is inaccessiblejavax.naming.NamingException
- if value is not accessible in naming contextjava.lang.reflect.InvocationTargetException
- if setter call fails
-
-