Author: markt
Date: Mon Sep 19 10:11:44 2011
New Revision: 1172556
URL: http://svn.apache.org/viewvc?rev=1172556&view=rev
Log:
Always process postConstruct / preDestroy annotations but only process resource
annotations if JNDI is enabled.
Modified:
tomcat/trunk/java/org/apache/catalina/core/DefaultInstanceManager.java
Modified: tomcat/trunk/java/org/apache/catalina/core/DefaultInstanceManager.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/DefaultInstanceManager.java?rev=1172556&r1=1172555&r2=1172556&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/core/DefaultInstanceManager.java
(original)
+++ tomcat/trunk/java/org/apache/catalina/core/DefaultInstanceManager.java Mon
Sep 19 10:11:44 2011
@@ -242,62 +242,61 @@ public class DefaultInstanceManager impl
Map<String, String> injections) throws IllegalAccessException,
InvocationTargetException, NamingException {
- if (context == null) {
- // No resource injection
- return;
- }
-
while (clazz != null) {
List<AnnotationCacheEntry> annotations =
annotationCache.get(clazz);
if (annotations == null) {
annotations = new ArrayList<AnnotationCacheEntry>();
- // Initialize fields annotations
- Field[] fields = null;
- if (Globals.IS_SECURITY_ENABLED) {
- final Class<?> clazz2 = clazz;
- fields = AccessController.doPrivileged(
- new PrivilegedAction<Field[]>(){
- @Override
- public Field[] run(){
- return clazz2.getDeclaredFields();
+
+ if (context != null) {
+ // Initialize fields annotations for resource injection if
+ // JNDI is enabled
+ Field[] fields = null;
+ if (Globals.IS_SECURITY_ENABLED) {
+ final Class<?> clazz2 = clazz;
+ fields = AccessController.doPrivileged(
+ new PrivilegedAction<Field[]>(){
+ @Override
+ public Field[] run(){
+ return clazz2.getDeclaredFields();
+ }
+ });
+ } else {
+ fields = clazz.getDeclaredFields();
+ }
+ for (Field field : fields) {
+ if (injections != null &&
injections.containsKey(field.getName())) {
+ annotations.add(new AnnotationCacheEntry(field,
+ injections.get(field.getName()),
+ AnnotationCacheEntryType.FIELD));
+ } else if (field.isAnnotationPresent(Resource.class)) {
+ Resource annotation =
field.getAnnotation(Resource.class);
+ annotations.add(new AnnotationCacheEntry(field,
+ annotation.name(),
+ AnnotationCacheEntryType.FIELD));
+ } else if (field.isAnnotationPresent(EJB.class)) {
+ EJB annotation = field.getAnnotation(EJB.class);
+ annotations.add(new AnnotationCacheEntry(field,
+ annotation.name(),
+ AnnotationCacheEntryType.FIELD));
+ } else if
(field.isAnnotationPresent(WebServiceRef.class)) {
+ WebServiceRef annotation =
+ field.getAnnotation(WebServiceRef.class);
+ annotations.add(new AnnotationCacheEntry(field,
+ annotation.name(),
+ AnnotationCacheEntryType.FIELD));
+ } else if
(field.isAnnotationPresent(PersistenceContext.class)) {
+ PersistenceContext annotation =
+
field.getAnnotation(PersistenceContext.class);
+ annotations.add(new AnnotationCacheEntry(field,
+ annotation.name(),
+ AnnotationCacheEntryType.FIELD));
+ } else if
(field.isAnnotationPresent(PersistenceUnit.class)) {
+ PersistenceUnit annotation =
+ field.getAnnotation(PersistenceUnit.class);
+ annotations.add(new AnnotationCacheEntry(field,
+ annotation.name(),
+ AnnotationCacheEntryType.FIELD));
}
- });
- } else {
- fields = clazz.getDeclaredFields();
- }
- for (Field field : fields) {
- if (injections != null &&
injections.containsKey(field.getName())) {
- annotations.add(new AnnotationCacheEntry(field,
- injections.get(field.getName()),
- AnnotationCacheEntryType.FIELD));
- } else if (field.isAnnotationPresent(Resource.class)) {
- Resource annotation =
field.getAnnotation(Resource.class);
- annotations.add(new AnnotationCacheEntry(field,
- annotation.name(),
- AnnotationCacheEntryType.FIELD));
- } else if (field.isAnnotationPresent(EJB.class)) {
- EJB annotation = field.getAnnotation(EJB.class);
- annotations.add(new AnnotationCacheEntry(field,
- annotation.name(),
- AnnotationCacheEntryType.FIELD));
- } else if (field.isAnnotationPresent(WebServiceRef.class))
{
- WebServiceRef annotation =
- field.getAnnotation(WebServiceRef.class);
- annotations.add(new AnnotationCacheEntry(field,
- annotation.name(),
- AnnotationCacheEntryType.FIELD));
- } else if
(field.isAnnotationPresent(PersistenceContext.class)) {
- PersistenceContext annotation =
- field.getAnnotation(PersistenceContext.class);
- annotations.add(new AnnotationCacheEntry(field,
- annotation.name(),
- AnnotationCacheEntryType.FIELD));
- } else if
(field.isAnnotationPresent(PersistenceUnit.class)) {
- PersistenceUnit annotation =
- field.getAnnotation(PersistenceUnit.class);
- annotations.add(new AnnotationCacheEntry(field,
- annotation.name(),
- AnnotationCacheEntryType.FIELD));
}
}
@@ -319,44 +318,47 @@ public class DefaultInstanceManager impl
Method preDestroy = null;
for (Method method : methods) {
String methodName = method.getName();
- if (injections != null && methodName.startsWith("set") &&
methodName.length() > 3) {
- String fieldName =
Character.toLowerCase(methodName.charAt(3)) + methodName.substring(4);
- if (injections.containsKey(fieldName)) {
+ if (context != null) {
+ // Resource injection only if JNDI is enabled
+ if (injections != null && methodName.startsWith("set")
&& methodName.length() > 3) {
+ String fieldName =
Character.toLowerCase(methodName.charAt(3)) + methodName.substring(4);
+ if (injections.containsKey(fieldName)) {
+ annotations.add(new
AnnotationCacheEntry(method,
+ injections.get(method.getName()),
+ AnnotationCacheEntryType.FIELD));
+ break;
+ }
+ }
+ if (method.isAnnotationPresent(Resource.class)) {
+ Resource annotation =
method.getAnnotation(Resource.class);
+ annotations.add(new AnnotationCacheEntry(method,
+ annotation.name(),
+ AnnotationCacheEntryType.FIELD));
+ } else if (method.isAnnotationPresent(EJB.class)) {
+ EJB annotation = method.getAnnotation(EJB.class);
annotations.add(new AnnotationCacheEntry(method,
- injections.get(method.getName()),
+ annotation.name(),
+ AnnotationCacheEntryType.FIELD));
+ } else if
(method.isAnnotationPresent(WebServiceRef.class)) {
+ WebServiceRef annotation =
+ method.getAnnotation(WebServiceRef.class);
+ annotations.add(new AnnotationCacheEntry(method,
+ annotation.name(),
+ AnnotationCacheEntryType.FIELD));
+ } else if
(method.isAnnotationPresent(PersistenceContext.class)) {
+ PersistenceContext annotation =
+
method.getAnnotation(PersistenceContext.class);
+ annotations.add(new AnnotationCacheEntry(method,
+ annotation.name(),
+ AnnotationCacheEntryType.FIELD));
+ } else if
(method.isAnnotationPresent(PersistenceUnit.class)) {
+ PersistenceUnit annotation =
+
method.getAnnotation(PersistenceUnit.class);
+ annotations.add(new AnnotationCacheEntry(method,
+ annotation.name(),
AnnotationCacheEntryType.FIELD));
- break;
}
}
- if (method.isAnnotationPresent(Resource.class)) {
- Resource annotation =
method.getAnnotation(Resource.class);
- annotations.add(new AnnotationCacheEntry(method,
- annotation.name(),
- AnnotationCacheEntryType.FIELD));
- } else if (method.isAnnotationPresent(EJB.class)) {
- EJB annotation = method.getAnnotation(EJB.class);
- annotations.add(new AnnotationCacheEntry(method,
- annotation.name(),
- AnnotationCacheEntryType.FIELD));
- } else if
(method.isAnnotationPresent(WebServiceRef.class)) {
- WebServiceRef annotation =
- method.getAnnotation(WebServiceRef.class);
- annotations.add(new AnnotationCacheEntry(method,
- annotation.name(),
- AnnotationCacheEntryType.FIELD));
- } else if
(method.isAnnotationPresent(PersistenceContext.class)) {
- PersistenceContext annotation =
- method.getAnnotation(PersistenceContext.class);
- annotations.add(new AnnotationCacheEntry(method,
- annotation.name(),
- AnnotationCacheEntryType.FIELD));
- } else if
(method.isAnnotationPresent(PersistenceUnit.class)) {
- PersistenceUnit annotation =
- method.getAnnotation(PersistenceUnit.class);
- annotations.add(new AnnotationCacheEntry(method,
- annotation.name(),
- AnnotationCacheEntryType.FIELD));
- }
if (method.isAnnotationPresent(PostConstruct.class)) {
if ((postConstruct != null) ||
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]