Author: rmannibucau
Date: Sun May 13 20:21:24 2012
New Revision: 1337979

URL: http://svn.apache.org/viewvc?rev=1337979&view=rev
Log:
TOMEE-189 for ejb injections adding a new one when the target is loaded from 
the webapp, this way 2 webapps in an ear should be able to get the 'same' 
injection

Modified:
    
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java

Modified: 
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java?rev=1337979&r1=1337978&r2=1337979&view=diff
==============================================================================
--- 
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
 (original)
+++ 
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
 Sun May 13 20:21:24 2012
@@ -684,9 +684,9 @@ public class TomcatWebAppBuilder impleme
                 injections.addAll(appContext.getInjections());
 
                 if (!contextInfo.appInfo.webAppAlone) {
-                    updateInjections(injections, classLoader);
+                    updateInjections(injections, classLoader, false);
                     for (BeanContext bean : appContext.getBeanContexts()) { // 
TODO: how if the same class in multiple webapps?
-                        updateInjections(bean.getInjections(), classLoader);
+                        updateInjections(bean.getInjections(), classLoader, 
true);
                     }
                 }
                 injections.addAll(new 
InjectionBuilder(classLoader).buildInjections(webAppInfo.jndiEnc));
@@ -735,14 +735,19 @@ public class TomcatWebAppBuilder impleme
         }
     }
 
-    private static void updateInjections(Collection<Injection> injections, 
ClassLoader classLoader) {
+    private static void updateInjections(Collection<Injection> injections, 
ClassLoader classLoader, boolean keepInjection) {
         final Iterator<Injection> it = injections.iterator();
         while (it.hasNext()) { // update not loaded injections for classloader 
issues or remove them
             final Injection injection = it.next();
             if (injection.getTarget() == null) {
                 try {
                     final Class<?> target = 
classLoader.loadClass(injection.getClassname());
-                    injection.setTarget(target);
+                    if (keepInjection) {
+                        final Injection added = new 
Injection(injection.getJndiName(), injection.getName(), target);
+                        injections.add(added);
+                    } else {
+                        injection.setTarget(target);
+                    }
                 } catch (ClassNotFoundException cnfe) {
                     it.remove();
                 }


Reply via email to