This is an automated email from the ASF dual-hosted git repository.
arne pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/openwebbeans.git
The following commit(s) were added to refs/heads/master by this push:
new 4baa03b OWB-1387: Don't throw Lifecycle events for inactive contexts
4baa03b is described below
commit 4baa03b8c757dd40d0433f8c2b84259f510f8d18
Author: arne <[email protected]>
AuthorDate: Sun Jul 4 21:40:21 2021 +0200
OWB-1387: Don't throw Lifecycle events for inactive contexts
---
.../webbeans/corespi/se/BaseSeContextsService.java | 18 ++++++----
.../contexts/session/tests/SessionContextTest.java | 40 ++++++++++++++++++++++
2 files changed, 51 insertions(+), 7 deletions(-)
diff --git
a/webbeans-impl/src/main/java/org/apache/webbeans/corespi/se/BaseSeContextsService.java
b/webbeans-impl/src/main/java/org/apache/webbeans/corespi/se/BaseSeContextsService.java
index c2bec79..bc432a5 100644
---
a/webbeans-impl/src/main/java/org/apache/webbeans/corespi/se/BaseSeContextsService.java
+++
b/webbeans-impl/src/main/java/org/apache/webbeans/corespi/se/BaseSeContextsService.java
@@ -422,13 +422,13 @@ public abstract class BaseSeContextsService extends
AbstractContextsService
}
- if (shouldFireRequestLifecycleEvents())
+ final RequestContext ctx = BaseSeContextsService.requestContext.get();
+ if (ctx != null && shouldFireRequestLifecycleEvents())
{
webBeansContext.getBeanManagerImpl().fireContextLifecyleEvent(
new Object(),
BeforeDestroyedLiteral.INSTANCE_REQUEST_SCOPED);
}
- final RequestContext ctx = BaseSeContextsService.requestContext.get();
if (ctx != null)
{
ctx.destroy();
@@ -438,7 +438,7 @@ public abstract class BaseSeContextsService extends
AbstractContextsService
BaseSeContextsService.requestContext.remove();
RequestScopedBeanInterceptorHandler.removeThreadLocals();
- if (shouldFireRequestLifecycleEvents())
+ if (ctx != null && shouldFireRequestLifecycleEvents())
{
webBeansContext.getBeanManagerImpl().fireContextLifecyleEvent(
ctx, DestroyedLiteral.INSTANCE_REQUEST_SCOPED);
@@ -450,16 +450,20 @@ public abstract class BaseSeContextsService extends
AbstractContextsService
{
webBeansContext.getBeanManagerImpl().fireContextLifecyleEvent(
new Object(), BeforeDestroyedLiteral.INSTANCE_SESSION_SCOPED);
- if(sessionContext.get() != null)
+ SessionContext activeContext = sessionContext.get();
+ if(activeContext != null)
{
- sessionContext.get().destroy();
+ activeContext.destroy();
}
sessionContext.set(null);
sessionContext.remove();
SessionScopedBeanInterceptorHandler.removeThreadLocals();
- webBeansContext.getBeanManagerImpl().fireContextLifecyleEvent(
- new Object(), DestroyedLiteral.INSTANCE_SESSION_SCOPED);
+ if (activeContext != null)
+ {
+ webBeansContext.getBeanManagerImpl().fireContextLifecyleEvent(
+ new Object(), DestroyedLiteral.INSTANCE_SESSION_SCOPED);
+ }
}
diff --git
a/webbeans-impl/src/test/java/org/apache/webbeans/test/contexts/session/tests/SessionContextTest.java
b/webbeans-impl/src/test/java/org/apache/webbeans/test/contexts/session/tests/SessionContextTest.java
index dd3c834..c3ab74b 100644
---
a/webbeans-impl/src/test/java/org/apache/webbeans/test/contexts/session/tests/SessionContextTest.java
+++
b/webbeans-impl/src/test/java/org/apache/webbeans/test/contexts/session/tests/SessionContextTest.java
@@ -112,4 +112,44 @@ public class SessionContextTest extends AbstractUnitTest
Assert.assertEquals(1, AppScopedBean.appContextDestroyedEvent.size());
}
+
+ @Test
+ public void testRequestContextDestroyedEventOnShutdown()
+ {
+ Collection<Class<?>> classes = new ArrayList<Class<?>>();
+ classes.add(PersonalDataBean.class);
+ classes.add(AppScopedBean.class);
+ classes.add(CircularDependentScopedBean.class);
+ classes.add(CircularApplicationScopedBean.class);
+
+ AppScopedBean.appContextInitializedEvent.clear();
+ AppScopedBean.appContextDestroyedEvent.clear();
+ AppScopedBean.sessionContextInitializedEvent.clear();
+ AppScopedBean.sessionContextDestroyedEvent.clear();
+ AppScopedBean.requestContextInitializedEvent.clear();
+ AppScopedBean.requestContextDestroyedEvent.clear();
+
+ startContainer(classes);
+
+ AppScopedBean appBeanInstance = getInstance(AppScopedBean.class);
+ Assert.assertNotNull(appBeanInstance);
+ PersonalDataBean pdb1 = appBeanInstance.getPdb().getInstance();
+ Assert.assertNotNull(pdb1);
+
+ // now we reset the session Context so we should get a new contextual
instance.
+
getWebBeansContext().getContextsService().endContext(SessionScoped.class, null);
+
getWebBeansContext().getContextsService().endContext(RequestScoped.class, null);
+
+ Assert.assertEquals(1,
AppScopedBean.appContextInitializedEvent.size());
+ Assert.assertEquals(1,
AppScopedBean.sessionContextInitializedEvent.size());
+ Assert.assertEquals(1,
AppScopedBean.sessionContextDestroyedEvent.size());
+ Assert.assertEquals(1,
AppScopedBean.requestContextInitializedEvent.size());
+ Assert.assertEquals(1,
AppScopedBean.requestContextDestroyedEvent.size());
+
+ shutDownContainer();
+ Assert.assertEquals(1,
AppScopedBean.requestContextDestroyedEvent.size());
+ Assert.assertEquals(1,
AppScopedBean.sessionContextDestroyedEvent.size());
+
+ Assert.assertEquals(1, AppScopedBean.appContextDestroyedEvent.size());
+ }
}