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());