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