tomcat-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ma...@apache.org
Subject svn commit: r706159 - /tomcat/trunk/java/org/apache/catalina/core/DefaultInstanceManager.java
Date Mon, 20 Oct 2008 09:11:55 GMT
Author: markt
Date: Mon Oct 20 02:11:55 2008
New Revision: 706159

URL: http://svn.apache.org/viewvc?rev=706159&view=rev
Log:
Default JNDI name for annotation lookup should be based on the class where the annotation
was found which isn't always the class of the instance being created.
Reported as part of the follow-up to https://issues.apache.org/bugzilla/show_bug.cgi?id=45285
Based on a patch for 6.0.x provided by Florent BENOIT.

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=706159&r1=706158&r2=706159&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/core/DefaultInstanceManager.java (original)
+++ tomcat/trunk/java/org/apache/catalina/core/DefaultInstanceManager.java Mon Oct 20 02:11:55
2008
@@ -252,25 +252,31 @@
             Field[] fields = clazz.getDeclaredFields();
             for (Field field : fields) {
                 if (injections != null && injections.containsKey(field.getName()))
{
-                    lookupFieldResource(context, instance, field, injections.get(field.getName()));
+                    lookupFieldResource(context, instance, field,
+                            injections.get(field.getName()), clazz);
                 } else if (field.isAnnotationPresent(Resource.class)) {
                     Resource annotation = field.getAnnotation(Resource.class);
-                    lookupFieldResource(context, instance, field, annotation.name());
+                    lookupFieldResource(context, instance, field,
+                            annotation.name(), clazz);
                 } else if (field.isAnnotationPresent(EJB.class)) {
                     EJB annotation = field.getAnnotation(EJB.class);
-                    lookupFieldResource(context, instance, field, annotation.name());
+                    lookupFieldResource(context, instance, field,
+                            annotation.name(), clazz);
                 } else if (field.isAnnotationPresent(WebServiceRef.class)) {
                     WebServiceRef annotation =
                             field.getAnnotation(WebServiceRef.class);
-                    lookupFieldResource(context, instance, field, annotation.name());
+                    lookupFieldResource(context, instance, field,
+                            annotation.name(), clazz);
                 } else if (field.isAnnotationPresent(PersistenceContext.class)) {
                     PersistenceContext annotation =
                             field.getAnnotation(PersistenceContext.class);
-                    lookupFieldResource(context, instance, field, annotation.name());
+                    lookupFieldResource(context, instance, field,
+                            annotation.name(), clazz);
                 } else if (field.isAnnotationPresent(PersistenceUnit.class)) {
                     PersistenceUnit annotation =
                             field.getAnnotation(PersistenceUnit.class);
-                    lookupFieldResource(context, instance, field, annotation.name());
+                    lookupFieldResource(context, instance, field,
+                            annotation.name(), clazz);
                 }
             }
     
@@ -281,28 +287,34 @@
                 if (injections != null && methodName.startsWith("set") &&
methodName.length() > 3) {
                     String fieldName = Character.toLowerCase(methodName.charAt(3)) + methodName.substring(4);
                     if (injections.containsKey(fieldName)) {
-                        lookupMethodResource(context, instance, method, injections.get(fieldName));
+                        lookupMethodResource(context, instance, method,
+                                injections.get(fieldName), clazz);
                         break;
                     }
                 }
                 if (method.isAnnotationPresent(Resource.class)) {
                     Resource annotation = method.getAnnotation(Resource.class);
-                    lookupMethodResource(context, instance, method, annotation.name());
+                    lookupMethodResource(context, instance, method,
+                            annotation.name(), clazz);
                 } else if (method.isAnnotationPresent(EJB.class)) {
                     EJB annotation = method.getAnnotation(EJB.class);
-                    lookupMethodResource(context, instance, method, annotation.name());
+                    lookupMethodResource(context, instance, method,
+                            annotation.name(), clazz);
                 } else if (method.isAnnotationPresent(WebServiceRef.class)) {
                     WebServiceRef annotation =
                             method.getAnnotation(WebServiceRef.class);
-                    lookupMethodResource(context, instance, method, annotation.name());
+                    lookupMethodResource(context, instance, method,
+                            annotation.name(), clazz);
                 } else if (method.isAnnotationPresent(PersistenceContext.class)) {
                     PersistenceContext annotation =
                             method.getAnnotation(PersistenceContext.class);
-                    lookupMethodResource(context, instance, method, annotation.name());
+                    lookupMethodResource(context, instance, method,
+                            annotation.name(), clazz);
                 } else if (method.isAnnotationPresent(PersistenceUnit.class)) {
                     PersistenceUnit annotation =
                             method.getAnnotation(PersistenceUnit.class);
-                    lookupMethodResource(context, instance, method, annotation.name());
+                    lookupMethodResource(context, instance, method,
+                            annotation.name(), clazz);
                 }
             }
             clazz = clazz.getSuperclass();
@@ -378,11 +390,12 @@
      * @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)
+            Object instance, Field field, String name, Class<?> clazz)
             throws NamingException, IllegalAccessException {
 
         Object lookedupResource;
@@ -392,7 +405,8 @@
                 (name.length() > 0)) {
             lookedupResource = context.lookup(name);
         } else {
-            lookedupResource = context.lookup(instance.getClass().getName() + "/" + field.getName());
+            lookedupResource =
+                context.lookup(clazz.getName() + "/" + field.getName());
         }
 
         accessibility = field.isAccessible();
@@ -408,13 +422,14 @@
      * @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)
+            Object instance, Method method, String name, Class<?> clazz)
             throws NamingException, IllegalAccessException, InvocationTargetException {
 
         if (!method.getName().startsWith("set")
@@ -430,8 +445,8 @@
                 (name.length() > 0)) {
             lookedupResource = context.lookup(name);
         } else {
-            lookedupResource =
-                    context.lookup(instance.getClass().getName() + "/" + method.getName().substring(3));
+            lookedupResource = context.lookup(
+                    clazz.getName() + "/" + method.getName().substring(3));
         }
 
         accessibility = method.isAccessible();



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org


Mime
View raw message