You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by st...@apache.org on 2012/05/22 13:13:18 UTC

svn commit: r1341407 - in /openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans: servlet/WebBeansConfigurationListener.java web/failover/DefaultOwbFailOverService.java web/failover/FailOverBag.java web/failover/FailOverFilter.java

Author: struberg
Date: Tue May 22 11:13:17 2012
New Revision: 1341407

URL: http://svn.apache.org/viewvc?rev=1341407&view=rev
Log:
OWB-669 provide Session eviction via a Servlet Filter

Thanks to Thomas Andraschko for the patch!
Applied with minor cleanup.

Added:
    openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/failover/FailOverFilter.java   (with props)
Modified:
    openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/servlet/WebBeansConfigurationListener.java
    openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/failover/DefaultOwbFailOverService.java
    openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/failover/FailOverBag.java

Modified: openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/servlet/WebBeansConfigurationListener.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/servlet/WebBeansConfigurationListener.java?rev=1341407&r1=1341406&r2=1341407&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/servlet/WebBeansConfigurationListener.java (original)
+++ openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/servlet/WebBeansConfigurationListener.java Tue May 22 11:13:17 2012
@@ -36,8 +36,6 @@ import javax.servlet.ServletContextEvent
 import javax.servlet.ServletContextListener;
 import javax.servlet.ServletRequestEvent;
 import javax.servlet.ServletRequestListener;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
 import javax.servlet.http.HttpSessionEvent;
 import javax.servlet.http.HttpSessionListener;
 
@@ -113,21 +111,6 @@ public class WebBeansConfigurationListen
         {
             logger.debug("Destroying a request : [{0}]", event.getServletRequest().getRemoteAddr());
         }
-
-        if (failoverService != null && 
-                failoverService.isSupportFailOver()) 
-        {
-            Object request = event.getServletRequest();
-            if(request instanceof HttpServletRequest)
-            {
-                HttpServletRequest httpRequest = (HttpServletRequest)request;
-                HttpSession session = httpRequest.getSession(false);
-                if (session != null) 
-                {
-                    failoverService.sessionIsIdle(session);
-                }
-            }
-        }
         
         // clean up the EL caches after each request
         ELContextStore elStore = ELContextStore.getInstance(false);

Modified: openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/failover/DefaultOwbFailOverService.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/failover/DefaultOwbFailOverService.java?rev=1341407&r1=1341406&r2=1341407&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/failover/DefaultOwbFailOverService.java (original)
+++ openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/failover/DefaultOwbFailOverService.java Tue May 22 11:13:17 2012
@@ -69,14 +69,14 @@ public class DefaultOwbFailOverService i
     {
         String value;
         value = WebBeansContext.getInstance().getOpenWebBeansConfiguration().
-            getProperty(OWB_FAILOVER_IS_SUPPORT_FAILOVER);
+                getProperty(OWB_FAILOVER_IS_SUPPORT_FAILOVER);
         if (value != null && value.equalsIgnoreCase("true"))
         {
             isSupportFailOver = true;
         }
 
         value = WebBeansContext.getInstance().getOpenWebBeansConfiguration().
-        getProperty(OWB_FAILOVER_IS_SUPPORT_PASSIVATE);
+                getProperty(OWB_FAILOVER_IS_SUPPORT_PASSIVATE);
         if (value != null && value.equalsIgnoreCase("true"))
         {
             isSupportPassivation = true;

Modified: openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/failover/FailOverBag.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/failover/FailOverBag.java?rev=1341407&r1=1341406&r2=1341407&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/failover/FailOverBag.java (original)
+++ openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/failover/FailOverBag.java Tue May 22 11:13:17 2012
@@ -30,7 +30,6 @@ import org.apache.webbeans.context.Conve
 import org.apache.webbeans.context.SessionContext;
 import org.apache.webbeans.conversation.ConversationManager;
 import org.apache.webbeans.logger.WebBeansLogger;
-import org.apache.webbeans.spi.ContextsService;
 import org.apache.webbeans.spi.FailOverService;
 import org.apache.webbeans.web.context.SessionContextManager;
 import org.apache.webbeans.web.context.WebContextsService;
@@ -78,8 +77,7 @@ public class FailOverBag implements Seri
     public void updateOwbFailOverBag(HttpSession session, FailOverService service) 
     {
         // get the session context
-        SessionContextManager sessionManager = ((WebContextsService)webBeansContext.getContextsService()).getSessionContextManager();
-        sessionContext = sessionManager.getSessionContextWithSessionId(session.getId());
+        sessionContext = (SessionContext) webBeansContext.getBeanManagerImpl().getContext(SessionScoped.class);
 
         // get all conversation contexts 
         ConversationManager conversationManager = webBeansContext.getConversationManager();
@@ -95,8 +93,9 @@ public class FailOverBag implements Seri
             
             if (sessionContext != null) 
             {
-                ContextsService contextsService = webBeansContext.getContextsService();
-                contextsService.activateContext(SessionScoped.class);
+                SessionContextManager sessionManager = ((WebContextsService)webBeansContext.getContextsService()).getSessionContextManager();
+                sessionManager.addNewSessionContext(sessionId, sessionContext);
+                sessionContext.setActive(true);
             }
             if (conversationContextMap != null && !conversationContextMap.isEmpty())
             {

Added: openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/failover/FailOverFilter.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/failover/FailOverFilter.java?rev=1341407&view=auto
==============================================================================
--- openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/failover/FailOverFilter.java (added)
+++ openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/failover/FailOverFilter.java Tue May 22 11:13:17 2012
@@ -0,0 +1,87 @@
+/*
+ * 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.web.failover;
+
+import java.io.IOException;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+
+import org.apache.webbeans.config.WebBeansContext;
+import org.apache.webbeans.spi.FailOverService;
+
+/**
+ * {@link Filter} which handles the bean fail over.
+ * This extra {@link Filter} is required because
+ * {@link javax.servlet.ServletRequestListener#requestDestroyed(javax.servlet.ServletRequestEvent)}
+ * will be called after Tomcats session replication and is not in sync with the specs.
+ */
+public class FailOverFilter implements Filter
+{
+    protected FailOverService failoverService;
+
+    /**
+     * Default constructor.
+     */
+    public FailOverFilter()
+    {
+        WebBeansContext webBeansContext = WebBeansContext.currentInstance();
+        failoverService = webBeansContext.getService(FailOverService.class);
+    }
+
+    public void destroy()
+    {
+        //do nothing
+    }
+
+    public void doFilter(ServletRequest request, ServletResponse response,
+                         FilterChain chain) throws IOException, ServletException
+    {
+        try
+        {
+            chain.doFilter(request, response);
+        }
+        finally
+        {
+            if (failoverService != null
+                && failoverService.isSupportFailOver()
+                && request instanceof HttpServletRequest)
+            {
+                HttpServletRequest httpRequest = (HttpServletRequest) request;
+                HttpSession session = httpRequest.getSession(false);
+
+                if (session != null)
+                {
+                    failoverService.sessionIsIdle(session);
+                }
+            }
+        }
+    }
+
+    public void init(FilterConfig config) throws ServletException
+    {
+        //do nothing
+    }
+}

Propchange: openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/failover/FailOverFilter.java
------------------------------------------------------------------------------
    svn:eol-style = native