From fea04446d7ec62d55471ebf079104c56a466ef88 Mon Sep 17 00:00:00 2001
From: Thomas Mortagne <thomas.mortagne@gmail.com>
Date: Thu, 6 Feb 2025 15:09:33 +0100
Subject: [PATCH] XWIKI-22862: Provider a jakarta version of
 SessionCreatedEvent and SessionDestroyedEvent

---
 .../xwiki/container/servlet/events/SessionCreatedEvent.java   | 2 ++
 .../xwiki/container/servlet/events/SessionDestroyedEvent.java | 2 ++
 .../xwiki/container/servlet/internal/HttpSessionManager.java  | 4 ++++
 .../container/servlet/internal/HttpSessionManagerTest.java    | 4 ++++
 4 files changed, 12 insertions(+)

diff --git a/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/events/SessionCreatedEvent.java b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/events/SessionCreatedEvent.java
index b8e8f9df2c3..1e685617fe1 100644
--- a/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/events/SessionCreatedEvent.java
+++ b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/events/SessionCreatedEvent.java
@@ -40,7 +40,9 @@
  * @version $Id$
  * @since 14.5
  * @since 14.4.1
+ * @deprecated use {@link HttpSessionCreatedEvent} instead
  */
+@Deprecated(since = "17.1.0RC1")
 public class SessionCreatedEvent implements Event
 {
     @Override
diff --git a/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/events/SessionDestroyedEvent.java b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/events/SessionDestroyedEvent.java
index 02809224d9f..a5b85faa9f4 100644
--- a/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/events/SessionDestroyedEvent.java
+++ b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/events/SessionDestroyedEvent.java
@@ -40,7 +40,9 @@
  * @version $Id$
  * @since 14.5
  * @since 14.4.1
+ * @deprecated use {@link HttpSessionDestroyedEvent} instead
  */
+@Deprecated(since = "17.1.0RC1")
 public class SessionDestroyedEvent implements Event
 {
     @Override
diff --git a/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/internal/HttpSessionManager.java b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/internal/HttpSessionManager.java
index 6675f84785f..48c571d1fbb 100644
--- a/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/internal/HttpSessionManager.java
+++ b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/main/java/org/xwiki/container/servlet/internal/HttpSessionManager.java
@@ -34,6 +34,8 @@
 import org.xwiki.component.phase.Disposable;
 import org.xwiki.component.phase.Initializable;
 import org.xwiki.component.phase.InitializationException;
+import org.xwiki.container.servlet.events.HttpSessionCreatedEvent;
+import org.xwiki.container.servlet.events.HttpSessionDestroyedEvent;
 import org.xwiki.container.servlet.events.SessionCreatedEvent;
 import org.xwiki.container.servlet.events.SessionDestroyedEvent;
 import org.xwiki.jakartabridge.servlet.JakartaServletBridge;
@@ -80,6 +82,7 @@ public void sessionCreated(HttpSessionEvent se)
     {
         HttpSession session = se.getSession();
         this.sessionsList.add(session);
+        this.observationManager.notify(new HttpSessionCreatedEvent(), session, null);
         // This event is expected to be associated with a javax version of the session
         this.observationManager.notify(new SessionCreatedEvent(), JakartaServletBridge.toJavax(session), null);
     }
@@ -89,6 +92,7 @@ public void sessionDestroyed(HttpSessionEvent se)
     {
         HttpSession session = se.getSession();
         this.sessionsList.remove(session);
+        this.observationManager.notify(new HttpSessionDestroyedEvent(), session, null);
         // This event is expected to be associated with a javax version of the session
         this.observationManager.notify(new SessionDestroyedEvent(), JakartaServletBridge.toJavax(session), null);
     }
diff --git a/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/test/java/org/xwiki/container/servlet/internal/HttpSessionManagerTest.java b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/test/java/org/xwiki/container/servlet/internal/HttpSessionManagerTest.java
index a08b6cde3c0..c856d942551 100644
--- a/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/test/java/org/xwiki/container/servlet/internal/HttpSessionManagerTest.java
+++ b/xwiki-platform-core/xwiki-platform-container/xwiki-platform-container-servlet/src/test/java/org/xwiki/container/servlet/internal/HttpSessionManagerTest.java
@@ -26,6 +26,8 @@
 
 import org.junit.jupiter.api.Test;
 import org.xwiki.component.manager.ComponentLifecycleException;
+import org.xwiki.container.servlet.events.HttpSessionCreatedEvent;
+import org.xwiki.container.servlet.events.HttpSessionDestroyedEvent;
 import org.xwiki.container.servlet.events.SessionCreatedEvent;
 import org.xwiki.container.servlet.events.SessionDestroyedEvent;
 import org.xwiki.jakartabridge.servlet.JakartaServletBridge;
@@ -71,10 +73,12 @@ void sessionCreatedAndDestroyed()
         this.httpSessionManager.sessionCreated(httpSessionEvent);
         assertEquals(1,  this.httpSessionManager.getSessionList().size());
         assertEquals(jakartaSession, this.httpSessionManager.getSessionList().get(0));
+        verify(this.observationManager).notify(any(HttpSessionCreatedEvent.class), eq(jakartaSession), isNull());
         verify(this.observationManager).notify(any(SessionCreatedEvent.class), eq(javaxSession), isNull());
 
         this.httpSessionManager.sessionDestroyed(httpSessionEvent);
         assertTrue(this.httpSessionManager.getSessionList().isEmpty());
+        verify(this.observationManager).notify(any(HttpSessionDestroyedEvent.class), eq(jakartaSession), isNull());
         verify(this.observationManager).notify(any(SessionDestroyedEvent.class), eq(javaxSession), isNull());
     }
 
-- 
GitLab