Class DefaultInstanceManager

    • 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