You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by cz...@apache.org on 2015/05/15 11:31:40 UTC

svn commit: r1679520 - in /felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal: HttpServiceController.java whiteboard/PerContextEventListener.java whiteboard/WhiteboardManager.java

Author: cziegeler
Date: Fri May 15 09:31:39 2015
New Revision: 1679520

URL: http://svn.apache.org/r1679520
Log:
FELIX-4841 : Support HttpSessionIdListener

Modified:
    felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/HttpServiceController.java
    felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/PerContextEventListener.java
    felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/WhiteboardManager.java

Modified: felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/HttpServiceController.java
URL: http://svn.apache.org/viewvc/felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/HttpServiceController.java?rev=1679520&r1=1679519&r2=1679520&view=diff
==============================================================================
--- felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/HttpServiceController.java (original)
+++ felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/HttpServiceController.java Fri May 15 09:31:39 2015
@@ -97,12 +97,12 @@ public final class HttpServiceController
         return new HttpSessionIdListener() {
 
             @Override
-            public void sessionIdChanged(HttpSessionEvent event, String oldSessionId) {
-                // TODO Auto-generated method stub
-
+            public void sessionIdChanged(final HttpSessionEvent event, String oldSessionId) {
+                whiteboardManager.sessionIdChanged(event, oldSessionId, HttpSessionWrapper.getSessionContextIds(event.getSession()));
             }
         };
     }
+
     public void setProperties(final Hashtable<String, Object> props)
     {
         this.httpServiceFactory.setProperties(props);

Modified: felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/PerContextEventListener.java
URL: http://svn.apache.org/viewvc/felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/PerContextEventListener.java?rev=1679520&r1=1679519&r2=1679520&view=diff
==============================================================================
--- felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/PerContextEventListener.java (original)
+++ felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/PerContextEventListener.java Fri May 15 09:31:39 2015
@@ -51,6 +51,7 @@ import org.osgi.framework.ServiceReferen
 public final class PerContextEventListener implements
         HttpSessionListener,
         HttpSessionAttributeListener,
+        HttpSessionIdListener,
         ServletContextAttributeListener,
         ServletRequestListener,
         ServletRequestAttributeListener
@@ -435,4 +436,15 @@ public final class PerContextEventListen
                 requestAttributeListeners.keySet(),
                 requestListeners.keySet());
     }
+
+    /**
+     * @see javax.servlet.http.HttpSessionIdListener#sessionIdChanged(javax.servlet.http.HttpSessionEvent, java.lang.String)
+     */
+    @Override
+    public void sessionIdChanged(@Nonnull final HttpSessionEvent event, @Nonnull final String oldSessionId) {
+        for (final HttpSessionIdListener l : sessionIdListeners.values())
+        {
+            l.sessionIdChanged(event, oldSessionId);
+        }
+    }
 }

Modified: felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/WhiteboardManager.java
URL: http://svn.apache.org/viewvc/felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/WhiteboardManager.java?rev=1679520&r1=1679519&r2=1679520&view=diff
==============================================================================
--- felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/WhiteboardManager.java (original)
+++ felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/WhiteboardManager.java Fri May 15 09:31:39 2015
@@ -39,6 +39,7 @@ import javax.annotation.Nonnull;
 import javax.servlet.ServletContext;
 import javax.servlet.ServletContextListener;
 import javax.servlet.http.HttpSession;
+import javax.servlet.http.HttpSessionEvent;
 
 import org.apache.felix.http.base.internal.context.ExtServletContext;
 import org.apache.felix.http.base.internal.handler.HandlerRegistry;
@@ -251,6 +252,24 @@ public final class WhiteboardManager
             }
         }
     }
+
+    /**
+     * Handle session id changes
+     * @param session The session where the id changed
+     * @param oldSessionId The old session id
+     * @param contextIds The context ids using that session
+     */
+    public void sessionIdChanged(@Nonnull final HttpSessionEvent event, String oldSessionId, final Set<Long> contextIds)
+    {
+        for(final Long contextId : contextIds)
+        {
+            final ContextHandler handler = this.getContextHandler(contextId);
+            if ( handler != null )
+            {
+                handler.getListenerRegistry().sessionIdChanged(event, oldSessionId);
+            }
+        }
+    }
 
     /**
      * Activate a servlet context helper.