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.

    - ### 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()

      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 interface `InstanceManager`

    - #### 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