FELIX-4841 : Support HttpSessionIdListener
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1679520 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/http/base/src/main/java/org/apache/felix/http/base/internal/HttpServiceController.java b/http/base/src/main/java/org/apache/felix/http/base/internal/HttpServiceController.java
index 79a1958..8976da9 100644
--- a/http/base/src/main/java/org/apache/felix/http/base/internal/HttpServiceController.java
+++ b/http/base/src/main/java/org/apache/felix/http/base/internal/HttpServiceController.java
@@ -97,12 +97,12 @@
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);
diff --git a/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/PerContextEventListener.java b/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/PerContextEventListener.java
index 2b8fdba..c7266ed 100644
--- a/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/PerContextEventListener.java
+++ b/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/PerContextEventListener.java
@@ -51,6 +51,7 @@
public final class PerContextEventListener implements
HttpSessionListener,
HttpSessionAttributeListener,
+ HttpSessionIdListener,
ServletContextAttributeListener,
ServletRequestListener,
ServletRequestAttributeListener
@@ -435,4 +436,15 @@
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);
+ }
+ }
}
diff --git a/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/WhiteboardManager.java b/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/WhiteboardManager.java
index 2b8575e..8f5032a 100644
--- a/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/WhiteboardManager.java
+++ b/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/WhiteboardManager.java
@@ -39,6 +39,7 @@
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;
@@ -253,6 +254,24 @@
}
/**
+ * 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.
* @param contextInfo A context info
*/