You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2018/05/03 09:26:42 UTC
svn commit: r1830805 -
/tomcat/tc7.0.x/trunk/java/org/apache/catalina/core/DefaultInstanceManager.java
Author: markt
Date: Thu May 3 09:26:42 2018
New Revision: 1830805
URL: http://svn.apache.org/viewvc?rev=1830805&view=rev
Log:
Fix indent
Modified:
tomcat/tc7.0.x/trunk/java/org/apache/catalina/core/DefaultInstanceManager.java
Modified: tomcat/tc7.0.x/trunk/java/org/apache/catalina/core/DefaultInstanceManager.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/core/DefaultInstanceManager.java?rev=1830805&r1=1830804&r2=1830805&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/catalina/core/DefaultInstanceManager.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/core/DefaultInstanceManager.java Thu May 3 09:26:42 2018
@@ -108,707 +108,707 @@ public class DefaultInstanceManager impl
private final Set<String> restrictedClasses;
private final ManagedConcurrentWeakHashMap<Class<?>, AnnotationCacheEntry[]> annotationCache =
new ManagedConcurrentWeakHashMap<Class<?>, AnnotationCacheEntry[]>();
- private final Map<String, String> postConstructMethods;
- private final Map<String, String> preDestroyMethods;
+ private final Map<String, String> postConstructMethods;
+ private final Map<String, String> preDestroyMethods;
- public DefaultInstanceManager(Context context, Map<String, Map<String, String>> injectionMap, org.apache.catalina.Context catalinaContext, ClassLoader containerClassLoader) {
- classLoader = catalinaContext.getLoader().getClassLoader();
- privileged = catalinaContext.getPrivileged();
- this.containerClassLoader = containerClassLoader;
- ignoreAnnotations = catalinaContext.getIgnoreAnnotations();
- Log log = catalinaContext.getLogger();
- Set<String> classNames = new HashSet<String>();
- loadProperties(classNames,
- "org/apache/catalina/core/RestrictedServlets.properties",
- "defaultInstanceManager.restrictedServletsResource", log);
- loadProperties(classNames,
- "org/apache/catalina/core/RestrictedListeners.properties",
- "defaultInstanceManager.restrictedListenersResource", log);
- loadProperties(classNames,
- "org/apache/catalina/core/RestrictedFilters.properties",
- "defaultInstanceManager.restrictedFiltersResource", log);
- restrictedClasses = Collections.unmodifiableSet(classNames);
- this.context = context;
- this.injectionMap = injectionMap;
- this.postConstructMethods = catalinaContext.findPostConstructMethods();
- this.preDestroyMethods = catalinaContext.findPreDestroyMethods();
- }
-
- @Override
- public Object newInstance(Class<?> clazz) throws IllegalAccessException,
- InvocationTargetException, NamingException, InstantiationException,
- IllegalArgumentException, NoSuchMethodException, SecurityException {
- return newInstance(clazz.getDeclaredConstructor().newInstance(), clazz);
- }
-
- @Override
- public Object newInstance(String className) throws IllegalAccessException,
- InvocationTargetException, NamingException, InstantiationException,
- ClassNotFoundException, IllegalArgumentException, NoSuchMethodException, SecurityException {
- Class<?> clazz = loadClassMaybePrivileged(className, classLoader);
- return newInstance(clazz.getDeclaredConstructor().newInstance(), clazz);
- }
-
- @Override
- public Object newInstance(final String className, final ClassLoader classLoader)
- throws IllegalAccessException, NamingException, InvocationTargetException,
- InstantiationException, ClassNotFoundException, IllegalArgumentException,
- NoSuchMethodException, SecurityException {
- Class<?> clazz = classLoader.loadClass(className);
- return newInstance(clazz.getDeclaredConstructor().newInstance(), clazz);
- }
-
- @Override
- public void newInstance(Object o)
- throws IllegalAccessException, InvocationTargetException, NamingException {
- newInstance(o, o.getClass());
- }
-
- private Object newInstance(Object instance, Class<?> clazz) throws IllegalAccessException, InvocationTargetException, NamingException {
- if (!ignoreAnnotations) {
- Map<String, String> injections = assembleInjectionsFromClassHierarchy(clazz);
- populateAnnotationsCache(clazz, injections);
- processAnnotations(instance, injections);
- postConstruct(instance, clazz);
- }
- return instance;
- }
-
- private Map<String, String> assembleInjectionsFromClassHierarchy(Class<?> clazz) {
- Map<String, String> injections = new HashMap<String, String>();
- Map<String, String> currentInjections = null;
- while (clazz != null) {
- currentInjections = this.injectionMap.get(clazz.getName());
- if (currentInjections != null) {
- injections.putAll(currentInjections);
- }
- clazz = clazz.getSuperclass();
- }
- return injections;
- }
-
- @Override
- public void destroyInstance(Object instance) throws IllegalAccessException, InvocationTargetException {
- if (!ignoreAnnotations) {
- preDestroy(instance, instance.getClass());
- }
- }
-
- /**
- * Call postConstruct method on the specified instance recursively from deepest superclass to actual class.
- *
- * @param instance object to call postconstruct methods on
- * @param clazz (super) class to examine for postConstruct annotation.
- * @throws IllegalAccessException if postConstruct method is inaccessible.
- * @throws java.lang.reflect.InvocationTargetException
- * if call fails
- */
- protected void postConstruct(Object instance, final Class<?> clazz)
- throws IllegalAccessException, InvocationTargetException {
- if (context == null) {
- // No resource injection
- return;
- }
-
- Class<?> superClass = clazz.getSuperclass();
- if (superClass != Object.class) {
- postConstruct(instance, superClass);
- }
-
- // At the end the postconstruct annotated
- // method is invoked
- AnnotationCacheEntry[] annotations = annotationCache.get(clazz);
- for (AnnotationCacheEntry entry : annotations) {
- if (entry.getType() == AnnotationCacheEntryType.POST_CONSTRUCT) {
- Method postConstruct = getMethod(clazz, entry);
- synchronized (postConstruct) {
- boolean accessibility = postConstruct.isAccessible();
- postConstruct.setAccessible(true);
- postConstruct.invoke(instance);
- postConstruct.setAccessible(accessibility);
- }
- }
- }
- }
-
-
- /**
- * Call preDestroy method on the specified instance recursively from deepest superclass to actual class.
- *
- * @param instance object to call preDestroy methods on
- * @param clazz (super) class to examine for preDestroy annotation.
- * @throws IllegalAccessException if preDestroy method is inaccessible.
- * @throws java.lang.reflect.InvocationTargetException
- * if call fails
- */
- protected void preDestroy(Object instance, final Class<?> clazz)
- throws IllegalAccessException, InvocationTargetException {
- Class<?> superClass = clazz.getSuperclass();
- if (superClass != Object.class) {
- preDestroy(instance, superClass);
- }
-
- // At the end the postconstruct annotated
- // method is invoked
- AnnotationCacheEntry[] annotations = annotationCache.get(clazz);
+ public DefaultInstanceManager(Context context, Map<String, Map<String, String>> injectionMap, org.apache.catalina.Context catalinaContext, ClassLoader containerClassLoader) {
+ classLoader = catalinaContext.getLoader().getClassLoader();
+ privileged = catalinaContext.getPrivileged();
+ this.containerClassLoader = containerClassLoader;
+ ignoreAnnotations = catalinaContext.getIgnoreAnnotations();
+ Log log = catalinaContext.getLogger();
+ Set<String> classNames = new HashSet<String>();
+ loadProperties(classNames,
+ "org/apache/catalina/core/RestrictedServlets.properties",
+ "defaultInstanceManager.restrictedServletsResource", log);
+ loadProperties(classNames,
+ "org/apache/catalina/core/RestrictedListeners.properties",
+ "defaultInstanceManager.restrictedListenersResource", log);
+ loadProperties(classNames,
+ "org/apache/catalina/core/RestrictedFilters.properties",
+ "defaultInstanceManager.restrictedFiltersResource", log);
+ restrictedClasses = Collections.unmodifiableSet(classNames);
+ this.context = context;
+ this.injectionMap = injectionMap;
+ this.postConstructMethods = catalinaContext.findPostConstructMethods();
+ this.preDestroyMethods = catalinaContext.findPreDestroyMethods();
+ }
+
+ @Override
+ public Object newInstance(Class<?> clazz) throws IllegalAccessException,
+ InvocationTargetException, NamingException, InstantiationException,
+ IllegalArgumentException, NoSuchMethodException, SecurityException {
+ return newInstance(clazz.getDeclaredConstructor().newInstance(), clazz);
+ }
+
+ @Override
+ public Object newInstance(String className) throws IllegalAccessException,
+ InvocationTargetException, NamingException, InstantiationException,
+ ClassNotFoundException, IllegalArgumentException, NoSuchMethodException, SecurityException {
+ Class<?> clazz = loadClassMaybePrivileged(className, classLoader);
+ return newInstance(clazz.getDeclaredConstructor().newInstance(), clazz);
+ }
+
+ @Override
+ public Object newInstance(final String className, final ClassLoader classLoader)
+ throws IllegalAccessException, NamingException, InvocationTargetException,
+ InstantiationException, ClassNotFoundException, IllegalArgumentException,
+ NoSuchMethodException, SecurityException {
+ Class<?> clazz = classLoader.loadClass(className);
+ return newInstance(clazz.getDeclaredConstructor().newInstance(), clazz);
+ }
+
+ @Override
+ public void newInstance(Object o)
+ throws IllegalAccessException, InvocationTargetException, NamingException {
+ newInstance(o, o.getClass());
+ }
+
+ private Object newInstance(Object instance, Class<?> clazz) throws IllegalAccessException, InvocationTargetException, NamingException {
+ if (!ignoreAnnotations) {
+ Map<String, String> injections = assembleInjectionsFromClassHierarchy(clazz);
+ populateAnnotationsCache(clazz, injections);
+ processAnnotations(instance, injections);
+ postConstruct(instance, clazz);
+ }
+ return instance;
+ }
+
+ private Map<String, String> assembleInjectionsFromClassHierarchy(Class<?> clazz) {
+ Map<String, String> injections = new HashMap<String, String>();
+ Map<String, String> currentInjections = null;
+ while (clazz != null) {
+ currentInjections = this.injectionMap.get(clazz.getName());
+ if (currentInjections != null) {
+ injections.putAll(currentInjections);
+ }
+ clazz = clazz.getSuperclass();
+ }
+ return injections;
+ }
+
+ @Override
+ public void destroyInstance(Object instance) throws IllegalAccessException, InvocationTargetException {
+ if (!ignoreAnnotations) {
+ preDestroy(instance, instance.getClass());
+ }
+ }
+
+ /**
+ * Call postConstruct method on the specified instance recursively from deepest superclass to actual class.
+ *
+ * @param instance object to call postconstruct methods on
+ * @param clazz (super) class to examine for postConstruct annotation.
+ * @throws IllegalAccessException if postConstruct method is inaccessible.
+ * @throws java.lang.reflect.InvocationTargetException
+ * if call fails
+ */
+ protected void postConstruct(Object instance, final Class<?> clazz)
+ throws IllegalAccessException, InvocationTargetException {
+ if (context == null) {
+ // No resource injection
+ return;
+ }
+
+ Class<?> superClass = clazz.getSuperclass();
+ if (superClass != Object.class) {
+ postConstruct(instance, superClass);
+ }
+
+ // At the end the postconstruct annotated
+ // method is invoked
+ AnnotationCacheEntry[] annotations = annotationCache.get(clazz);
+ for (AnnotationCacheEntry entry : annotations) {
+ if (entry.getType() == AnnotationCacheEntryType.POST_CONSTRUCT) {
+ Method postConstruct = getMethod(clazz, entry);
+ synchronized (postConstruct) {
+ boolean accessibility = postConstruct.isAccessible();
+ postConstruct.setAccessible(true);
+ postConstruct.invoke(instance);
+ postConstruct.setAccessible(accessibility);
+ }
+ }
+ }
+ }
+
+
+ /**
+ * Call preDestroy method on the specified instance recursively from deepest superclass to actual class.
+ *
+ * @param instance object to call preDestroy methods on
+ * @param clazz (super) class to examine for preDestroy annotation.
+ * @throws IllegalAccessException if preDestroy method is inaccessible.
+ * @throws java.lang.reflect.InvocationTargetException
+ * if call fails
+ */
+ protected void preDestroy(Object instance, final Class<?> clazz)
+ throws IllegalAccessException, InvocationTargetException {
+ Class<?> superClass = clazz.getSuperclass();
+ if (superClass != Object.class) {
+ preDestroy(instance, superClass);
+ }
+
+ // At the end the postconstruct annotated
+ // method is invoked
+ AnnotationCacheEntry[] annotations = annotationCache.get(clazz);
+ if (annotations == null) {
+ // instance not created through the instance manager
+ return;
+ }
+ for (AnnotationCacheEntry entry : annotations) {
+ if (entry.getType() == AnnotationCacheEntryType.PRE_DESTROY) {
+ Method preDestroy = getMethod(clazz, entry);
+ synchronized (preDestroy) {
+ boolean accessibility = preDestroy.isAccessible();
+ preDestroy.setAccessible(true);
+ preDestroy.invoke(instance);
+ preDestroy.setAccessible(accessibility);
+ }
+ }
+ }
+ }
+
+
+ public void backgroundProcess() {
+ annotationCache.maintain();
+ }
+
+
+ /**
+ * Make sure that the annotations cache has been populated for the provided
+ * class.
+ *
+ * @param clazz clazz to populate annotations for
+ * @param injections map of injections for this class from xml deployment
+ * descriptor
+ * @throws IllegalAccessException if injection target is inaccessible
+ * @throws javax.naming.NamingException if value cannot be looked up in jndi
+ * @throws java.lang.reflect.InvocationTargetException
+ * if injection fails
+ */
+ protected void populateAnnotationsCache(Class<?> clazz,
+ Map<String, String> injections) throws IllegalAccessException,
+ InvocationTargetException, NamingException {
+
+ List<AnnotationCacheEntry> annotations = null;
+
+ while (clazz != null) {
+ AnnotationCacheEntry[] annotationsArray = annotationCache.get(clazz);
+ if (annotationsArray == null) {
if (annotations == null) {
- // instance not created through the instance manager
- return;
+ annotations = new ArrayList<AnnotationCacheEntry>();
+ } else {
+ annotations.clear();
}
- for (AnnotationCacheEntry entry : annotations) {
- if (entry.getType() == AnnotationCacheEntryType.PRE_DESTROY) {
- Method preDestroy = getMethod(clazz, entry);
- synchronized (preDestroy) {
- boolean accessibility = preDestroy.isAccessible();
- preDestroy.setAccessible(true);
- preDestroy.invoke(instance);
- preDestroy.setAccessible(accessibility);
+
+ if (context != null) {
+ // Initialize fields annotations for resource injection if
+ // JNDI is enabled
+ Field[] fields = Introspection.getDeclaredFields(clazz);
+ for (Field field : fields) {
+ Resource resourceAnnotation;
+ Annotation ejbAnnotation;
+ Annotation webServiceRefAnnotation;
+ Annotation persistenceContextAnnotation;
+ Annotation persistenceUnitAnnotation;
+ if (injections != null && injections.containsKey(field.getName())) {
+ annotations.add(new AnnotationCacheEntry(
+ field.getName(), null,
+ injections.get(field.getName()),
+ AnnotationCacheEntryType.FIELD));
+ } else if ((resourceAnnotation =
+ field.getAnnotation(Resource.class)) != null) {
+ annotations.add(new AnnotationCacheEntry(field.getName(), null,
+ resourceAnnotation.name(), AnnotationCacheEntryType.FIELD));
+ } else if (EJB_PRESENT &&
+ (ejbAnnotation = field.getAnnotation(EJB.class)) != null) {
+ annotations.add(new AnnotationCacheEntry(field.getName(), null,
+ ((EJB) ejbAnnotation).name(), AnnotationCacheEntryType.FIELD));
+ } else if (WS_PRESENT && (webServiceRefAnnotation =
+ field.getAnnotation(WebServiceRef.class)) != null) {
+ annotations.add(new AnnotationCacheEntry(field.getName(), null,
+ ((WebServiceRef) webServiceRefAnnotation).name(),
+ AnnotationCacheEntryType.FIELD));
+ } else if (JPA_PRESENT && (persistenceContextAnnotation =
+ field.getAnnotation(PersistenceContext.class)) != null) {
+ annotations.add(new AnnotationCacheEntry(field.getName(), null,
+ ((PersistenceContext) persistenceContextAnnotation).name(),
+ AnnotationCacheEntryType.FIELD));
+ } else if (JPA_PRESENT && (persistenceUnitAnnotation =
+ field.getAnnotation(PersistenceUnit.class)) != null) {
+ annotations.add(new AnnotationCacheEntry(field.getName(), null,
+ ((PersistenceUnit) persistenceUnitAnnotation).name(),
+ AnnotationCacheEntryType.FIELD));
}
}
}
- }
-
-
- public void backgroundProcess() {
- annotationCache.maintain();
- }
-
-
- /**
- * Make sure that the annotations cache has been populated for the provided
- * class.
- *
- * @param clazz clazz to populate annotations for
- * @param injections map of injections for this class from xml deployment
- * descriptor
- * @throws IllegalAccessException if injection target is inaccessible
- * @throws javax.naming.NamingException if value cannot be looked up in jndi
- * @throws java.lang.reflect.InvocationTargetException
- * if injection fails
- */
- protected void populateAnnotationsCache(Class<?> clazz,
- Map<String, String> injections) throws IllegalAccessException,
- InvocationTargetException, NamingException {
-
- List<AnnotationCacheEntry> annotations = null;
-
- while (clazz != null) {
- AnnotationCacheEntry[] annotationsArray = annotationCache.get(clazz);
- if (annotationsArray == null) {
- if (annotations == null) {
- annotations = new ArrayList<AnnotationCacheEntry>();
- } else {
- annotations.clear();
- }
-
- if (context != null) {
- // Initialize fields annotations for resource injection if
- // JNDI is enabled
- Field[] fields = Introspection.getDeclaredFields(clazz);
- for (Field field : fields) {
- Resource resourceAnnotation;
- Annotation ejbAnnotation;
- Annotation webServiceRefAnnotation;
- Annotation persistenceContextAnnotation;
- Annotation persistenceUnitAnnotation;
- if (injections != null && injections.containsKey(field.getName())) {
- annotations.add(new AnnotationCacheEntry(
- field.getName(), null,
- injections.get(field.getName()),
- AnnotationCacheEntryType.FIELD));
- } else if ((resourceAnnotation =
- field.getAnnotation(Resource.class)) != null) {
- annotations.add(new AnnotationCacheEntry(field.getName(), null,
- resourceAnnotation.name(), AnnotationCacheEntryType.FIELD));
- } else if (EJB_PRESENT &&
- (ejbAnnotation = field.getAnnotation(EJB.class)) != null) {
- annotations.add(new AnnotationCacheEntry(field.getName(), null,
- ((EJB) ejbAnnotation).name(), AnnotationCacheEntryType.FIELD));
- } else if (WS_PRESENT && (webServiceRefAnnotation =
- field.getAnnotation(WebServiceRef.class)) != null) {
- annotations.add(new AnnotationCacheEntry(field.getName(), null,
- ((WebServiceRef) webServiceRefAnnotation).name(),
- AnnotationCacheEntryType.FIELD));
- } else if (JPA_PRESENT && (persistenceContextAnnotation =
- field.getAnnotation(PersistenceContext.class)) != null) {
- annotations.add(new AnnotationCacheEntry(field.getName(), null,
- ((PersistenceContext) persistenceContextAnnotation).name(),
- AnnotationCacheEntryType.FIELD));
- } else if (JPA_PRESENT && (persistenceUnitAnnotation =
- field.getAnnotation(PersistenceUnit.class)) != null) {
- annotations.add(new AnnotationCacheEntry(field.getName(), null,
- ((PersistenceUnit) persistenceUnitAnnotation).name(),
- AnnotationCacheEntryType.FIELD));
- }
- }
- }
- // Initialize methods annotations
- Method[] methods = Introspection.getDeclaredMethods(clazz);
- Method postConstruct = null;
- String postConstructFromXml = postConstructMethods.get(clazz.getName());
- Method preDestroy = null;
- String preDestroyFromXml = preDestroyMethods.get(clazz.getName());
- for (Method method : methods) {
- if (context != null) {
- // Resource injection only if JNDI is enabled
- if (injections != null &&
- Introspection.isValidSetter(method)) {
- String fieldName = Introspection.getPropertyName(method);
- if (injections.containsKey(fieldName)) {
- annotations.add(new AnnotationCacheEntry(
- method.getName(),
- method.getParameterTypes(),
- injections.get(fieldName),
- AnnotationCacheEntryType.SETTER));
- continue;
- }
- }
- Resource resourceAnnotation;
- Annotation ejbAnnotation;
- Annotation webServiceRefAnnotation;
- Annotation persistenceContextAnnotation;
- Annotation persistenceUnitAnnotation;
- if ((resourceAnnotation =
- method.getAnnotation(Resource.class)) != null) {
- annotations.add(new AnnotationCacheEntry(
- method.getName(),
- method.getParameterTypes(),
- resourceAnnotation.name(),
- AnnotationCacheEntryType.SETTER));
- } else if (EJB_PRESENT &&
- (ejbAnnotation = method.getAnnotation(EJB.class)) != null) {
- annotations.add(new AnnotationCacheEntry(
- method.getName(),
- method.getParameterTypes(),
- ((EJB) ejbAnnotation).name(),
- AnnotationCacheEntryType.SETTER));
- } else if (WS_PRESENT && (webServiceRefAnnotation =
- method.getAnnotation(WebServiceRef.class)) != null) {
- annotations.add(new AnnotationCacheEntry(
- method.getName(),
- method.getParameterTypes(),
- ((WebServiceRef) webServiceRefAnnotation).name(),
- AnnotationCacheEntryType.SETTER));
- } else if (JPA_PRESENT && (persistenceContextAnnotation =
- method.getAnnotation(PersistenceContext.class)) != null) {
- annotations.add(new AnnotationCacheEntry(
- method.getName(),
- method.getParameterTypes(),
- ((PersistenceContext) persistenceContextAnnotation).name(),
- AnnotationCacheEntryType.SETTER));
- } else if (JPA_PRESENT && (persistenceUnitAnnotation =
- method.getAnnotation(PersistenceUnit.class)) != null) {
- annotations.add(new AnnotationCacheEntry(
- method.getName(),
- method.getParameterTypes(),
- ((PersistenceUnit) persistenceUnitAnnotation).name(),
- AnnotationCacheEntryType.SETTER));
- }
+ // Initialize methods annotations
+ Method[] methods = Introspection.getDeclaredMethods(clazz);
+ Method postConstruct = null;
+ String postConstructFromXml = postConstructMethods.get(clazz.getName());
+ Method preDestroy = null;
+ String preDestroyFromXml = preDestroyMethods.get(clazz.getName());
+ for (Method method : methods) {
+ if (context != null) {
+ // Resource injection only if JNDI is enabled
+ if (injections != null &&
+ Introspection.isValidSetter(method)) {
+ String fieldName = Introspection.getPropertyName(method);
+ if (injections.containsKey(fieldName)) {
+ annotations.add(new AnnotationCacheEntry(
+ method.getName(),
+ method.getParameterTypes(),
+ injections.get(fieldName),
+ AnnotationCacheEntryType.SETTER));
+ continue;
}
-
- postConstruct = findPostConstruct(postConstruct, postConstructFromXml, method);
-
- preDestroy = findPreDestroy(preDestroy, preDestroyFromXml, method);
}
-
- if (postConstruct != null) {
+ Resource resourceAnnotation;
+ Annotation ejbAnnotation;
+ Annotation webServiceRefAnnotation;
+ Annotation persistenceContextAnnotation;
+ Annotation persistenceUnitAnnotation;
+ if ((resourceAnnotation =
+ method.getAnnotation(Resource.class)) != null) {
annotations.add(new AnnotationCacheEntry(
- postConstruct.getName(),
- postConstruct.getParameterTypes(), null,
- AnnotationCacheEntryType.POST_CONSTRUCT));
- } else if (postConstructFromXml != null) {
- throw new IllegalArgumentException("Post construct method "
- + postConstructFromXml + " for class " + clazz.getName()
- + " is declared in deployment descriptor but cannot be found.");
- }
- if (preDestroy != null) {
+ method.getName(),
+ method.getParameterTypes(),
+ resourceAnnotation.name(),
+ AnnotationCacheEntryType.SETTER));
+ } else if (EJB_PRESENT &&
+ (ejbAnnotation = method.getAnnotation(EJB.class)) != null) {
annotations.add(new AnnotationCacheEntry(
- preDestroy.getName(),
- preDestroy.getParameterTypes(), null,
- AnnotationCacheEntryType.PRE_DESTROY));
- } else if (preDestroyFromXml != null) {
- throw new IllegalArgumentException("Pre destroy method "
- + preDestroyFromXml + " for class " + clazz.getName()
- + " is declared in deployment descriptor but cannot be found.");
- }
- if (annotations.isEmpty()) {
- // Use common object to save memory
- annotationsArray = ANNOTATIONS_EMPTY;
- } else {
- annotationsArray = annotations.toArray(
- new AnnotationCacheEntry[annotations.size()]);
- }
- synchronized (annotationCache) {
- annotationCache.put(clazz, annotationsArray);
- }
- }
- clazz = clazz.getSuperclass();
- }
- }
-
-
- /**
- * Inject resources in specified instance.
- *
- * @param instance instance to inject into
- * @param injections map of injections for this class from xml deployment descriptor
- * @throws IllegalAccessException if injection target is inaccessible
- * @throws javax.naming.NamingException if value cannot be looked up in jndi
- * @throws java.lang.reflect.InvocationTargetException
- * if injection fails
- */
- protected void processAnnotations(Object instance, Map<String, String> injections)
- throws IllegalAccessException, InvocationTargetException, NamingException {
-
- if (context == null) {
- // No resource injection
- return;
- }
-
- Class<?> clazz = instance.getClass();
-
- while (clazz != null) {
- AnnotationCacheEntry[] annotations = annotationCache.get(clazz);
- for (AnnotationCacheEntry entry : annotations) {
- if (entry.getType() == AnnotationCacheEntryType.SETTER) {
- lookupMethodResource(context, instance,
- getMethod(clazz, entry),
- entry.getName(), clazz);
- } else if (entry.getType() == AnnotationCacheEntryType.FIELD) {
- lookupFieldResource(context, instance,
- getField(clazz, entry),
- entry.getName(), clazz);
+ method.getName(),
+ method.getParameterTypes(),
+ ((EJB) ejbAnnotation).name(),
+ AnnotationCacheEntryType.SETTER));
+ } else if (WS_PRESENT && (webServiceRefAnnotation =
+ method.getAnnotation(WebServiceRef.class)) != null) {
+ annotations.add(new AnnotationCacheEntry(
+ method.getName(),
+ method.getParameterTypes(),
+ ((WebServiceRef) webServiceRefAnnotation).name(),
+ AnnotationCacheEntryType.SETTER));
+ } else if (JPA_PRESENT && (persistenceContextAnnotation =
+ method.getAnnotation(PersistenceContext.class)) != null) {
+ annotations.add(new AnnotationCacheEntry(
+ method.getName(),
+ method.getParameterTypes(),
+ ((PersistenceContext) persistenceContextAnnotation).name(),
+ AnnotationCacheEntryType.SETTER));
+ } else if (JPA_PRESENT && (persistenceUnitAnnotation =
+ method.getAnnotation(PersistenceUnit.class)) != null) {
+ annotations.add(new AnnotationCacheEntry(
+ method.getName(),
+ method.getParameterTypes(),
+ ((PersistenceUnit) persistenceUnitAnnotation).name(),
+ AnnotationCacheEntryType.SETTER));
}
}
- clazz = clazz.getSuperclass();
- }
- }
-
-
- /**
- * Makes cache size available to unit tests.
- */
- protected int getAnnotationCacheSize() {
- return annotationCache.size();
- }
-
-
- protected Class<?> loadClassMaybePrivileged(final String className, final ClassLoader classLoader) throws ClassNotFoundException {
- Class<?> clazz;
- if (SecurityUtil.isPackageProtectionEnabled()) {
- try {
- clazz = AccessController.doPrivileged(new PrivilegedExceptionAction<Class<?>>() {
- @Override
- public Class<?> run() throws Exception {
- return loadClass(className, classLoader);
- }
- });
- } catch (PrivilegedActionException e) {
- Throwable t = e.getCause();
- if (t instanceof ClassNotFoundException) {
- throw (ClassNotFoundException) t;
- }
- throw new RuntimeException(t);
- }
+ postConstruct = findPostConstruct(postConstruct, postConstructFromXml, method);
+
+ preDestroy = findPreDestroy(preDestroy, preDestroyFromXml, method);
+ }
+
+ if (postConstruct != null) {
+ annotations.add(new AnnotationCacheEntry(
+ postConstruct.getName(),
+ postConstruct.getParameterTypes(), null,
+ AnnotationCacheEntryType.POST_CONSTRUCT));
+ } else if (postConstructFromXml != null) {
+ throw new IllegalArgumentException("Post construct method "
+ + postConstructFromXml + " for class " + clazz.getName()
+ + " is declared in deployment descriptor but cannot be found.");
+ }
+ if (preDestroy != null) {
+ annotations.add(new AnnotationCacheEntry(
+ preDestroy.getName(),
+ preDestroy.getParameterTypes(), null,
+ AnnotationCacheEntryType.PRE_DESTROY));
+ } else if (preDestroyFromXml != null) {
+ throw new IllegalArgumentException("Pre destroy method "
+ + preDestroyFromXml + " for class " + clazz.getName()
+ + " is declared in deployment descriptor but cannot be found.");
+ }
+ if (annotations.isEmpty()) {
+ // Use common object to save memory
+ annotationsArray = ANNOTATIONS_EMPTY;
} else {
- clazz = loadClass(className, classLoader);
- }
- checkAccess(clazz);
- return clazz;
- }
-
- protected Class<?> loadClass(String className, ClassLoader classLoader) throws ClassNotFoundException {
- if (className.startsWith("org.apache.catalina")) {
- return containerClassLoader.loadClass(className);
- }
- try {
- Class<?> clazz = containerClassLoader.loadClass(className);
- if (ContainerServlet.class.isAssignableFrom(clazz)) {
- return clazz;
- }
- } catch (Throwable t) {
- ExceptionUtils.handleThrowable(t);
- }
- return classLoader.loadClass(className);
- }
-
- private void checkAccess(Class<?> clazz) {
- if (privileged) {
- return;
- }
- if (ContainerServlet.class.isAssignableFrom(clazz)) {
- throw new SecurityException(sm.getString(
- "defaultInstanceManager.restrictedContainerServlet", clazz));
+ annotationsArray = annotations.toArray(
+ new AnnotationCacheEntry[annotations.size()]);
}
- while (clazz != null) {
- if (restrictedClasses.contains(clazz.getName())) {
- throw new SecurityException(sm.getString(
- "defaultInstanceManager.restrictedClass", clazz));
- }
- clazz = clazz.getSuperclass();
+ synchronized (annotationCache) {
+ annotationCache.put(clazz, annotationsArray);
}
}
-
- /**
- * Inject resources in specified field.
- *
- * @param context jndi context to extract value from
- * @param instance object to inject into
- * @param field field target for injection
- * @param name jndi name value is bound under
- * @param clazz class annotation is defined in
- * @throws IllegalAccessException if field is inaccessible
- * @throws javax.naming.NamingException if value is not accessible in naming context
- */
- protected static void lookupFieldResource(Context context,
- Object instance, Field field, String name, Class<?> clazz)
- throws NamingException, IllegalAccessException {
-
- Object lookedupResource;
- boolean accessibility;
-
- String normalizedName = normalize(name);
-
- if ((normalizedName != null) && (normalizedName.length() > 0)) {
- lookedupResource = context.lookup(normalizedName);
- } else {
- lookedupResource =
- context.lookup(clazz.getName() + "/" + field.getName());
- }
-
- synchronized (field) {
- accessibility = field.isAccessible();
- field.setAccessible(true);
- field.set(instance, lookedupResource);
- field.setAccessible(accessibility);
- }
- }
-
- /**
- * Inject resources in specified method.
- *
- * @param context jndi context to extract value from
- * @param instance object to inject into
- * @param method field target for injection
- * @param name jndi name value is bound under
- * @param clazz class annotation is defined in
- * @throws IllegalAccessException if method is inaccessible
- * @throws javax.naming.NamingException if value is not accessible in naming context
- * @throws java.lang.reflect.InvocationTargetException
- * if setter call fails
- */
- protected static void lookupMethodResource(Context context,
- Object instance, Method method, String name, Class<?> clazz)
- throws NamingException, IllegalAccessException, InvocationTargetException {
-
- if (!Introspection.isValidSetter(method)) {
- throw new IllegalArgumentException(
- sm.getString("defaultInstanceManager.invalidInjection"));
- }
-
- Object lookedupResource;
- boolean accessibility;
-
- String normalizedName = normalize(name);
-
- if ((normalizedName != null) && (normalizedName.length() > 0)) {
- lookedupResource = context.lookup(normalizedName);
- } else {
- lookedupResource = context.lookup(
- clazz.getName() + "/" + Introspection.getPropertyName(method));
- }
-
- synchronized (method) {
- accessibility = method.isAccessible();
- method.setAccessible(true);
- method.invoke(instance, lookedupResource);
- method.setAccessible(accessibility);
- }
- }
-
- @Deprecated
- public static String getName(Method setter) {
- // Note: method signature has already been checked for correctness.
- // The method name always starts with "set".
- return Introspector.decapitalize(setter.getName().substring(3));
+ clazz = clazz.getSuperclass();
+ }
+ }
+
+
+ /**
+ * Inject resources in specified instance.
+ *
+ * @param instance instance to inject into
+ * @param injections map of injections for this class from xml deployment descriptor
+ * @throws IllegalAccessException if injection target is inaccessible
+ * @throws javax.naming.NamingException if value cannot be looked up in jndi
+ * @throws java.lang.reflect.InvocationTargetException
+ * if injection fails
+ */
+ protected void processAnnotations(Object instance, Map<String, String> injections)
+ throws IllegalAccessException, InvocationTargetException, NamingException {
+
+ if (context == null) {
+ // No resource injection
+ return;
+ }
+
+ Class<?> clazz = instance.getClass();
+
+ while (clazz != null) {
+ AnnotationCacheEntry[] annotations = annotationCache.get(clazz);
+ for (AnnotationCacheEntry entry : annotations) {
+ if (entry.getType() == AnnotationCacheEntryType.SETTER) {
+ lookupMethodResource(context, instance,
+ getMethod(clazz, entry),
+ entry.getName(), clazz);
+ } else if (entry.getType() == AnnotationCacheEntryType.FIELD) {
+ lookupFieldResource(context, instance,
+ getField(clazz, entry),
+ entry.getName(), clazz);
+ }
+ }
+ clazz = clazz.getSuperclass();
+ }
+ }
+
+
+ /**
+ * Makes cache size available to unit tests.
+ */
+ protected int getAnnotationCacheSize() {
+ return annotationCache.size();
+ }
+
+
+ protected Class<?> loadClassMaybePrivileged(final String className, final ClassLoader classLoader) throws ClassNotFoundException {
+ Class<?> clazz;
+ if (SecurityUtil.isPackageProtectionEnabled()) {
+ try {
+ clazz = AccessController.doPrivileged(new PrivilegedExceptionAction<Class<?>>() {
+
+ @Override
+ public Class<?> run() throws Exception {
+ return loadClass(className, classLoader);
+ }
+ });
+ } catch (PrivilegedActionException e) {
+ Throwable t = e.getCause();
+ if (t instanceof ClassNotFoundException) {
+ throw (ClassNotFoundException) t;
+ }
+ throw new RuntimeException(t);
+ }
+ } else {
+ clazz = loadClass(className, classLoader);
+ }
+ checkAccess(clazz);
+ return clazz;
+ }
+
+ protected Class<?> loadClass(String className, ClassLoader classLoader) throws ClassNotFoundException {
+ if (className.startsWith("org.apache.catalina")) {
+ return containerClassLoader.loadClass(className);
+ }
+ try {
+ Class<?> clazz = containerClassLoader.loadClass(className);
+ if (ContainerServlet.class.isAssignableFrom(clazz)) {
+ return clazz;
}
-
- private static void loadProperties(Set<String> classNames, String resourceName,
- String messageKey, Log log) {
- Properties properties = new Properties();
- ClassLoader cl = DefaultInstanceManager.class.getClassLoader();
- InputStream is = null;
+ } catch (Throwable t) {
+ ExceptionUtils.handleThrowable(t);
+ }
+ return classLoader.loadClass(className);
+ }
+
+ private void checkAccess(Class<?> clazz) {
+ if (privileged) {
+ return;
+ }
+ if (ContainerServlet.class.isAssignableFrom(clazz)) {
+ throw new SecurityException(sm.getString(
+ "defaultInstanceManager.restrictedContainerServlet", clazz));
+ }
+ while (clazz != null) {
+ if (restrictedClasses.contains(clazz.getName())) {
+ throw new SecurityException(sm.getString(
+ "defaultInstanceManager.restrictedClass", clazz));
+ }
+ clazz = clazz.getSuperclass();
+ }
+ }
+
+ /**
+ * Inject resources in specified field.
+ *
+ * @param context jndi context to extract value from
+ * @param instance object to inject into
+ * @param field field target for injection
+ * @param name jndi name value is bound under
+ * @param clazz class annotation is defined in
+ * @throws IllegalAccessException if field is inaccessible
+ * @throws javax.naming.NamingException if value is not accessible in naming context
+ */
+ protected static void lookupFieldResource(Context context,
+ Object instance, Field field, String name, Class<?> clazz)
+ throws NamingException, IllegalAccessException {
+
+ Object lookedupResource;
+ boolean accessibility;
+
+ String normalizedName = normalize(name);
+
+ if ((normalizedName != null) && (normalizedName.length() > 0)) {
+ lookedupResource = context.lookup(normalizedName);
+ } else {
+ lookedupResource =
+ context.lookup(clazz.getName() + "/" + field.getName());
+ }
+
+ synchronized (field) {
+ accessibility = field.isAccessible();
+ field.setAccessible(true);
+ field.set(instance, lookedupResource);
+ field.setAccessible(accessibility);
+ }
+ }
+
+ /**
+ * Inject resources in specified method.
+ *
+ * @param context jndi context to extract value from
+ * @param instance object to inject into
+ * @param method field target for injection
+ * @param name jndi name value is bound under
+ * @param clazz class annotation is defined in
+ * @throws IllegalAccessException if method is inaccessible
+ * @throws javax.naming.NamingException if value is not accessible in naming context
+ * @throws java.lang.reflect.InvocationTargetException
+ * if setter call fails
+ */
+ protected static void lookupMethodResource(Context context,
+ Object instance, Method method, String name, Class<?> clazz)
+ throws NamingException, IllegalAccessException, InvocationTargetException {
+
+ if (!Introspection.isValidSetter(method)) {
+ throw new IllegalArgumentException(
+ sm.getString("defaultInstanceManager.invalidInjection"));
+ }
+
+ Object lookedupResource;
+ boolean accessibility;
+
+ String normalizedName = normalize(name);
+
+ if ((normalizedName != null) && (normalizedName.length() > 0)) {
+ lookedupResource = context.lookup(normalizedName);
+ } else {
+ lookedupResource = context.lookup(
+ clazz.getName() + "/" + Introspection.getPropertyName(method));
+ }
+
+ synchronized (method) {
+ accessibility = method.isAccessible();
+ method.setAccessible(true);
+ method.invoke(instance, lookedupResource);
+ method.setAccessible(accessibility);
+ }
+ }
+
+ @Deprecated
+ public static String getName(Method setter) {
+ // Note: method signature has already been checked for correctness.
+ // The method name always starts with "set".
+ return Introspector.decapitalize(setter.getName().substring(3));
+ }
+
+ private static void loadProperties(Set<String> classNames, String resourceName,
+ String messageKey, Log log) {
+ Properties properties = new Properties();
+ ClassLoader cl = DefaultInstanceManager.class.getClassLoader();
+ InputStream is = null;
+ try {
+ is = cl.getResourceAsStream(resourceName);
+ if (is == null) {
+ log.error(sm.getString(messageKey, resourceName));
+ } else {
+ properties.load(is);
+ }
+ } catch (IOException ioe) {
+ log.error(sm.getString(messageKey, resourceName), ioe);
+ } finally {
+ if (is != null) {
try {
- is = cl.getResourceAsStream(resourceName);
- if (is == null) {
- log.error(sm.getString(messageKey, resourceName));
- } else {
- properties.load(is);
- }
- } catch (IOException ioe) {
- log.error(sm.getString(messageKey, resourceName), ioe);
- } finally {
- if (is != null) {
- try {
- is.close();
- } catch (IOException e) {
- }
- }
- }
- if (properties.isEmpty()) {
- return;
- }
- for (Map.Entry<Object, Object> e : properties.entrySet()) {
- if ("restricted".equals(e.getValue())) {
- classNames.add(e.getKey().toString());
- } else {
- log.warn(sm.getString(
- "defaultInstanceManager.restrictedWrongValue",
- resourceName, e.getKey(), e.getValue()));
- }
+ is.close();
+ } catch (IOException e) {
}
}
-
- private static String normalize(String jndiName){
- if(jndiName != null && jndiName.startsWith("java:comp/env/")){
- return jndiName.substring(14);
- }
- return jndiName;
- }
-
- private static Method getMethod(final Class<?> clazz,
- final AnnotationCacheEntry entry) {
- Method result = null;
- if (Globals.IS_SECURITY_ENABLED) {
- result = AccessController.doPrivileged(
- new PrivilegedAction<Method>() {
- @Override
- public Method run() {
- Method result = null;
- try {
- result = clazz.getDeclaredMethod(
- entry.getAccessibleObjectName(),
- entry.getParamTypes());
- } catch (NoSuchMethodException e) {
- // Should never happen. On that basis don't log
- // it.
- }
- return result;
- }
- });
- } else {
- try {
- result = clazz.getDeclaredMethod(
- entry.getAccessibleObjectName(), entry.getParamTypes());
- } catch (NoSuchMethodException e) {
- // Should never happen. On that basis don't log it.
- }
- }
- return result;
- }
-
- private static Field getField(final Class<?> clazz,
- final AnnotationCacheEntry entry) {
- Field result = null;
- if (Globals.IS_SECURITY_ENABLED) {
- result = AccessController.doPrivileged(
- new PrivilegedAction<Field>() {
- @Override
- public Field run() {
- Field result = null;
- try {
- result = clazz.getDeclaredField(
- entry.getAccessibleObjectName());
- } catch (NoSuchFieldException e) {
- // Should never happen. On that basis don't log
- // it.
- }
- return result;
- }
- });
- } else {
- try {
- result = clazz.getDeclaredField(
- entry.getAccessibleObjectName());
- } catch (NoSuchFieldException e) {
- // Should never happen. On that basis don't log it.
- }
- }
- return result;
- }
-
-
- private static Method findPostConstruct(Method currentPostConstruct,
- String postConstructFromXml, Method method) {
- return findLifecycleCallback(currentPostConstruct,
- postConstructFromXml, method, PostConstruct.class);
- }
-
- private static Method findPreDestroy(Method currentPreDestroy,
- String preDestroyFromXml, Method method) {
- return findLifecycleCallback(currentPreDestroy,
- preDestroyFromXml, method, PreDestroy.class);
- }
-
- private static Method findLifecycleCallback(Method currentMethod,
- String methodNameFromXml, Method method,
- Class<? extends Annotation> annotation) {
- Method result = currentMethod;
- if (methodNameFromXml != null) {
- if (method.getName().equals(methodNameFromXml)) {
- if (!Introspection.isValidLifecycleCallback(method)) {
- throw new IllegalArgumentException(
- "Invalid " + annotation.getName() + " annotation");
+ }
+ if (properties.isEmpty()) {
+ return;
+ }
+ for (Map.Entry<Object, Object> e : properties.entrySet()) {
+ if ("restricted".equals(e.getValue())) {
+ classNames.add(e.getKey().toString());
+ } else {
+ log.warn(sm.getString(
+ "defaultInstanceManager.restrictedWrongValue",
+ resourceName, e.getKey(), e.getValue()));
+ }
+ }
+ }
+
+ private static String normalize(String jndiName){
+ if(jndiName != null && jndiName.startsWith("java:comp/env/")){
+ return jndiName.substring(14);
+ }
+ return jndiName;
+ }
+
+ private static Method getMethod(final Class<?> clazz,
+ final AnnotationCacheEntry entry) {
+ Method result = null;
+ if (Globals.IS_SECURITY_ENABLED) {
+ result = AccessController.doPrivileged(
+ new PrivilegedAction<Method>() {
+ @Override
+ public Method run() {
+ Method result = null;
+ try {
+ result = clazz.getDeclaredMethod(
+ entry.getAccessibleObjectName(),
+ entry.getParamTypes());
+ } catch (NoSuchMethodException e) {
+ // Should never happen. On that basis don't log
+ // it.
+ }
+ return result;
}
- result = method;
- }
- } else {
- if (method.isAnnotationPresent(annotation)) {
- if (currentMethod != null ||
- !Introspection.isValidLifecycleCallback(method)) {
- throw new IllegalArgumentException(
- "Invalid " + annotation.getName() + " annotation");
+ });
+ } else {
+ try {
+ result = clazz.getDeclaredMethod(
+ entry.getAccessibleObjectName(), entry.getParamTypes());
+ } catch (NoSuchMethodException e) {
+ // Should never happen. On that basis don't log it.
+ }
+ }
+ return result;
+ }
+
+ private static Field getField(final Class<?> clazz,
+ final AnnotationCacheEntry entry) {
+ Field result = null;
+ if (Globals.IS_SECURITY_ENABLED) {
+ result = AccessController.doPrivileged(
+ new PrivilegedAction<Field>() {
+ @Override
+ public Field run() {
+ Field result = null;
+ try {
+ result = clazz.getDeclaredField(
+ entry.getAccessibleObjectName());
+ } catch (NoSuchFieldException e) {
+ // Should never happen. On that basis don't log
+ // it.
+ }
+ return result;
}
- result = method;
- }
+ });
+ } else {
+ try {
+ result = clazz.getDeclaredField(
+ entry.getAccessibleObjectName());
+ } catch (NoSuchFieldException e) {
+ // Should never happen. On that basis don't log it.
+ }
+ }
+ return result;
+ }
+
+
+ private static Method findPostConstruct(Method currentPostConstruct,
+ String postConstructFromXml, Method method) {
+ return findLifecycleCallback(currentPostConstruct,
+ postConstructFromXml, method, PostConstruct.class);
+ }
+
+ private static Method findPreDestroy(Method currentPreDestroy,
+ String preDestroyFromXml, Method method) {
+ return findLifecycleCallback(currentPreDestroy,
+ preDestroyFromXml, method, PreDestroy.class);
+ }
+
+ private static Method findLifecycleCallback(Method currentMethod,
+ String methodNameFromXml, Method method,
+ Class<? extends Annotation> annotation) {
+ Method result = currentMethod;
+ if (methodNameFromXml != null) {
+ if (method.getName().equals(methodNameFromXml)) {
+ if (!Introspection.isValidLifecycleCallback(method)) {
+ throw new IllegalArgumentException(
+ "Invalid " + annotation.getName() + " annotation");
}
- return result;
+ result = method;
}
-
- private static final class AnnotationCacheEntry {
- private final String accessibleObjectName;
- private final Class<?>[] paramTypes;
- private final String name;
- private final AnnotationCacheEntryType type;
-
- public AnnotationCacheEntry(String accessibleObjectName,
- Class<?>[] paramTypes, String name,
- AnnotationCacheEntryType type) {
- this.accessibleObjectName = accessibleObjectName;
- this.paramTypes = paramTypes;
- this.name = name;
- this.type = type;
- }
-
- public String getAccessibleObjectName() {
- return accessibleObjectName;
- }
-
- public Class<?>[] getParamTypes() {
- return paramTypes;
- }
-
- public String getName() {
- return name;
- }
- public AnnotationCacheEntryType getType() {
- return type;
+ } else {
+ if (method.isAnnotationPresent(annotation)) {
+ if (currentMethod != null ||
+ !Introspection.isValidLifecycleCallback(method)) {
+ throw new IllegalArgumentException(
+ "Invalid " + annotation.getName() + " annotation");
}
+ result = method;
}
-
- private enum AnnotationCacheEntryType {
- FIELD, SETTER, POST_CONSTRUCT, PRE_DESTROY
- }
+ }
+ return result;
+ }
+
+ private static final class AnnotationCacheEntry {
+ private final String accessibleObjectName;
+ private final Class<?>[] paramTypes;
+ private final String name;
+ private final AnnotationCacheEntryType type;
+
+ public AnnotationCacheEntry(String accessibleObjectName,
+ Class<?>[] paramTypes, String name,
+ AnnotationCacheEntryType type) {
+ this.accessibleObjectName = accessibleObjectName;
+ this.paramTypes = paramTypes;
+ this.name = name;
+ this.type = type;
+ }
+
+ public String getAccessibleObjectName() {
+ return accessibleObjectName;
+ }
+
+ public Class<?>[] getParamTypes() {
+ return paramTypes;
+ }
+
+ public String getName() {
+ return name;
+ }
+ public AnnotationCacheEntryType getType() {
+ return type;
+ }
+ }
+
+ private enum AnnotationCacheEntryType {
+ FIELD, SETTER, POST_CONSTRUCT, PRE_DESTROY
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org