Author: struberg
Date: Fri Aug  3 21:11:02 2012
New Revision: 1369210

URL: http://svn.apache.org/viewvc?rev=1369210&view=rev
Log:
OWB-690 better support for stopping contexts for testing

Added:
    
openwebbeans/trunk/webbeans-test/cditest-owb/src/test/java/org/apache/webbeans/cditest/test/ApplicationScopedTestBean.java
    
openwebbeans/trunk/webbeans-test/cditest-owb/src/test/java/org/apache/webbeans/cditest/test/RequestScopedTestBean.java
      - copied, changed from r1366464, 
openwebbeans/trunk/webbeans-test/cditest-owb/src/test/java/org/apache/webbeans/cditest/test/SessionScopedTestBean.java
Modified:
    
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java
    
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/corespi/se/DefaultContextsService.java
    openwebbeans/trunk/webbeans-test/cditest-owb/pom.xml
    
openwebbeans/trunk/webbeans-test/cditest-owb/src/test/java/org/apache/webbeans/cditest/test/SessionScopedTestBean.java
    
openwebbeans/trunk/webbeans-test/cditest-owb/src/test/java/org/apache/webbeans/cditest/test/TestOwbTestContainer.java
    
openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/context/WebContextsService.java

Modified: 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java?rev=1369210&r1=1369209&r2=1369210&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java
 (original)
+++ 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java
 Fri Aug  3 21:11:02 2012
@@ -1105,7 +1105,7 @@ public class BeanManagerImpl implements 
         additionalInterceptorBindingTypes.clear();
         additionalQualifiers.clear();
         additionalScopes.clear();
-        cacheProxies.clear();
+        clearCacheProxies();
         singleContextMap.clear();
         contextMap.clear();
         deploymentBeans.clear();
@@ -1117,6 +1117,11 @@ public class BeanManagerImpl implements 
         webBeansInterceptors.clear();
     }
 
+    public void clearCacheProxies()
+    {
+        cacheProxies.clear();
+    }
+
     public boolean isInUse()
     {
         return inUse;

Modified: 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/corespi/se/DefaultContextsService.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/corespi/se/DefaultContextsService.java?rev=1369210&r1=1369209&r2=1369210&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/corespi/se/DefaultContextsService.java
 (original)
+++ 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/corespi/se/DefaultContextsService.java
 Fri Aug  3 21:11:02 2012
@@ -29,6 +29,7 @@ import javax.enterprise.context.SessionS
 import javax.enterprise.context.spi.Context;
 import javax.inject.Singleton;
 
+import org.apache.webbeans.config.WebBeansContext;
 import org.apache.webbeans.context.AbstractContextsService;
 import org.apache.webbeans.context.ApplicationContext;
 import org.apache.webbeans.context.ConversationContext;
@@ -315,6 +316,9 @@ public class DefaultContextsService exte
         {
             applicationContext.destroy();
             applicationContext = null;
+
+            // this is needed to get rid of ApplicationScoped beans which are 
cached inside the proxies...
+            
WebBeansContext.currentInstance().getBeanManagerImpl().clearCacheProxies();
         }
     }
 
@@ -325,6 +329,9 @@ public class DefaultContextsService exte
         {
             conversationContext.get().destroy();   
         }
+
+        conversationContext.set(null);
+        conversationContext.remove();
     }
 
     
@@ -334,6 +341,9 @@ public class DefaultContextsService exte
         {
             requestContext.get().destroy();   
         }
+
+        requestContext.set(null);
+        requestContext.remove();
     }
 
     
@@ -342,7 +352,10 @@ public class DefaultContextsService exte
         if(sessionContext.get() != null)
         {
             sessionContext.get().destroy();   
-        }        
+        }
+
+        sessionContext.set(null);
+        sessionContext.remove();
     }
 
     
@@ -352,6 +365,9 @@ public class DefaultContextsService exte
         {
             singletonContext.get().destroy();   
         }
+
+        singletonContext.set(null);
+        singletonContext.remove();
     }
 
 }

