Author: rmannibucau
Date: Wed May  9 10:58:35 2012
New Revision: 1336080

URL: http://svn.apache.org/viewvc?rev=1336080&view=rev
Log:
TOMEE-189 some fallbacks to make basic ear/cdi app working

Modified:
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/Injection.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/InjectionProcessor.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/AppInfo.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/InjectionBuilder.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiBuilder.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiResourceInjectionService.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiScanner.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/StartupObject.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AppInfoBuilder.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AppModule.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java
    
openejb/trunk/openejb/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/JndiRequestHandler.java
    
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/Injection.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/Injection.java?rev=1336080&r1=1336079&r2=1336080&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/Injection.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/Injection.java
 Wed May  9 10:58:35 2012
@@ -20,7 +20,8 @@ package org.apache.openejb;
  * @version $Rev$ $Date$
  */
 public class Injection {
-    private final Class target;
+    private Class target;
+    private final String classname;
     private final String name;
     private final String jndiName;
 
@@ -28,6 +29,14 @@ public class Injection {
         this.jndiName = jndiName;
         this.name = name;
         this.target = target;
+        this.classname = target.getName();
+    }
+
+    public Injection(String jndiName, String name, String classname) {
+        this.jndiName = jndiName;
+        this.name = name;
+        this.classname = classname;
+        this.target = null;
     }
 
     public String getJndiName() {
@@ -42,10 +51,18 @@ public class Injection {
         return target;
     }
 
+    public void setTarget(Class<?> target) {
+        this.target = target;
+    }
+
+    public String getClassname() {
+        return classname;
+    }
+
     @Override
     public String toString() {
         return "Injection{" +
-                "target=" + ((target != null) ? target.getName() : null) +
+                "target=" + classname +
                 ", name='" + name + '\'' +
                 ", jndiName='" + jndiName + '\'' +
                 '}';
@@ -59,14 +76,14 @@ public class Injection {
         Injection injection = (Injection) o;
 
         if (name != null ? !name.equals(injection.name) : injection.name != 
null) return false;
-        if (target != null ? !target.equals(injection.target) : 
injection.target != null) return false;
+        if (classname != null ? !classname.equals(injection.classname) : 
injection.classname != null) return false;
 
         return true;
     }
 
     @Override
     public int hashCode() {
-        int result = target != null ? target.hashCode() : 0;
+        int result = classname != null ? classname.hashCode() : 0;
         result = 31 * result + (name != null ? name.hashCode() : 0);
         return result;
     }

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/InjectionProcessor.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/InjectionProcessor.java?rev=1336080&r1=1336079&r2=1336080&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/InjectionProcessor.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/InjectionProcessor.java
 Wed May  9 10:58:35 2012
@@ -176,6 +176,7 @@ public class InjectionProcessor<T> {
         if (suppliedInstance != null) clazz = suppliedInstance.getClass();
 
         for (Injection injection : injections) {
+            if (injection.getTarget() == null) continue;
             if (!injection.getTarget().isAssignableFrom(clazz)) continue;
             try {
                 String jndiName = injection.getJndiName();

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/AppInfo.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/AppInfo.java?rev=1336080&r1=1336079&r2=1336080&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/AppInfo.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/AppInfo.java
 Wed May  9 10:58:35 2012
@@ -42,4 +42,5 @@ public class AppInfo extends InfoObject 
     public String cmpMappingsXml;
     public final Properties jmx = new Properties();
     public final Set<String> mbeans = new TreeSet<String>();
+    public boolean webAppAlone;
 }

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/InjectionBuilder.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/InjectionBuilder.java?rev=1336080&r1=1336079&r2=1336080&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/InjectionBuilder.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/InjectionBuilder.java
 Wed May  9 10:58:35 2012
@@ -34,112 +34,56 @@ public class InjectionBuilder {
         List<Injection> injections = new ArrayList<Injection>();
         for (EnvEntryInfo info : jndiEnc.envEntries) {
             for (InjectionInfo target : info.targets) {
-                final Class<?> targetClass;
-                try {
-                    targetClass = loadClass(target.className);
-                } catch (OpenEJBException ex) {
-                    continue;
-                }
-
-                Injection injection = new Injection(info.referenceName, 
target.propertyName, targetClass);
+                Injection injection = injection(info.referenceName, 
target.propertyName, target.className);
                 injections.add(injection);
             }
         }
 
         for (EjbReferenceInfo info : jndiEnc.ejbReferences) {
             for (InjectionInfo target : info.targets) {
-                final Class<?> targetClass;
-                try {
-                    targetClass = loadClass(target.className);
-                } catch (OpenEJBException ex) {
-                    continue;
-                }
-
-                Injection injection = new Injection(info.referenceName, 
target.propertyName, targetClass);
+                Injection injection = injection(info.referenceName, 
target.propertyName, target.className);
                 injections.add(injection);
             }
         }
 
         for (EjbReferenceInfo info : jndiEnc.ejbLocalReferences) {
             for (InjectionInfo target : info.targets) {
-                final Class<?> targetClass;
-                try {
-                    targetClass = loadClass(target.className);
-                } catch (OpenEJBException ex) {
-                    continue;
-                }
-
-                Injection injection = new Injection(info.referenceName, 
target.propertyName, targetClass);
+                Injection injection = injection(info.referenceName, 
target.propertyName, target.className);
                 injections.add(injection);
             }
         }
 
         for (PersistenceUnitReferenceInfo info : jndiEnc.persistenceUnitRefs) {
             for (InjectionInfo target : info.targets) {
-                final Class<?> targetClass;
-                try {
-                    targetClass = loadClass(target.className);
-                } catch (OpenEJBException ex) {
-                    continue;
-                }
-
-                Injection injection = new Injection(info.referenceName, 
target.propertyName, targetClass);
+                Injection injection = injection(info.referenceName, 
target.propertyName, target.className);
                 injections.add(injection);
             }
         }
 
         for (PersistenceContextReferenceInfo info : 
jndiEnc.persistenceContextRefs) {
             for (InjectionInfo target : info.targets) {
-                final Class<?> targetClass;
-                try {
-                    targetClass = loadClass(target.className);
-                } catch (OpenEJBException ex) {
-                    continue;
-                }
-
-                Injection injection = new Injection(info.referenceName, 
target.propertyName, targetClass);
+                Injection injection = injection(info.referenceName, 
target.propertyName, target.className);
                 injections.add(injection);
             }
         }
 
         for (ResourceReferenceInfo info : jndiEnc.resourceRefs) {
             for (InjectionInfo target : info.targets) {
-                final Class<?> targetClass;
-                try {
-                    targetClass = loadClass(target.className);
-                } catch (OpenEJBException ex) {
-                    continue;
-                }
-
-                Injection injection = new Injection(info.referenceName, 
target.propertyName, targetClass);
+                Injection injection = injection(info.referenceName, 
target.propertyName, target.className);
                 injections.add(injection);
             }
         }
 
         for (ResourceEnvReferenceInfo info : jndiEnc.resourceEnvRefs) {
             for (InjectionInfo target : info.targets) {
-                final Class<?> targetClass;
-                try {
-                    targetClass = loadClass(target.className);
-                } catch (OpenEJBException ex) {
-                    continue;
-                }
-
-                Injection injection = new Injection(info.referenceName, 
target.propertyName, targetClass);
+                Injection injection = injection(info.referenceName, 
target.propertyName, target.className);
                 injections.add(injection);
             }
         }
 
         for (ServiceReferenceInfo info : jndiEnc.serviceRefs) {
             for (InjectionInfo target : info.targets) {
-                final Class<?> targetClass;
-                try {
-                    targetClass = loadClass(target.className);
-                } catch (OpenEJBException ex) {
-                    continue;
-                }
-
-                Injection injection = new Injection(info.referenceName, 
target.propertyName, targetClass);
+                Injection injection = injection(info.referenceName, 
target.propertyName, target.className);
                 injections.add(injection);
             }
         }
@@ -147,6 +91,20 @@ public class InjectionBuilder {
         return injections;
     }
 
+    private Injection injection(String referenceName, String propertyName, 
String className) {
+        Class<?> targetClass;
+        try {
+            targetClass = loadClass(className);
+        } catch (OpenEJBException ex) {
+            targetClass = null;
+        }
+
+        if (targetClass == null) {
+            return new Injection(referenceName, propertyName, className);
+        }
+        return new Injection(referenceName, propertyName, targetClass);
+    }
+
     private Class loadClass(String className) throws OpenEJBException {
         try {
             Class clazz = Class.forName(className, true, classLoader);

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiBuilder.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiBuilder.java?rev=1336080&r1=1336079&r2=1336080&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiBuilder.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiBuilder.java
 Wed May  9 10:58:35 2012
@@ -23,13 +23,14 @@ import org.apache.openejb.BeanContext;
 import org.apache.openejb.assembler.classic.AppInfo;
 import org.apache.openejb.assembler.classic.EjbJarInfo;
 import org.apache.openejb.core.ThreadContext;
+import org.apache.openejb.core.WebContext;
 import org.apache.openejb.loader.SystemInstance;
 import org.apache.webbeans.config.WebBeansContext;
 import org.apache.webbeans.config.WebBeansFinder;
 import org.apache.webbeans.logger.WebBeansLogger;
 
 /**
- * @version $Rev$ $Date$
+ * @version $Rev$ $Date$C
  */
 public class CdiBuilder {
     private static final WebBeansLogger logger = 
WebBeansLogger.getLogger(CdiBuilder.class);
@@ -38,7 +39,10 @@ public class CdiBuilder {
     }
 
     public void build(AppInfo appInfo, AppContext appContext, 
List<BeanContext> allDeployments) {
+        initSingleton().initialize(new StartupObject(appContext, appInfo, 
allDeployments));
+    }
 
+    private ThreadSingletonService initSingleton() {
         ThreadContext.addThreadContextListener(new 
RequestScopedThreadContextListener());
         ThreadSingletonService singletonService = 
SystemInstance.get().getComponent(ThreadSingletonService.class);
         logger.info("existing thread singleton service in SystemInstance() " + 
singletonService);
@@ -47,7 +51,12 @@ public class CdiBuilder {
         if (singletonService == null) {
             singletonService = initializeOWB(getClass().getClassLoader());
         }
-        singletonService.initialize(new StartupObject(appContext, appInfo, 
allDeployments));
+        return singletonService;
+    }
+
+    public void build(AppInfo appInfo, AppContext appContext, 
List<BeanContext> allDeployments, WebContext webContext) {
+        ThreadSingletonService singletonService = initSingleton();
+        singletonService.initialize(new StartupObject(appContext, appInfo, 
allDeployments, webContext));
     }
 
     private boolean hasBeans(AppInfo appInfo) {

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiResourceInjectionService.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiResourceInjectionService.java?rev=1336080&r1=1336079&r2=1336080&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiResourceInjectionService.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiResourceInjectionService.java
 Wed May  9 10:58:35 2012
@@ -107,6 +107,7 @@ public class CdiResourceInjectionService
         for (BeanContext beanContext : compContexts) {
 
             for (Injection injection : beanContext.getInjections()) {
+                if (injection.getTarget() == null) continue;
                 if (!injection.getTarget().isAssignableFrom(clazz)) continue;
                 try {
                     Object value = lookup(beanContext, injection);

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiScanner.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiScanner.java?rev=1336080&r1=1336079&r2=1336080&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiScanner.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiScanner.java
 Wed May  9 10:58:35 2012
@@ -21,14 +21,17 @@ package org.apache.openejb.cdi;
 import java.net.URL;
 import java.util.Collections;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Set;
 
 import javax.interceptor.Interceptor;
 
+import org.apache.openejb.AppContext;
 import org.apache.openejb.assembler.classic.AppInfo;
 import org.apache.openejb.assembler.classic.BeansInfo;
 import org.apache.openejb.assembler.classic.EjbJarInfo;
 import org.apache.openejb.assembler.classic.EnterpriseBeanInfo;
+import org.apache.openejb.core.WebContext;
 import org.apache.webbeans.annotation.AnnotationManager;
 import org.apache.webbeans.config.WebBeansContext;
 import org.apache.webbeans.decorator.DecoratorsManager;
@@ -59,7 +62,7 @@ public class CdiScanner implements Scann
         }
         StartupObject startupObject = (StartupObject) object;
         AppInfo appInfo = startupObject.getAppInfo();
-        ClassLoader classLoader = 
startupObject.getAppContext().getClassLoader();
+        ClassLoader classLoader = startupObject.getClassLoader();
 
         WebBeansContext webBeansContext = 
startupObject.getAppContext().getWebBeansContext();
         final AlternativesManager alternativesManager = 
webBeansContext.getAlternativesManager();

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/StartupObject.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/StartupObject.java?rev=1336080&r1=1336079&r2=1336080&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/StartupObject.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/StartupObject.java
 Wed May  9 10:58:35 2012
@@ -23,6 +23,8 @@ import java.util.List;
 import org.apache.openejb.AppContext;
 import org.apache.openejb.BeanContext;
 import org.apache.openejb.assembler.classic.AppInfo;
+import org.apache.openejb.core.WebContext;
+import org.apache.webbeans.config.WebBeansContext;
 
 /**
  * @version $Rev:$ $Date:$
@@ -31,8 +33,13 @@ public class StartupObject {
     private final AppInfo appInfo;
     private final AppContext appContext;
     private final List<BeanContext> beanContexts;
+    private final WebContext webContext;
 
     public StartupObject(AppContext appContext, AppInfo appInfo, 
List<BeanContext> beanContexts) {
+        this(appContext, appInfo, beanContexts, null);
+    }
+
+    public StartupObject(AppContext appContext, AppInfo appInfo, 
List<BeanContext> beanContexts, WebContext webContext) {
         assert appContext != null;
         assert appInfo != null;
         assert beanContexts != null;
@@ -40,6 +47,7 @@ public class StartupObject {
         this.appContext = appContext;
         this.appInfo = appInfo;
         this.beanContexts = beanContexts;
+        this.webContext = webContext;
     }
 
     public AppContext getAppContext() {
@@ -53,4 +61,15 @@ public class StartupObject {
     public List<BeanContext> getBeanContexts() {
         return beanContexts;
     }
+
+    public WebContext getWebContext() {
+        return webContext;
+    }
+
+    public ClassLoader getClassLoader() {
+        if (webContext != null) {
+            return webContext.getClassLoader();
+        }
+        return appContext.getClassLoader();
+    }
 }

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AppInfoBuilder.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AppInfoBuilder.java?rev=1336080&r1=1336079&r2=1336080&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AppInfoBuilder.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AppInfoBuilder.java
 Wed May  9 10:58:35 2012
@@ -266,6 +266,9 @@ class AppInfoBuilder {
         reportValidationResults.deploy(appModule);
 
         logger.info("config.appLoaded", appInfo.path);
+
+        appInfo.webAppAlone = appModule.isWebapp();
+
         return appInfo;
 
     }

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AppModule.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AppModule.java?rev=1336080&r1=1336079&r2=1336080&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AppModule.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AppModule.java
 Wed May  9 10:58:35 2012
@@ -57,6 +57,7 @@ public class AppModule implements Deploy
     private final Set<String> additionalLibMbeans = new TreeSet<String>();
 
     private ID id;
+    private boolean webapp = false;
 
     public AppModule(ClassLoader classLoader, String jarLocation) {
         this(classLoader, jarLocation, null, false);
@@ -278,4 +279,11 @@ public class AppModule implements Deploy
                 '}';
     }
 
+    public void setStandloneWebModule() {
+        webapp = true;
+    }
+
+    public boolean isWebapp() {
+        return webapp;
+    }
 }

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java?rev=1336080&r1=1336079&r2=1336080&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java
 Wed May  9 10:58:35 2012
@@ -201,6 +201,7 @@ public class DeploymentLoader implements
                 addWebPersistenceDD("persistence.xml", otherDD, appModule);
                 addWebPersistenceDD("persistence-fragment.xml", otherDD, 
appModule);
                 addPersistenceUnits(appModule, baseUrl);
+                appModule.setStandloneWebModule();
                 return appModule;
             }
 

Modified: 
openejb/trunk/openejb/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/JndiRequestHandler.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/JndiRequestHandler.java?rev=1336080&r1=1336079&r2=1336080&view=diff
==============================================================================
--- 
openejb/trunk/openejb/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/JndiRequestHandler.java
 (original)
+++ 
openejb/trunk/openejb/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/JndiRequestHandler.java
 Wed May  9 10:58:35 2012
@@ -197,6 +197,7 @@ class JndiRequestHandler {
                 List<Injection> injections = (List<Injection>) 
rootContext.lookup(prefix + name);
                 InjectionMetaData metaData = new InjectionMetaData();
                 for (Injection injection : injections) {
+                    if (injection.getTarget() == null) continue;
                     metaData.addInjection(injection.getTarget().getName(), 
injection.getName(), injection.getJndiName());
                 }
                 res.setResponseCode(ResponseCodes.JNDI_INJECTIONS);

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=1336080&r1=1336079&r2=1336080&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
 Wed May  9 10:58:35 2012
@@ -16,6 +16,9 @@
  */
 package org.apache.tomee.catalina;
 
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
 import org.apache.catalina.Container;
 import org.apache.catalina.Engine;
 import org.apache.catalina.Host;
@@ -36,6 +39,7 @@ import org.apache.catalina.deploy.Contex
 import org.apache.catalina.deploy.ContextResourceLink;
 import org.apache.catalina.deploy.ContextTransaction;
 import org.apache.catalina.deploy.NamingResources;
+import org.apache.catalina.loader.StandardClassLoader;
 import org.apache.catalina.loader.WebappClassLoader;
 import org.apache.catalina.startup.Constants;
 import org.apache.catalina.startup.ContextConfig;
@@ -44,9 +48,11 @@ import org.apache.catalina.startup.Realm
 import org.apache.naming.ContextAccessController;
 import org.apache.naming.ContextBindings;
 import org.apache.openejb.AppContext;
+import org.apache.openejb.BeanContext;
 import org.apache.openejb.Injection;
 import org.apache.openejb.OpenEJBException;
 import org.apache.openejb.assembler.classic.*;
+import org.apache.openejb.cdi.CdiBuilder;
 import org.apache.openejb.config.AppModule;
 import org.apache.openejb.config.ConfigurationFactory;
 import org.apache.openejb.config.DeploymentLoader;
@@ -676,6 +682,13 @@ public class TomcatWebAppBuilder impleme
                 // determine the injections
                 final Set<Injection> injections = new HashSet<Injection>();
                 injections.addAll(appContext.getInjections());
+
+                if (!contextInfo.appInfo.webAppAlone) {
+                    updateInjections(injections, classLoader);
+                    for (BeanContext bean : appContext.getBeanContexts()) { // 
TODO: how if the same class in multiple webapps?
+                        updateInjections(bean.getInjections(), classLoader);
+                    }
+                }
                 injections.addAll(new 
InjectionBuilder(classLoader).buildInjections(webAppInfo.jndiEnc));
 
                 // jndi bindings
@@ -696,6 +709,10 @@ public class TomcatWebAppBuilder impleme
                 appContext.getWebContexts().add(webContext);
                 cs.addWebContext(webContext);
 
+                if (!contextInfo.appInfo.webAppAlone) {
+                    new CdiBuilder().build(contextInfo.appInfo, appContext, 
appContext.getBeanContexts(), webContext);
+                }
+
                 standardContext.setInstanceManager(new 
JavaeeInstanceManager(webContext, standardContext));
                 
standardContext.getServletContext().setAttribute(InstanceManager.class.getName(),
 standardContext.getInstanceManager());
 
@@ -717,6 +734,21 @@ public class TomcatWebAppBuilder impleme
         }
     }
 
+    private static void updateInjections(Collection<Injection> injections, 
ClassLoader classLoader) {
+        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);
+                } catch (ClassNotFoundException cnfe) {
+                    it.remove();
+                }
+            }
+        }
+    }
+
     private static void undeploy(final StandardContext standardContext, final 
ContextInfo contextInfo) {
         if (isReady(contextInfo.deployer)) {
             contextInfo.deployer.unmanageApp(standardContext.getName());


Reply via email to