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