Modified: openwebbeans/trunk/webbeans-test/cditest-owb/pom.xml
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-test/cditest-owb/pom.xml?rev=1369210&r1=1369209&r2=1369210&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-test/cditest-owb/pom.xml (original)
+++ openwebbeans/trunk/webbeans-test/cditest-owb/pom.xml Fri Aug  3 21:11:02 
2012
@@ -89,4 +89,18 @@
         
     </dependencies>
 
+
+    <profiles>
+        <profile>
+            <id>web</id>
+            <!-- simulate a unit test when webbeans-web is in the Classpath -->
+            <dependencies>
+                <dependency>
+                    <groupId>org.apache.openwebbeans</groupId>
+                    <artifactId>openwebbeans-web</artifactId>
+                </dependency>
+            </dependencies>
+
+        </profile>
+    </profiles>
 </project>

Added: 
openwebbeans/trunk/webbeans-test/cditest-owb/src/test/java/org/apache/webbeans/cditest/test/ApplicationScopedTestBean.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-test/cditest-owb/src/test/java/org/apache/webbeans/cditest/test/ApplicationScopedTestBean.java?rev=1369210&view=auto
==============================================================================
--- 
openwebbeans/trunk/webbeans-test/cditest-owb/src/test/java/org/apache/webbeans/cditest/test/ApplicationScopedTestBean.java
 (added)
+++ 
openwebbeans/trunk/webbeans-test/cditest-owb/src/test/java/org/apache/webbeans/cditest/test/ApplicationScopedTestBean.java
 Fri Aug  3 21:11:02 2012
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.webbeans.cditest.test;
+
+import java.io.Serializable;
+
+import javax.enterprise.context.ApplicationScoped;
+
+@ApplicationScoped
+public class ApplicationScopedTestBean implements Serializable {
+    private int i = 0;
+
+    public int getI() {
+        return i;
+    }
+
+    public void setI(int i) {
+        this.i = i;
+    }
+}

Copied: 
openwebbeans/trunk/webbeans-test/cditest-owb/src/test/java/org/apache/webbeans/cditest/test/RequestScopedTestBean.java
 (from r1366464, 
openwebbeans/trunk/webbeans-test/cditest-owb/src/test/java/org/apache/webbeans/cditest/test/SessionScopedTestBean.java)
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-test/cditest-owb/src/test/java/org/apache/webbeans/cditest/test/RequestScopedTestBean.java?p2=openwebbeans/trunk/webbeans-test/cditest-owb/src/test/java/org/apache/webbeans/cditest/test/RequestScopedTestBean.java&p1=openwebbeans/trunk/webbeans-test/cditest-owb/src/test/java/org/apache/webbeans/cditest/test/SessionScopedTestBean.java&r1=1366464&r2=1369210&rev=1369210&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-test/cditest-owb/src/test/java/org/apache/webbeans/cditest/test/SessionScopedTestBean.java
 (original)
+++ 
openwebbeans/trunk/webbeans-test/cditest-owb/src/test/java/org/apache/webbeans/cditest/test/RequestScopedTestBean.java
 Fri Aug  3 21:11:02 2012
@@ -20,11 +20,11 @@ package org.apache.webbeans.cditest.test
 
 import java.io.Serializable;
 
-import javax.enterprise.context.SessionScoped;
+import javax.enterprise.context.RequestScoped;
 
