Author: rmannibucau
Date: Mon Aug  6 13:52:51 2012
New Revision: 1369846

URL: http://svn.apache.org/viewvc?rev=1369846&view=rev
Log:
OPENEJB-1884 stopping application (from a cdi point of view) when destroying 
application (openejb point of view) - needs to be ran agains cdi tcks

Added:
    
openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/cdi/WebbeansContextInEmbeddedModeTest.java
Modified:
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiAppContextsService.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/OWBContextThreadListener.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/OpenEJBLifecycle.java
    
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/OpenEJBContextConfig.java

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java?rev=1369846&r1=1369845&r2=1369846&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
 Mon Aug  6 13:52:51 2012
@@ -43,6 +43,7 @@ import org.apache.openejb.assembler.clas
 import org.apache.openejb.assembler.monitoring.JMXContainer;
 import org.apache.openejb.cdi.CdiAppContextsService;
 import org.apache.openejb.cdi.CdiBuilder;
+import org.apache.openejb.cdi.CdiPlugin;
 import org.apache.openejb.cdi.CdiResourceInjectionService;
 import org.apache.openejb.cdi.CdiScanner;
 import org.apache.openejb.cdi.CustomELAdapter;
@@ -101,6 +102,7 @@ import org.apache.openejb.util.SafeToolk
 import org.apache.openejb.util.proxy.ProxyFactory;
 import org.apache.openejb.util.proxy.ProxyManager;
 import org.apache.webbeans.config.WebBeansContext;
+import org.apache.webbeans.spi.ContainerLifecycle;
 import org.apache.webbeans.spi.ContextsService;
 import org.apache.webbeans.spi.LoaderService;
 import org.apache.webbeans.spi.ResourceInjectionService;
