Author: rmannibucau
Date: Mon Nov 4 09:23:11 2013
New Revision: 1538537
URL: http://svn.apache.org/r1538537
Log:
OWB-910 starting request scope when session is invalidated too
Modified:
tomee/tomee/trunk/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/BeginWebBeansListener.java
tomee/tomee/trunk/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/EndWebBeansListener.java
Modified:
tomee/tomee/trunk/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/BeginWebBeansListener.java
URL:
http://svn.apache.org/viewvc/tomee/tomee/trunk/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/BeginWebBeansListener.java?rev=1538537&r1=1538536&r2=1538537&view=diff
==============================================================================
---
tomee/tomee/trunk/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/BeginWebBeansListener.java
(original)
+++
tomee/tomee/trunk/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/BeginWebBeansListener.java
Mon Nov 4 09:23:11 2013
@@ -84,7 +84,7 @@ public class BeginWebBeansListener imple
try {
if (logger.isDebugEnabled()) {
- logger.debug("Starting a new request : [{0}]",
event.getServletRequest().getRemoteAddr());
+ logger.debug("Starting a new request : [{0}]", event == null ?
"null" : event.getServletRequest().getRemoteAddr());
}
if (webBeansContext instanceof WebappWebBeansContext) { // start
before child
@@ -96,7 +96,7 @@ public class BeginWebBeansListener imple
// the first time. See OWB-457
} catch (Exception e) {
- logger.error(OWBLogConst.ERROR_0019, event.getServletRequest());
+ logger.error(OWBLogConst.ERROR_0019, event == null ? "null" :
event.getServletRequest());
WebBeansUtil.throwRuntimeExceptions(e);
}
}
@@ -125,13 +125,20 @@ public class BeginWebBeansListener imple
*/
@Override
public void sessionDestroyed(HttpSessionEvent event) {
- // no-op
+ ensureRequestScope();
+ }
+
+ private void ensureRequestScope() {
+ if
(!webBeansContext.getContextsService().getCurrentContext(RequestScoped.class).isActive())
{
+ requestInitialized(null);
+ EndWebBeansListener.FAKE_REQUEST.set(true);
+ }
}
@Override
public void sessionWillPassivate(HttpSessionEvent event) {
- // no-op
+ ensureRequestScope();
}
@Override
@@ -145,13 +152,14 @@ public class BeginWebBeansListener imple
public void contextInitialized(ServletContextEvent servletContextEvent) {
try {
OpenEJBLifecycle.initializeServletContext(servletContextEvent.getServletContext(),
webBeansContext);
- } catch (Exception e) {
- e.printStackTrace();
+ } catch (final Exception e) {
+ logger.warning(e.getMessage(), e);
}
+ ensureRequestScope();
}
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
- // no-op
+ ensureRequestScope();
}
}
Modified:
tomee/tomee/trunk/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/EndWebBeansListener.java
URL:
http://svn.apache.org/viewvc/tomee/tomee/trunk/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/EndWebBeansListener.java?rev=1538537&r1=1538536&r2=1538537&view=diff
==============================================================================
---
tomee/tomee/trunk/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/EndWebBeansListener.java
(original)
+++
tomee/tomee/trunk/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/EndWebBeansListener.java
Mon Nov 4 09:23:11 2013
@@ -29,6 +29,8 @@ import org.apache.webbeans.spi.FailOverS
import javax.enterprise.context.Conversation;
import javax.enterprise.context.RequestScoped;
import javax.enterprise.context.SessionScoped;
+import javax.servlet.ServletContextEvent;
+import javax.servlet.ServletContextListener;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.http.HttpServletRequest;
@@ -42,7 +44,9 @@ import java.util.Map;
*
* Used as a stack executed at the end of the request too. Avoid multiple
(useless) listeners.
*/
-public class EndWebBeansListener implements ServletRequestListener,
HttpSessionListener, HttpSessionActivationListener {
+public class EndWebBeansListener implements ServletContextListener,
ServletRequestListener, HttpSessionListener, HttpSessionActivationListener {
+
+ static final ThreadLocal<Boolean> FAKE_REQUEST = new
ThreadLocal<Boolean>();
private final String contextKey;
@@ -86,11 +90,17 @@ public class EndWebBeansListener impleme
logger.debug("Destroying a request : [{0}]",
event.getServletRequest().getRemoteAddr());
}
- final Object oldContext =
event.getServletRequest().getAttribute(contextKey);
+ final Object oldContext;
+ if (event != null) {
+ oldContext = event.getServletRequest().getAttribute(contextKey);
+ } else {
+ oldContext = null;
+ }
try {
- if (failoverService != null &&
- failoverService.isSupportFailOver()) {
+ if (event != null
+ && failoverService != null
+ && failoverService.isSupportFailOver()) {
Object request = event.getServletRequest();
if (request instanceof HttpServletRequest) {
HttpServletRequest httpRequest = (HttpServletRequest)
request;
@@ -160,6 +170,19 @@ public class EndWebBeansListener impleme
c.destroy();
}
}
+
+ destroyFakedRequest();
+ }
+
+ private void destroyFakedRequest() {
+ final Boolean faked = FAKE_REQUEST.get();
+ try {
+ if (faked != null && faked) {
+ requestDestroyed(null);
+ }
+ } finally {
+ FAKE_REQUEST.remove();
+ }
}
@@ -172,10 +195,21 @@ public class EndWebBeansListener impleme
if (failoverService != null && failoverService.isSupportPassivation())
{
failoverService.sessionWillPassivate(event.getSession());
}
+ destroyFakedRequest();
}
@Override
public void sessionDidActivate(HttpSessionEvent event) {
// no-op
}
+
+ @Override
+ public void contextInitialized(ServletContextEvent servletContextEvent) {
+ destroyFakedRequest();
+ }
+
+ @Override
+ public void contextDestroyed(ServletContextEvent servletContextEvent) {
+ destroyFakedRequest();
+ }
}