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


Reply via email to