@@ -1172,6 +1174,11 @@ public class Assembler extends Assembler
             return;
         } else {
 
+            final WebBeansContext webBeansContext = 
appContext.getWebBeansContext();
+            if (webBeansContext != null && 
webBeansContext.getBeanManagerImpl().isInUse()) {
+                
webBeansContext.getService(ContainerLifecycle.class).stopApplication(null);
+            }
+
             final Map<String, Object> cb = appContext.getBindings();
 
             for (Map.Entry<String, Object> value : cb.entrySet()) {

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiAppContextsService.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiAppContextsService.java?rev=1369846&r1=1369845&r2=1369846&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiAppContextsService.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiAppContextsService.java
 Mon Aug  6 13:52:51 2012
@@ -25,6 +25,7 @@ import org.apache.webbeans.el.ELContextS
 import org.apache.webbeans.spi.ContextsService;
 import org.apache.webbeans.web.context.ServletRequestContext;
 import org.apache.webbeans.web.context.SessionContextManager;
+import org.apache.webbeans.web.intercept.RequestScopedBeanInterceptorHandler;
 
 import javax.enterprise.context.*;
 import javax.enterprise.context.spi.Context;
@@ -77,7 +78,7 @@ public class CdiAppContextsService exten
         startContext(Singleton.class, initializeObject);
     }
 
-    public void destroy(Object destroyObject) {
+    public void destroy(Object destroyObjectUnused) {
 //        //Destroy application context
 //        endContext(ApplicationScoped.class, destroyObject);
 //
@@ -242,6 +243,8 @@ public class CdiAppContextsService exten
             conversationContext.set(null);
             conversationContext.remove();
         }
+
+        RequestScopedBeanInterceptorHandler.removeThreadLocals();
     }
 
     /**

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=1369846&r1=1369845&r2=1369846&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
 Mon Aug  6 13:52:51 2012
@@ -16,6 +16,7 @@
  */
 package org.apache.openejb.cdi;
 
+import java.lang.reflect.Field;
 import java.util.List;
 
 import org.apache.openejb.AppContext;
@@ -34,6 +35,7 @@ import org.apache.webbeans.config.WebBea
  */
 public class CdiBuilder {
     private static final Logger logger = 
Logger.getInstance(LogCategory.OPENEJB_CDI, CdiBuilder.class);
+    private static final ThreadSingletonService SINGLETON_SERVICE = new 
ThreadSingletonServiceImpl();
 
     public CdiBuilder() {
     }
@@ -67,21 +69,21 @@ public class CdiBuilder {
         return false;
     }
 
-    public static ThreadSingletonService initializeOWB(ClassLoader 
classLoader) {
-        ThreadSingletonService singletonService = new 
ThreadSingletonServiceImpl();
-        logger.info("Created new singletonService " + singletonService);
-        SystemInstance.get().setComponent(ThreadSingletonService.class, 
singletonService);
+    public static ThreadSingletonService initializeOWB(final ClassLoader 
classLoader) {
+        logger.info("Created new singletonService " + SINGLETON_SERVICE);
+        SystemInstance.get().setComponent(ThreadSingletonService.class, 
SINGLETON_SERVICE);
         try {
-            WebBeansFinder.setSingletonService(singletonService);
+            WebBeansFinder.setSingletonService(SINGLETON_SERVICE);
             logger.info("Succeeded in installing singleton service");
         } catch (Exception e) {
             //ignore
             // not logging the exception since it is nto an error
-            logger.info("Could not install our singleton service");
+            logger.debug("Could not install our singleton service");
         }
+
         //TODO there must be a better place to initialize this
         ThreadContext.addThreadContextListener(new OWBContextThreadListener());
-        return singletonService;
+        return SINGLETON_SERVICE;
     }
 
 }

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/OWBContextThreadListener.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/OWBContextThreadListener.java?rev=1369846&r1=1369845&r2=1369846&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/OWBContextThreadListener.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/OWBContextThreadListener.java
 Mon Aug  6 13:52:51 2012
@@ -31,7 +31,7 @@ import org.apache.webbeans.config.WebBea
  */
 public class OWBContextThreadListener implements ThreadContextListener {
 
-    ThreadSingletonService singletonService = 
SystemInstance.get().getComponent(ThreadSingletonService.class);
+    private ThreadSingletonService singletonService = 
SystemInstance.get().getComponent(ThreadSingletonService.class);
 
     @Override
     public void contextEntered(ThreadContext oldContext, ThreadContext 
newContext) {

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=1369846&r1=1369845&r2=1369846&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
 Mon Aug  6 13:52:51 2012
@@ -16,8 +16,6 @@
  */
 package org.apache.openejb.cdi;
 
-import java.util.LinkedHashMap;
-import java.util.Map;
 import org.apache.openejb.AppContext;
 import org.apache.openejb.BeanContext;
 import org.apache.openejb.OpenEJBRuntimeException;
@@ -59,7 +57,9 @@ import java.io.IOException;
 import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.HashSet;
+import java.util.LinkedHashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.Properties;
 import java.util.Set;
 import java.util.concurrent.Executors;
@@ -425,13 +425,13 @@ public class OpenEJBLifecycle implements
         try
         {
             //Sub-classes operations
-            beforeStopApplication(endObject);
+            beforeStopApplication(null);
 
             //Fire shut down
             this.beanManager.fireEvent(new BeforeShutdownImpl(), 
BeansDeployer.EMPTY_ANNOTATION_ARRAY);
 
             //Destroys context
-            this.contextsService.destroy(endObject);
+            this.contextsService.destroy(null);
 
             //Unbind BeanManager
             if (jndiService != null) {
@@ -454,7 +454,7 @@ public class OpenEJBLifecycle implements
             webBeansContext.getAnnotatedElementFactory().clear();
 
             //After Stop
-            afterStopApplication(endObject);
+            afterStopApplication(null);
 
             // Clear BeanManager
             this.beanManager.clear();
@@ -605,11 +605,7 @@ public class OpenEJBLifecycle implements
 
         this.cleanupShutdownThreadLocals();
 
-        if (logger.isInfoEnabled())
-        {
-            stopObject = getServletContext(stopObject);
-            logger.info("OpenWebBeans Container has stopped for context 
path,", stopObject instanceof ServletContext? 
((ServletContext)stopObject).getContextPath() : stopObject);
-        }
+        WebBeansFinder.clearInstances(WebBeansUtil.getCurrentClassLoader());
     }
 
     /**
@@ -619,7 +615,6 @@ public class OpenEJBLifecycle implements
     private void cleanupShutdownThreadLocals()
     {
         // TODO maybe there are more to cleanup
-
         InjectionPointBean.removeThreadLocal();
     }
 

Added: 
openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/cdi/WebbeansContextInEmbeddedModeTest.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/cdi/WebbeansContextInEmbeddedModeTest.java?rev=1369846&view=auto
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/cdi/WebbeansContextInEmbeddedModeTest.java
 (added)
+++ 
openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/cdi/WebbeansContextInEmbeddedModeTest.java
 Mon Aug  6 13:52:51 2012
@@ -0,0 +1,33 @@
+package org.apache.openejb.cdi;
+
+import org.apache.openejb.AppContext;
+import org.apache.openejb.jee.EjbJar;
+import org.apache.openejb.junit.ApplicationComposer;
+import org.apache.openejb.junit.Module;
+import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.spi.ContainerSystem;
+import org.apache.webbeans.config.WebBeansContext;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.util.List;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertSame;
+
+@RunWith(ApplicationComposer.class)
+public class WebbeansContextInEmbeddedModeTest {
+    @Module
+    public EjbJar jar() {
+        return new EjbJar();
+    }
+
+    @Test
+    public void checkWebbeansContext() {
+        final WebBeansContext ctx1 = WebBeansContext.currentInstance();
+        final List<AppContext> appCtxs = 
SystemInstance.get().getComponent(ContainerSystem.class).getAppContexts();
+        assertEquals(1, appCtxs.size());
+        final WebBeansContext ctx2 = 
appCtxs.iterator().next().getWebBeansContext();
+        assertSame(ctx1, ctx2);
+    }
+}

Modified: 
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/OpenEJBContextConfig.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/OpenEJBContextConfig.java?rev=1369846&r1=1369845&r2=1369846&view=diff
==============================================================================
--- 
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/OpenEJBContextConfig.java
 (original)
+++ 
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/OpenEJBContextConfig.java
 Mon Aug  6 13:52:51 2012
@@ -41,7 +41,7 @@ public class OpenEJBContextConfig extend
     private TomcatWebAppBuilder.StandardContextInfo info;
 
     public OpenEJBContextConfig(TomcatWebAppBuilder.StandardContextInfo 
standardContextInfo) {
-        logger.info("OpenEJBContextConfig("+standardContextInfo.toString());
+        logger.debug("OpenEJBContextConfig({0})", 
standardContextInfo.toString());
         info = standardContextInfo;
     }
 
@@ -82,7 +82,7 @@ public class OpenEJBContextConfig extend
     @Override
     protected void processAnnotationsFile(File file, WebXml fragment,
             boolean handlesTypesOnly) {
-        logger.debug("processAnnotationsFile "+ file.getAbsolutePath() );
+        logger.debug("processAnnotationsFile {0}", file.getAbsolutePath() );
         try {
             final WebAppInfo webAppInfo = info.get();
 
@@ -92,7 +92,7 @@ public class OpenEJBContextConfig extend
                 return;
             }
 
-            logger.debug("Optimized Scan of File " + file.getAbsolutePath());
+            logger.debug("Optimized Scan of File {0}", file.getAbsolutePath());
 
             // TODO We should just remember which jars each class came from
             // then we wouldn't need to lookup the class from the URL in this
@@ -108,12 +108,12 @@ public class OpenEJBContextConfig extend
                     continue;
                 }
 
-                logger.debug("Found " + webAnnotatedClassName);
+                logger.debug("Found {0}", webAnnotatedClassName);
 
                 final InputStream inputStream = classUrl.openStream();
                 try {
                     processAnnotationsStream(inputStream, fragment, 
handlesTypesOnly);
-                    logger.debug("Succeeded " + webAnnotatedClassName);
+                    logger.debug("Succeeded {0}", webAnnotatedClassName);
                 } catch (IOException e) {
                     e.printStackTrace();
                 } finally {


Reply via email to