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
`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
`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
`void` `backgroundProcess()`
`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.

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### 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 interface `InstanceManager`
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 interface `InstanceManager`
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 interface `InstanceManager`
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 interface `InstanceManager`
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 interface `InstanceManager`
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 on
  `clazz` - (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 on
  `clazz` - (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()

#### 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 for
  `injections` - map of injections for this class from xml deployment descriptor
Throws:
  `java.lang.IllegalAccessException` - if injection target is inaccessible
  `javax.naming.NamingException` - if value cannot be looked up in jndi
  `java.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 into
  `injections` - map of injections for this class from xml deployment descriptor
Throws:
  `java.lang.IllegalAccessException` - if injection target is inaccessible
  `javax.naming.NamingException` - if value cannot be looked up in jndi
  `java.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 from
  `instance` - object to inject into
  `field` - field target for injection
  `name` - jndi name value is bound under
  `clazz` - class annotation is defined in
Throws:
  `java.lang.IllegalAccessException` - if field is inaccessible
  `javax.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 from
  `instance` - object to inject into
  `method` - field target for injection
  `name` - jndi name value is bound under
  `clazz` - class annotation is defined in
Throws:
  `java.lang.IllegalAccessException` - if method is inaccessible
  `javax.naming.NamingException` - if value is not accessible in naming context
  `java.lang.reflect.InvocationTargetException` - if setter call fails