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();
+
}
/**