You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by db...@apache.org on 2011/09/20 14:22:27 UTC
svn commit: r1173108 - in /openejb/trunk/openejb3:
assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/
assembly/openejb-tomcat/tomee-embedded/
container/openejb-core/src/main/java/org/apache/openejb/ contai...
Author: dblevins
Date: Tue Sep 20 12:22:27 2011
New Revision: 1173108
URL: http://svn.apache.org/viewvc?rev=1173108&view=rev
Log:
For any EjbModules that have CDI enabled, create a 'Comp' ManagedMean to hold all the java:comp level bindings created by CDI beans
Allows for a consistent "shared module" scope feel for CDI even when in or out of the embedded container or a webapp
As well injection and lookup can now more accurately take place against this larger namespace (as a fallback)
A bunch of the old code still pending delete
Better scanning for META-INF/beans.xml files.
Stronger error detection for LinkageErrorProtection
Modified:
openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/LinkageErrorProtection.java
openejb/trunk/openejb3/assembly/openejb-tomcat/tomee-embedded/pom.xml
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiResourceInjectionService.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/cdi/OpenEJBLifecycle.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java
openejb/trunk/openejb3/tck/cdi-tomee-embedded/src/test/resources/passing.xml
openejb/trunk/openejb3/tck/cdi-tomee/src/test/resources/passing.xml
Modified: openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/LinkageErrorProtection.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/LinkageErrorProtection.java?rev=1173108&r1=1173107&r2=1173108&view=diff
==============================================================================
--- openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/LinkageErrorProtection.java (original)
+++ openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/LinkageErrorProtection.java Tue Sep 20 12:22:27 2011
@@ -89,9 +89,12 @@ public class LinkageErrorProtection {
};
for (String className : classNames) {
- load(className, standardContext);
+ try {
+ load(className, standardContext);
+ } catch (Throwable e) {
+ }
}
- } catch (Exception e) {
+ } catch (Throwable e) {
// not critical, this is only to avoid possible jsp LinkageError in Oracle JDK 1.6
}
}
@@ -101,6 +104,7 @@ public class LinkageErrorProtection {
try {
classLoader.loadClass(className);
} catch (ClassNotFoundException e) {
+ } catch (LinkageError e) {
try {
classLoader.loadClass(className);
} catch (ClassNotFoundException e2) {
Modified: openejb/trunk/openejb3/assembly/openejb-tomcat/tomee-embedded/pom.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/assembly/openejb-tomcat/tomee-embedded/pom.xml?rev=1173108&r1=1173107&r2=1173108&view=diff
==============================================================================
--- openejb/trunk/openejb3/assembly/openejb-tomcat/tomee-embedded/pom.xml (original)
+++ openejb/trunk/openejb3/assembly/openejb-tomcat/tomee-embedded/pom.xml Tue Sep 20 12:22:27 2011
@@ -75,39 +75,53 @@
<dependency>
<groupId>org.apache.openwebbeans</groupId>
<artifactId>openwebbeans-jsf</artifactId>
+ <scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.myfaces.core</groupId>
<artifactId>myfaces-impl</artifactId>
<version>2.1.2</version>
+ <scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.myfaces.core</groupId>
<artifactId>myfaces-api</artifactId>
<version>2.1.2</version>
+ <scope>compile</scope>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
+ <scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-catalina</artifactId>
<version>${tomcat.version}</version>
+ <scope>compile</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tomcat</groupId>
+ <artifactId>tomcat-catalina-ha</artifactId>
+ <version>${tomcat.version}</version>
+ <scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-coyote</artifactId>
<version>${tomcat.version}</version>
+ <scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-jasper</artifactId>
<version>${tomcat.version}</version>
+ <scope>compile</scope>
<exclusions>
<exclusion>
<groupId>org.eclipse.jdt.core.compiler</groupId>
@@ -142,11 +156,13 @@
<artifactId>ecj</artifactId>
<version>3.5.1</version>
<type>jar</type>
+ <scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>javaee-api</artifactId>
<version>6.0-1</version>
+ <scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java?rev=1173108&r1=1173107&r2=1173108&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java Tue Sep 20 12:22:27 2011
@@ -48,6 +48,7 @@ import org.apache.webbeans.context.creat
import org.apache.webbeans.inject.AbstractInjectable;
import org.apache.xbean.recipe.ConstructionException;
+import javax.annotation.ManagedBean;
import javax.ejb.EJBHome;
import javax.ejb.EJBLocalHome;
import javax.ejb.EJBLocalObject;
@@ -107,6 +108,15 @@ public class BeanContext extends Deploym
public interface Timeout {
}
+
+ /**
+ * This ManagedBean is added to all EjbModules to effectively
+ * create a sharable "comp" namespace which can be used in
+ * for components with undefined namespace such as CDI
+ */
+ public static class Comp {
+
+ }
private final ModuleContext moduleContext;
private final Context jndiContext;
Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java?rev=1173108&r1=1173107&r2=1173108&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java Tue Sep 20 12:22:27 2011
@@ -728,6 +728,8 @@ public class Assembler extends Assembler
allDeployments = sort(allDeployments);
+ appContext.getBeanContexts().addAll(allDeployments);
+
new CdiBuilder().build(appInfo, appContext, allDeployments);
ensureWebBeansContext(appContext);
@@ -826,8 +828,6 @@ public class Assembler extends Assembler
deployedApplications.put(appInfo.path, appInfo);
fireAfterApplicationCreated(appInfo);
- appContext.getBeanContexts().addAll(allDeployments);
-
return appContext;
} catch (ValidationException ve) {
throw ve;
Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiResourceInjectionService.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiResourceInjectionService.java?rev=1173108&r1=1173107&r2=1173108&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiResourceInjectionService.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiResourceInjectionService.java Tue Sep 20 12:22:27 2011
@@ -25,196 +25,137 @@ import java.lang.annotation.Annotation;
import javax.enterprise.inject.spi.Bean;
+import org.apache.openejb.AppContext;
+import org.apache.openejb.BeanContext;
import org.apache.openejb.Injection;
import org.apache.openejb.InjectionProcessor;
-import org.apache.openejb.OpenEJBException;
-import org.apache.openejb.assembler.classic.AppInfo;
-import org.apache.openejb.assembler.classic.InjectionBuilder;
-import org.apache.openejb.assembler.classic.JndiEncBuilder;
-import org.apache.openejb.assembler.classic.JndiEncInfo;
-import org.apache.openejb.config.AnnotationDeployer;
-import org.apache.openejb.config.JndiEncInfoBuilder;
import org.apache.openejb.util.LogCategory;
import org.apache.openejb.util.Logger;
import org.apache.openejb.util.PassthroughFactory;
import org.apache.webbeans.component.ResourceBean;
-import org.apache.webbeans.exception.WebBeansException;
import org.apache.webbeans.spi.ResourceInjectionService;
import org.apache.webbeans.spi.api.ResourceReference;
import org.apache.xbean.recipe.ObjectRecipe;
import org.apache.xbean.recipe.Option;
-import javax.enterprise.inject.spi.Bean;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
-import java.lang.annotation.Annotation;
-import java.util.HashMap;
+import java.util.ArrayList;
import java.util.List;
-import java.util.Map;
import java.util.Map.Entry;
-import java.util.Set;
public class CdiResourceInjectionService implements ResourceInjectionService {
private Logger logger = Logger.getInstance(LogCategory.OPENEJB.createChild("cdi"), CdiResourceInjectionService.class);
- private ClassLoader classLoader;
- private AppInfo appModule;
- private final Map<CdiBeanInfo, Context> contexts = new HashMap<CdiBeanInfo, Context>();
+ private final List<BeanContext> compContexts = new ArrayList<BeanContext>();
public CdiResourceInjectionService() {
-
}
- public void setClassLoader(ClassLoader classLoader) {
- this.classLoader = classLoader;
- }
-
- public void setAppModule(AppInfo appModule) {
- this.appModule = appModule;
- }
-
- public void buildInjections(Set<Class<?>> managedBeanClasses) throws OpenEJBException {
- AnnotationDeployer deployer = new AnnotationDeployer();
-
- for (Class<?> clazz : managedBeanClasses) {
-
- CdiBeanInfo cdiInfo = new CdiBeanInfo();
- cdiInfo.setClassLoader(classLoader);
- cdiInfo.setBeanName(clazz.getName());
- cdiInfo.setBeanClass(clazz);
- deployer.deploy(cdiInfo);
-
- JndiEncInfoBuilder infoBuilder = new JndiEncInfoBuilder(appModule);
- JndiEncInfo moduleJndiEnc = new JndiEncInfo();
- JndiEncInfo jndiEnc = new JndiEncInfo();
- infoBuilder.build(cdiInfo, cdiInfo.getBeanName(), appModule.appId, null, moduleJndiEnc, jndiEnc);
-
- InjectionBuilder builder = new InjectionBuilder(classLoader);
- List<Injection> injections = builder.buildInjections(jndiEnc);
-
- cdiInfo.setInjections(injections);
- // TODO: handle app/global/module namespaces?
- JndiEncBuilder encBuilder = new JndiEncBuilder(jndiEnc, injections, appModule.appId, null, appModule.appId, classLoader);
- this.contexts.put(cdiInfo, encBuilder.build(JndiEncBuilder.JndiScope.comp));
+ public void setAppContext(AppContext appModule) {
+ for (BeanContext beanContext : appModule.getBeanContexts()) {
+ if (beanContext.getBeanClass().equals(BeanContext.Comp.class)) {
+ compContexts.add(beanContext);
+ }
}
}
-
@Override
public <X, T extends Annotation> X getResourceReference(ResourceReference<X, T> resourceReference) {
+ final Class<X> type = resourceReference.getResourceType();
+ final String name = resourceReference.getJndiName();
+
try {
- return resourceReference.getResourceType().cast(new InitialContext().lookup(resourceReference.getJndiName()));
+ return type.cast(new InitialContext().lookup(name));
} catch (NamingException e) {
- for (Entry<CdiBeanInfo, Context> entry : this.contexts.entrySet()) {
- if (entry.getKey().getBeanClass() == resourceReference.getOwnerClass()) {
- List<Injection> injections = entry.getKey().getInjections();
- for (Injection injection : injections) {
- if (injection.getTarget() == resourceReference.getOwnerClass() &&
- injection.getName().equals(resourceReference.getName())) {
- Context context = InjectionProcessor.unwrap(entry.getValue());
- try {
- return resourceReference.getResourceType().cast(context.lookup(injection.getJndiName()));
- } catch (NamingException e2) {
- logger.warning("Injection data not found in JNDI context: jndiName='" + injection.getJndiName() + "', target=" + injection.getTarget().getName() + "/" + injection.getName(), e2);
- return null;
- }
- }
- }
+ for (BeanContext beanContext : compContexts) {
+ try {
+ String relativeName = name.replace("java:", "");
+ return type.cast(beanContext.getJndiContext().lookup(relativeName));
+ } catch (NamingException e1) {
+ // fine for now
}
}
- return null;
// throw new WebBeansException("Could not look up resource at " + resourceReference.getJndiName(), e);
}
+ return null;
}
@Override
- public void injectJavaEEResources(Object managedBeanInstance)
- {
+ public void injectJavaEEResources(Object managedBeanInstance) {
- for (Entry<CdiBeanInfo, Context> entry : this.contexts.entrySet()) {
- if (entry.getKey().getBeanClass() == managedBeanInstance.getClass()) {
- ObjectRecipe receipe = PassthroughFactory.recipe(managedBeanInstance);
- receipe.allow(Option.FIELD_INJECTION);
- receipe.allow(Option.PRIVATE_PROPERTIES);
- receipe.allow(Option.IGNORE_MISSING_PROPERTIES);
- receipe.allow(Option.NAMED_PARAMETERS);
-
- fillInjectionProperties(receipe, entry.getKey().getInjections(), managedBeanInstance.getClass(), entry.getValue());
- receipe.create();
- return;
- }
- }
- }
+ ObjectRecipe receipe = PassthroughFactory.recipe(managedBeanInstance);
+ receipe.allow(Option.FIELD_INJECTION);
+ receipe.allow(Option.PRIVATE_PROPERTIES);
+ receipe.allow(Option.IGNORE_MISSING_PROPERTIES);
+ receipe.allow(Option.NAMED_PARAMETERS);
- @SuppressWarnings("unchecked")
- private void fillInjectionProperties(ObjectRecipe objectRecipe, List<Injection> injections, Class<?> beanClass, Context context) {
- if (injections == null) return;
+ fillInjectionProperties(receipe, managedBeanInstance);
- boolean usePrefix = true;
- try {
- if (beanClass != null) beanClass.getConstructor();
- } catch (NoSuchMethodException e) {
- // Using constructor injection
- // xbean can't handle the prefix yet
- usePrefix = false;
- }
+ receipe.create();
+ }
- Class<?> clazz = beanClass;
+ @SuppressWarnings("unchecked")
+ private void fillInjectionProperties(ObjectRecipe objectRecipe, Object managedBeanInstance) {
- for (Injection injection : injections) {
- if (!injection.getTarget().isAssignableFrom(clazz)) continue;
- try {
- String jndiName = injection.getJndiName();
+ final boolean usePrefix = true;
+ final Class<?> clazz = managedBeanInstance.getClass();
- if (!jndiName.startsWith("java:")) {
- jndiName = "java:" + jndiName;
- }
+ for (BeanContext beanContext : compContexts) {
- Object value;
+ for (Injection injection : beanContext.getInjections()) {
+ if (!injection.getTarget().isAssignableFrom(clazz)) continue;
try {
- value = InjectionProcessor.unwrap(context).lookup(jndiName);
- } catch (NamingException e) {
- // Fallback and try the Context on the current thread
- //
- // We attempt to create a Context instance for each
- // individual CDI bean. This isn't really accurate
- // however, and in a webapp all the beans will share
- // the same JNDI Context. This fallback will cover
- // the situation where we did not accurately create
- // a Context for each bean and instead the Context
- // on the thread (the webapp context) has the data
- // we need to lookup.
+ String jndiName = injection.getJndiName();
+
+ if (!jndiName.startsWith("java:")) {
+ jndiName = "java:" + jndiName;
+ }
+ Object value;
try {
- value = new InitialContext().lookup(jndiName);
- } catch (NamingException e1) {
- throw e;
+ value = InjectionProcessor.unwrap(beanContext.getJndiContext()).lookup(jndiName);
+ } catch (NamingException e) {
+ // Fallback and try the Context on the current thread
+ //
+ // We attempt to create a Context instance for each
+ // individual CDI bean. This isn't really accurate
+ // however, and in a webapp all the beans will share
+ // the same JNDI Context. This fallback will cover
+ // the situation where we did not accurately create
+ // a Context for each bean and instead the Context
+ // on the thread (the webapp context) has the data
+ // we need to lookup.
+
+ try {
+ value = new InitialContext().lookup(jndiName);
+ } catch (NamingException e1) {
+ throw e;
+ }
+ }
+
+ String prefix;
+ if (usePrefix) {
+ prefix = injection.getTarget().getName() + "/";
+ } else {
+ prefix = "";
}
- }
- String prefix;
- if (usePrefix) {
- prefix = injection.getTarget().getName() + "/";
- } else {
- prefix = "";
+ objectRecipe.setProperty(prefix + injection.getName(), value);
+ } catch (NamingException e) {
+ logger.warning("Injection data not found in JNDI context: jndiName='" + injection.getJndiName() + "', target=" + injection.getTarget().getName() + "/" + injection.getName());
}
- objectRecipe.setProperty(prefix + injection.getName(), value);
- } catch (NamingException e) {
- logger.warning("Injection data not found in JNDI context: jndiName='" + injection.getJndiName() + "', target=" + injection.getTarget().getName() + "/" + injection.getName());
}
}
}
@Override
public void clear() {
- this.contexts.clear();
+ compContexts.clear();
}
/**
Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/cdi/OpenEJBLifecycle.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/cdi/OpenEJBLifecycle.java?rev=1173108&r1=1173107&r2=1173108&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/cdi/OpenEJBLifecycle.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/cdi/OpenEJBLifecycle.java Tue Sep 20 12:22:27 2011
@@ -24,7 +24,6 @@ import java.io.InputStream;
import java.lang.annotation.Annotation;
import java.net.URL;
import java.util.ArrayList;
-import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Properties;
@@ -38,7 +37,6 @@ import javax.el.ELResolver;
import javax.enterprise.inject.Specializes;
import javax.enterprise.inject.spi.AnnotatedType;
import javax.enterprise.inject.spi.BeanManager;
-import javax.enterprise.inject.spi.Extension;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.jsp.JspApplicationContext;
@@ -182,8 +180,7 @@ public class OpenEJBLifecycle implements
//Resournce Injection Service
CdiResourceInjectionService injectionService = (CdiResourceInjectionService) webBeansContext.getService(ResourceInjectionService.class);
- injectionService.setAppModule(stuff.getAppInfo());
- injectionService.setClassLoader(appContext.getClassLoader());
+ injectionService.setAppContext(stuff.getAppContext());
//Deploy the beans
try {
@@ -210,14 +207,6 @@ public class OpenEJBLifecycle implements
this.scannerService.scan();
//Deploy bean from XML. Also configures deployments, interceptors, decorators.
-
-// final CdiScanner cdiScanner = buildScanner();
-
- //Build injections for managed beans
- // TODO Maybe we should build injections after the bean discovery
- injectionService.buildInjections(scannerService.getBeanClasses());
-
- //Deploy bean from XML. Also configures deployments, interceptors, decorators.
deployer.deployFromXML(scannerService);
//Checking stereotype conditions
Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java?rev=1173108&r1=1173107&r2=1173108&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java Tue Sep 20 12:22:27 2011
@@ -1059,6 +1059,11 @@ public class AnnotationDeployer implemen
}
}
+
+ final String name = ejbModule.getModuleId() + "." + BeanContext.Comp.class.getSimpleName();
+ final org.apache.openejb.jee.ManagedBean managedBean = new org.apache.openejb.jee.ManagedBean(name, BeanContext.Comp.class);
+ managedBean.setTransactionType(TransactionType.BEAN);
+ ejbModule.getEjbJar().addEnterpriseBean(managedBean);
} else {
managedClasses = new ArrayList<String>();
}
@@ -1314,10 +1319,19 @@ public class AnnotationDeployer implemen
if (url.getPath().endsWith("WEB-INF/classes/")) return true;
try {
final URLClassLoader loader = new URLClassLoader(new URL[]{url});
- return loader.findResource("/WEB-INF/beans.xml") != null || loader.findResource("/META-INF/beans.xml") != null;
+ String[] paths = {
+ "META-INF/beans.xml",
+ "WEB-INF/beans.xml",
+ "/WEB-INF/beans.xml",
+ "/META-INF/beans.xml",
+ };
+
+ for (String path : paths) {
+ if (loader.findResource(path) != null) return true;
+ }
} catch (Exception e) {
- return false;
}
+ return false;
}
private String getEjbName(MessageDriven mdb, Class<?> beanClass) {
@@ -2233,6 +2247,14 @@ public class AnnotationDeployer implemen
processWebServiceHandlers(ejbModule, bean);
processWebServiceClientHandlers(bean, classLoader);
+
+ try {
+ if (BeanContext.Comp.class.getName().equals(bean.getEjbClass())) {
+ buildAnnotatedRefs(bean, ejbModule.getFinder(), classLoader);
+ }
+ } catch (OpenEJBException e) {
+ logger.error("Processing of @Resource, @EJB, and other references failed for CDI managed beans", e);
+ }
}
for (Interceptor interceptor : ejbModule.getEjbJar().getInterceptors()) {
Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java?rev=1173108&r1=1173107&r2=1173108&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java Tue Sep 20 12:22:27 2011
@@ -23,6 +23,7 @@ import org.apache.openejb.api.LocalClien
import org.apache.openejb.api.RemoteClient;
import org.apache.openejb.jee.Application;
import org.apache.openejb.jee.ApplicationClient;
+import org.apache.openejb.jee.Beans;
import org.apache.openejb.jee.Connector;
import org.apache.openejb.jee.EjbJar;
import org.apache.openejb.jee.FacesConfig;
@@ -55,6 +56,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
+import java.net.URLClassLoader;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.Arrays;
@@ -605,6 +607,27 @@ public class DeploymentLoader implements
appModule.getAdditionalLibraries().addAll(webModule.getUrls());
}
+ {
+ List<URL> persistenceXmls = (List<URL>) appModule.getAltDDs().get("persistence.xml");
+ if (persistenceXmls == null) {
+ persistenceXmls = new ArrayList<URL>();
+ appModule.getAltDDs().put("persistence.xml", persistenceXmls);
+ }
+
+ final Object o = webModule.getAltDDs().get("persistence.xml");
+
+ if (o instanceof URL) {
+ URL url = (URL) o;
+ persistenceXmls.add(url);
+ }
+
+ if (o instanceof List) {
+ List<URL> urls = (List<URL>) o;
+ persistenceXmls.addAll(urls);
+ }
+ }
+
+
// Per the Spec version of the Collapsed EAR there
// aren't individual EjbModules inside a war.
// The war itself is one big EjbModule if certain
@@ -677,9 +700,47 @@ public class DeploymentLoader implements
// load faces configuration files
addFacesConfigs(webModule);
+
+ addBeansXmls(webModule);
+
return webModule;
}
+ private void addBeansXmls(WebModule webModule) {
+ final List<URL> urls = webModule.getUrls();
+ final URLClassLoader loader = new URLClassLoader(urls.toArray(new URL[urls.size()]));
+
+ final ArrayList<URL> xmls;
+ try {
+ xmls = Collections.list(loader.getResources("META-INF/beans.xml"));
+ xmls.add((URL) webModule.getAltDDs().get("beans.xml"));
+ } catch (IOException e) {
+
+ return;
+ }
+
+ Beans complete = null;
+ for (URL url : xmls) {
+ if (url == null) continue;
+ try {
+ final Beans beans = ReadDescriptors.readBeans(url);
+
+ if (complete == null) {
+ complete = beans;
+ } else {
+ complete.getAlternativeClasses().addAll(beans.getAlternativeClasses());
+ complete.getAlternativeStereotypes().addAll(beans.getAlternativeStereotypes());
+ complete.getDecorators().addAll(beans.getDecorators());
+ complete.getInterceptors().addAll(beans.getInterceptors());
+ }
+ } catch (OpenEJBException e) {
+ logger.error("Unable to read beans.xml from :"+ url.toExternalForm());
+ }
+ }
+
+ webModule.getAltDDs().put("beans.xml", complete);
+ }
+
protected String getContextRoot() {
return null;
}
Modified: openejb/trunk/openejb3/tck/cdi-tomee-embedded/src/test/resources/passing.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/tck/cdi-tomee-embedded/src/test/resources/passing.xml?rev=1173108&r1=1173107&r2=1173108&view=diff
==============================================================================
--- openejb/trunk/openejb3/tck/cdi-tomee-embedded/src/test/resources/passing.xml (original)
+++ openejb/trunk/openejb3/tck/cdi-tomee-embedded/src/test/resources/passing.xml Tue Sep 20 12:22:27 2011
@@ -19,11 +19,7 @@
<suite name="CDI TCK" verbose="0">
<test name="CDI TCK">
<classes>
- <class name="org.jboss.jsr299.tck.tests.lookup.injection.non.contextual.InjectionIntoNonContextualComponentTest">
- <methods>
- <include name="testInjectionIntoJSFManagedBean"/>
- </methods>
- </class>
+ <class name="org.jboss.jsr299.tck.tests.deployment.packaging.bundledLibrary.LibraryInWarTest"/>
</classes>
</test>
</suite>
Modified: openejb/trunk/openejb3/tck/cdi-tomee/src/test/resources/passing.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/tck/cdi-tomee/src/test/resources/passing.xml?rev=1173108&r1=1173107&r2=1173108&view=diff
==============================================================================
--- openejb/trunk/openejb3/tck/cdi-tomee/src/test/resources/passing.xml (original)
+++ openejb/trunk/openejb3/tck/cdi-tomee/src/test/resources/passing.xml Tue Sep 20 12:22:27 2011
@@ -43,26 +43,12 @@
<exclude name="test"/>
</methods>
</class>
- <class name="org.jboss.jsr299.tck.tests.deployment.packaging.bundledLibrary.LibraryInWarTest">
- <methods>
- <exclude name="test"/>
- </methods>
- </class>
<class name="org.jboss.jsr299.tck.tests.implementation.enterprise.lifecycle.EnterpriseBeanLifecycleTest">
<methods>
<exclude name="testCreateSFSB"/>
<exclude name="testSerializeSFSB"/>
</methods>
</class>
- <class name="org.jboss.jsr299.tck.tests.implementation.simple.resource.persistenceContext.PersistenceContextInjectionTest">
- <methods>
- <exclude name="testBeanTypesAndBindingTypesOfPersistenceContext"/>
- <exclude name="testInjectionOfPersistenceContext"/>
- <exclude name="testInjectionOfPersistenceUnit"/>
- <exclude name="testPassivationOfPersistenceContext"/>
- <exclude name="testPassivationOfPersistenceUnit"/>
- </methods>
- </class>
<class name="org.jboss.jsr299.tck.tests.interceptors.definition.enterprise.nonContextualReference.SessionBeanInterceptorOnNonContextualEjbReferenceTest">
<methods>
<exclude name="testNonContextualSessionBeanReferenceIsIntercepted"/>