Author: rmannibucau
Date: Thu May 10 22:14:43 2012
New Revision: 1336925
URL: http://svn.apache.org/viewvc?rev=1336925&view=rev
Log:
TOMEE-189 more work about cdi and ear support, fixing some dummy error
(appcontext webbenscontext was the bad one, webbeanslistener was not using the
good one)
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/DeploymentContext.java
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiPlugin.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/OpenEJBLifecycle.java
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/WebappBeanManager.java
openejb/trunk/openejb/tck/cdi-tomee-embedded/src/test/resources/passing.xml
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/WebBeansListener.java
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/DeploymentContext.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/DeploymentContext.java?rev=1336925&r1=1336924&r2=1336925&view=diff
==============================================================================
---
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/DeploymentContext.java
(original)
+++
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/DeploymentContext.java
Thu May 10 22:14:43 2012
@@ -41,12 +41,12 @@ public class DeploymentContext {
}
@SuppressWarnings({"unchecked"})
- public <T> T get(Class<T> type) {
+ public <T> T get(Class<T> type) {
return (T)data.get(type);
}
@SuppressWarnings({"unchecked"})
- public <T> T set(Class<T> type, T value) {
+ public <T> T set(Class<T> type, T value) {
return (T) data.put(type, value);
}
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiPlugin.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiPlugin.java?rev=1336925&r1=1336924&r2=1336925&view=diff
==============================================================================
---
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiPlugin.java
(original)
+++
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiPlugin.java
Thu May 10 22:14:43 2012
@@ -26,7 +26,8 @@ import javax.enterprise.context.spi.Cont
import javax.enterprise.context.spi.CreationalContext;
import javax.enterprise.inject.spi.Bean;
import javax.enterprise.inject.spi.ProcessAnnotatedType;
-
+import org.apache.openejb.BeanContext;
+import org.apache.openejb.OpenEJBException;
import org.apache.webbeans.config.WebBeansContext;
import org.apache.webbeans.config.WebBeansFinder;
import org.apache.webbeans.container.InjectionResolver;
@@ -39,18 +40,22 @@ import org.apache.webbeans.spi.plugins.O
import org.apache.webbeans.spi.plugins.OpenWebBeansJavaEEPlugin;
import org.apache.webbeans.util.WebBeansUtil;
-import org.apache.openejb.AppContext;
-import org.apache.openejb.BeanContext;
-import org.apache.openejb.OpenEJBException;
-
public class CdiPlugin extends AbstractOwbPlugin implements
OpenWebBeansJavaEEPlugin, OpenWebBeansEjbPlugin {
- private AppContext appContext;
private Set<Class<?>> beans;
private WebBeansContext webBeansContext;
private CdiAppContextsService contexsServices;
+ private ClassLoader classLoader;
+
+ public void setWebBeansContext(WebBeansContext webBeansContext) {
+ this.webBeansContext = webBeansContext;
+ }
+
+ public void setClassLoader(ClassLoader classLoader) {
+ this.classLoader = classLoader;
+ }
@Override
public void shutDown() {
@@ -61,10 +66,6 @@ public class CdiPlugin extends AbstractO
}
}
- public void setAppContext(AppContext appContext) {
- this.appContext = appContext;
- }
-
public void configureDeployments(List<BeanContext> ejbDeployments) {
WeakHashMap<Class<?>, Object> beans = new WeakHashMap<Class<?>,
Object>();
for (BeanContext deployment : ejbDeployments) {
@@ -80,7 +81,6 @@ public class CdiPlugin extends AbstractO
}
public void startup() {
- webBeansContext = appContext.getWebBeansContext();
this.contexsServices = (CdiAppContextsService)
webBeansContext.getContextsService();
this.contexsServices.init(null);
}
@@ -89,10 +89,10 @@ public class CdiPlugin extends AbstractO
ClassLoader oldCl = Thread.currentThread().getContextClassLoader();
try {
// Setting context class loader for cleaning
-
Thread.currentThread().setContextClassLoader(appContext.getClassLoader());
+ Thread.currentThread().setContextClassLoader(classLoader);
// Fire shut down
- appContext.getBeanManager().fireEvent(new BeforeShutdownImpl());
+ webBeansContext.getBeanManagerImpl().fireEvent(new
BeforeShutdownImpl());
// Destroys context
this.contexsServices.destroy(null);
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=1336925&r1=1336924&r2=1336925&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
Thu May 10 22:14:43 2012
@@ -152,7 +152,9 @@ public class CdiScanner implements Scann
}
final ClassLoader cl = clazz.getClassLoader();
- if (classLoader.equals(cl) || cl.equals(scl)) {
+ // 1. this classloader is the good one
+ // 2. the classloader is the appclassloader one and we are in
the ear parent
+ if (classLoader.equals(cl) || (cl.equals(scl) &&
startupObject.getWebContext() == null)) {
classes.add(clazz);
}
}
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/OpenEJBLifecycle.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/OpenEJBLifecycle.java?rev=1336925&r1=1336924&r2=1336925&view=diff
==============================================================================
---
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/OpenEJBLifecycle.java
(original)
+++
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/OpenEJBLifecycle.java
Thu May 10 22:14:43 2012
@@ -177,9 +177,12 @@ public class OpenEJBLifecycle implements
CdiPlugin cdiPlugin = (CdiPlugin)
webBeansContext.getPluginLoader().getEjbPlugin();
final AppContext appContext = stuff.getAppContext();
+ if (stuff.getWebContext() == null) {
+ appContext.setWebBeansContext(webBeansContext);
+ }
- cdiPlugin.setAppContext(appContext);
- appContext.setWebBeansContext(webBeansContext);
+ cdiPlugin.setClassLoader(stuff.getClassLoader());
+ cdiPlugin.setWebBeansContext(webBeansContext);
cdiPlugin.startup();
//Configure EJB Deployments
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/WebappBeanManager.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/WebappBeanManager.java?rev=1336925&r1=1336924&r2=1336925&view=diff
==============================================================================
---
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/WebappBeanManager.java
(original)
+++
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/WebappBeanManager.java
Thu May 10 22:14:43 2012
@@ -24,6 +24,12 @@ import org.apache.webbeans.container.Bea
public class WebappBeanManager extends BeanManagerImpl {
private final WebappWebBeansContext webappCtx;
+ private final ThreadLocal<Boolean> internalUse = new
ThreadLocal<Boolean>() {
+ @Override
+ public Boolean initialValue() {
+ return false;
+ }
+ };
public WebappBeanManager(WebappWebBeansContext ctx) {
super(ctx);
@@ -60,7 +66,7 @@ public class WebappBeanManager extends B
public <T> CreationalContext<T> createCreationalContext(Contextual<T>
contextual) {
try {
return super.createCreationalContext(contextual);
- } catch (RuntimeException e) {
+ } catch (RuntimeException e) { // can happen?
try {
return getParentBm().createCreationalContext(contextual);
} catch (RuntimeException ignored) {
@@ -72,16 +78,32 @@ public class WebappBeanManager extends B
@Override
public Set<Bean<?>> getBeans(Type beanType, Annotation... qualifiers) {
final Set<Bean<?>> beans = new HashSet<Bean<?>>();
- beans.addAll(super.getBeans(beanType, qualifiers));
- beans.addAll(getParentBm().getBeans(beanType, qualifiers));
+ internalUse.set(true);
+ try {
+ beans.addAll(super.getBeans(beanType, qualifiers));
+ } finally {
+ internalUse.set(false);
+ }
+ if (!internalUse.get()) {
+ beans.addAll(getParentBm().getBeans(beanType, qualifiers));
+ }
+ internalUse.remove();
return beans;
}
@Override
public Set<Bean<?>> getBeans(String name) {
final Set<Bean<?>> beans = new HashSet<Bean<?>>();
- beans.addAll(super.getBeans(name));
- beans.addAll(getParentBm().getBeans(name));
+ internalUse.set(true);
+ try {
+ beans.addAll(super.getBeans(name));
+ } finally {
+ internalUse.set(false);
+ }
+ if (!internalUse.get()) {
+ beans.addAll(getParentBm().getBeans(name));
+ }
+ internalUse.remove();
return beans;
}
@@ -127,24 +149,47 @@ public class WebappBeanManager extends B
@Override
public <T> Set<ObserverMethod<? super T>> resolveObserverMethods(T event,
Annotation... qualifiers) {
final Set<ObserverMethod<? super T>> mtds = new
HashSet<ObserverMethod<? super T>>();
- mtds.addAll(super.resolveObserverMethods(event, qualifiers));
- mtds.addAll(getParentBm().resolveObserverMethods(event, qualifiers));
+ internalUse.set(true);
+ try {
+ mtds.addAll(super.resolveObserverMethods(event, qualifiers));
+ } finally {
+ internalUse.set(false);
+ }
+ if (!internalUse.get()) {
+ mtds.addAll(getParentBm().resolveObserverMethods(event,
qualifiers));
+ }
+ internalUse.remove();
return mtds;
}
@Override
public List<Decorator<?>> resolveDecorators(Set<Type> types, Annotation...
qualifiers) {
final List<Decorator<?>> decorators = new ArrayList<Decorator<?>>();
- decorators.addAll(super.resolveDecorators(types, qualifiers));
- decorators.addAll(getParentBm().resolveDecorators(types, qualifiers));
+ internalUse.set(true);
+ try {
+ decorators.addAll(super.resolveDecorators(types, qualifiers));
+ } finally {
+ internalUse.set(false);
+ }
+ if (!internalUse.get()) {
+ decorators.addAll(getParentBm().resolveDecorators(types,
qualifiers));
+ }
return decorators;
}
@Override
public List<Interceptor<?>> resolveInterceptors(InterceptionType type,
Annotation... qualifiers) {
final List<Interceptor<?>> interceptors = new
ArrayList<Interceptor<?>>();
- interceptors.addAll(super.resolveInterceptors(type, qualifiers));
- interceptors.addAll(getParentBm().resolveInterceptors(type,
qualifiers));
+ internalUse.set(true);
+ try {
+ interceptors.addAll(super.resolveInterceptors(type, qualifiers));
+ } finally {
+ internalUse.set(false);
+ }
+ if (!internalUse.get()) {
+ interceptors.addAll(getParentBm().resolveInterceptors(type,
qualifiers));
+ }
+ internalUse.remove();
return interceptors;
}
@@ -257,8 +302,16 @@ public class WebappBeanManager extends B
@Override
public Set<Annotation> getStereotypeDefinition(Class<? extends Annotation>
stereotype) {
final Set<Annotation> mtds = new HashSet<Annotation>();
- mtds.addAll(super.getStereotypeDefinition(stereotype));
- mtds.addAll(getParentBm().getStereotypeDefinition(stereotype));
+ internalUse.set(true);
+ try {
+ mtds.addAll(super.getStereotypeDefinition(stereotype));
+ } finally {
+ internalUse.set(false);
+ }
+ if (!internalUse.get()) {
+ mtds.addAll(getParentBm().getStereotypeDefinition(stereotype));
+ }
+ internalUse.remove();
return mtds;
}
Modified:
openejb/trunk/openejb/tck/cdi-tomee-embedded/src/test/resources/passing.xml
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/tck/cdi-tomee-embedded/src/test/resources/passing.xml?rev=1336925&r1=1336924&r2=1336925&view=diff
==============================================================================
--- openejb/trunk/openejb/tck/cdi-tomee-embedded/src/test/resources/passing.xml
(original)
+++ openejb/trunk/openejb/tck/cdi-tomee-embedded/src/test/resources/passing.xml
Thu May 10 22:14:43 2012
@@ -18,9 +18,9 @@
<suite name="CDI TCK" verbose="0">
<test name="CDI TCK">
<classes>
- <class
name="org.jboss.jsr299.tck.tests.extensions.container.event.ContainerEventTest"
/>
- <!--
<class
name="org.jboss.jsr299.tck.tests.deployment.packaging.bundledLibrary.LibraryInEarTest"/>
+ <!--
+ <class
name="org.jboss.jsr299.tck.tests.extensions.container.event.ContainerEventTest"
/>
<class
name="org.jboss.jsr299.tck.tests.context.application.ejb.ApplicationContextSharedTest"
/>
-->
</classes>
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=1336925&r1=1336924&r2=1336925&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
Thu May 10 22:14:43 2012
@@ -907,7 +907,9 @@ public class TomcatWebAppBuilder impleme
if (webBeansContext == null) return null;
for (WebContext web : appContext.getWebContexts()) {
- if (contextInfo.standardContext.getName().equals(web.getId())) {
+ final String name = web.getId();
+ final String stdName = contextInfo.standardContext.getName();
+ if (stdName.equals(name) || stdName.equals("/" + name) || ("/" +
name).equals(stdName + ".war")) {
webBeansContext = web.getWebbeansContext();
break;
}
Modified:
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/WebBeansListener.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/WebBeansListener.java?rev=1336925&r1=1336924&r2=1336925&view=diff
==============================================================================
---
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/WebBeansListener.java
(original)
+++
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/WebBeansListener.java
Thu May 10 22:14:43 2012
@@ -18,6 +18,7 @@ package org.apache.tomee.catalina;
import org.apache.openejb.cdi.OpenEJBLifecycle;
import org.apache.openejb.cdi.ThreadSingletonServiceImpl;
+import org.apache.openejb.cdi.WebappWebBeansContext;
import org.apache.webbeans.component.InjectionPointBean;
import org.apache.webbeans.config.OWBLogConst;
import org.apache.webbeans.config.WebBeansContext;
@@ -100,6 +101,9 @@ public class WebBeansListener implements
webBeansContext.getContextsService().endContext(RequestScoped.class, event);
+ if (webBeansContext instanceof WebappWebBeansContext) {
+ ((WebappWebBeansContext)
webBeansContext).getParent().getContextsService().endContext(RequestScoped.class,
event);
+ }
cleanupRequestThreadLocals();
} finally {
ThreadSingletonServiceImpl.enter((WebBeansContext) oldContext);
@@ -130,6 +134,9 @@ public class WebBeansListener implements
}
this.webBeansContext.getContextsService().startContext(RequestScoped.class,
event);
+ if (webBeansContext instanceof WebappWebBeansContext) {
+ ((WebappWebBeansContext)
webBeansContext).getParent().getContextsService().startContext(RequestScoped.class,
event);
+ }
// we don't initialise the Session here but do it lazily if it
gets requested
// the first time. See OWB-457
@@ -149,6 +156,9 @@ public class WebBeansListener implements
logger.debug("Starting a session with session id : [{0}]",
event.getSession().getId());
}
this.webBeansContext.getContextsService().startContext(SessionScoped.class,
event.getSession());
+ if (webBeansContext instanceof WebappWebBeansContext) {
+ ((WebappWebBeansContext)
webBeansContext).getParent().getContextsService().startContext(SessionScoped.class,
event.getSession());
+ }
} catch (Exception e) {
logger.error(OWBLogConst.ERROR_0020, event.getSession());
WebBeansUtil.throwRuntimeExceptions(e);
@@ -164,6 +174,9 @@ public class WebBeansListener implements
}
this.webBeansContext.getContextsService().endContext(SessionScoped.class,
event.getSession());
+ if (webBeansContext instanceof WebappWebBeansContext) {
+ ((WebappWebBeansContext)
webBeansContext).getParent().getContextsService().endContext(SessionScoped.class,
event.getSession());
+ }
ConversationManager conversationManager =
webBeansContext.getConversationManager();
conversationManager.destroyConversationContextWithSessionId(event.getSession().getId());