-@SessionScoped
-public class SessionScopedTestBean implements Serializable {
-    private int i;
+@RequestScoped
+public class RequestScopedTestBean implements Serializable {
+    private int i = 0;
 
     public int getI() {
         return i;

Modified: 
openwebbeans/trunk/webbeans-test/cditest-owb/src/test/java/org/apache/webbeans/cditest/test/SessionScopedTestBean.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-test/cditest-owb/src/test/java/org/apache/webbeans/cditest/test/SessionScopedTestBean.java?rev=1369210&r1=1369209&r2=1369210&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-test/cditest-owb/src/test/java/org/apache/webbeans/cditest/test/SessionScopedTestBean.java
 (original)
+++ 
openwebbeans/trunk/webbeans-test/cditest-owb/src/test/java/org/apache/webbeans/cditest/test/SessionScopedTestBean.java
 Fri Aug  3 21:11:02 2012
@@ -24,7 +24,7 @@ import javax.enterprise.context.SessionS
 
 @SessionScoped
 public class SessionScopedTestBean implements Serializable {
-    private int i;
+    private int i = 0;
 
     public int getI() {
         return i;

Modified: 
openwebbeans/trunk/webbeans-test/cditest-owb/src/test/java/org/apache/webbeans/cditest/test/TestOwbTestContainer.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-test/cditest-owb/src/test/java/org/apache/webbeans/cditest/test/TestOwbTestContainer.java?rev=1369210&r1=1369209&r2=1369210&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-test/cditest-owb/src/test/java/org/apache/webbeans/cditest/test/TestOwbTestContainer.java
 (original)
+++ 
openwebbeans/trunk/webbeans-test/cditest-owb/src/test/java/org/apache/webbeans/cditest/test/TestOwbTestContainer.java
 Fri Aug  3 21:11:02 2012
@@ -27,15 +27,69 @@ import junit.framework.TestCase;
 
 public class TestOwbTestContainer extends TestCase {
 
+    private static final int DEFAULT_VAL = 42;
+
     @Test
     public void testInstanceRetrieval() throws Exception
     {
         CdiTestContainer cdi = CdiTestContainerLoader.getCdiContainer();
         cdi.bootContainer();
 
-        SessionScopedTestBean testReference = 
cdi.getInstance(SessionScopedTestBean.class);
-        Assert.assertNotNull(testReference);
+        assertAll(cdi, 0);
+
+        cdi.stopContexts();
+        cdi.startContexts();
+
+        assertAll(cdi, 0);
+
+        cdi.stopRequestScope();
+        cdi.stopSessionScope();
+        cdi.stopApplicationScope();
+        cdi.startRequestScope();
+        cdi.startSessionScope();
+        cdi.startApplicationScope();
+
+        assertAll(cdi, 0);
+
+        cdi.stopRequestScope();
+        cdi.startRequestScope();
+
+        assertReq(cdi, 0);
+        assertSess(cdi, DEFAULT_VAL);
+        assertApp(cdi, DEFAULT_VAL);
 
         cdi.shutdownContainer();
     }
+
+    private void assertAll(CdiTestContainer cdi, int value) {
+        assertReq(cdi, value);
+        assertSess(cdi, value);
+        assertApp(cdi, value);
+    }
+
+    private void assertReq(CdiTestContainer cdi, int value)
+    {
+        RequestScopedTestBean testReq = 
cdi.getInstance(RequestScopedTestBean.class);
+        Assert.assertNotNull(testReq);
+        Assert.assertEquals(value, testReq.getI());
+        testReq.setI(DEFAULT_VAL);
+
+    }
+
+    private void assertSess(CdiTestContainer cdi, int value)
+    {
+        SessionScopedTestBean testSess = 
cdi.getInstance(SessionScopedTestBean.class);
+        Assert.assertNotNull(testSess);
+        Assert.assertEquals(value, testSess.getI());
+        testSess.setI(DEFAULT_VAL);
+
+    }
+
+    private void assertApp(CdiTestContainer cdi, int value)
+    {
+        ApplicationScopedTestBean testApp = 
cdi.getInstance(ApplicationScopedTestBean.class);
+        Assert.assertNotNull(testApp);
+        Assert.assertEquals(value, testApp.getI());
+        testApp.setI(DEFAULT_VAL);
+    }
 }

Modified: 
openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/context/WebContextsService.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/context/WebContextsService.java?rev=1369210&r1=1369209&r2=1369210&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/context/WebContextsService.java
 (original)
+++ 
openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/context/WebContextsService.java
 Fri Aug  3 21:11:02 2012
@@ -572,6 +572,10 @@ public class WebContextsService extends 
         //Also clear application and singleton context
         applicationContexts.set(null);
         applicationContexts.remove();
+
+        // this is needed to get rid of ApplicationScoped beans which are 
cached inside the proxies...
+        webBeansContext.getBeanManagerImpl().clearCacheProxies();
+
     }
     
     /**


Reply via email to