diff --git a/docs/BUILD.md b/docs/BUILD.md
index 5e32fcd..7ac152c 100644
--- a/docs/BUILD.md
+++ b/docs/BUILD.md
@@ -131,8 +131,8 @@ If release is successful, commit the version and commit and tag changes in git.
```sh
mvn versions:commit
git add *
-git commit -m "version 0.4.4"
-git tag -a v0.4.4 -m "version 0.4.4"
+git commit -m "version 0.4.4.1"
+git tag -a v0.4.4.1 -m "version 0.4.4.1"
git push origin --tags
```
diff --git a/integration-tests/agent-tests/pom.xml b/integration-tests/agent-tests/pom.xml
index ba93f00..f844581 100644
--- a/integration-tests/agent-tests/pom.xml
+++ b/integration-tests/agent-tests/pom.xml
@@ -5,7 +5,7 @@
com.amadeus.session
integration-tests
- 0.4.4
+ 0.4.4.1
agent-tests
jar
diff --git a/integration-tests/arquillian-tests/pom.xml b/integration-tests/arquillian-tests/pom.xml
index 6e84cb6..4b25d27 100644
--- a/integration-tests/arquillian-tests/pom.xml
+++ b/integration-tests/arquillian-tests/pom.xml
@@ -5,7 +5,7 @@
com.amadeus.session
integration-tests
- 0.4.4
+ 0.4.4.1
jar
diff --git a/integration-tests/pom.xml b/integration-tests/pom.xml
index a610cd9..b6a4a5b 100644
--- a/integration-tests/pom.xml
+++ b/integration-tests/pom.xml
@@ -7,7 +7,7 @@
com.amadeus
session
- 0.4.4
+ 0.4.4.1
pom
integration-tests
diff --git a/pom.xml b/pom.xml
index e1ab791..4fac2ec 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
4.0.0
com.amadeus
session
- 0.4.4
+ 0.4.4.1
pom
HttpSessionReplacer
Provides management of application sessions via a session repository (e.g. Redis). General JEE container use case with HttpSession is supported.
diff --git a/session-agent/pom.xml b/session-agent/pom.xml
index 97f24ca..4f7d7c4 100644
--- a/session-agent/pom.xml
+++ b/session-agent/pom.xml
@@ -5,7 +5,7 @@
com.amadeus
session
- 0.4.4
+ 0.4.4.1
session-agent
JVM agent that enables session support in a JEE container.
diff --git a/session-replacement/pom.xml b/session-replacement/pom.xml
index efa1f02..369958f 100644
--- a/session-replacement/pom.xml
+++ b/session-replacement/pom.xml
@@ -5,7 +5,7 @@
com.amadeus
session
- 0.4.4
+ 0.4.4.1
session-replacement
Implementation of session management for JEE HttpSessions and general use case. Includes implemenations of in-memory and redis session distribution.
diff --git a/session-replacement/src/main/java/com/amadeus/session/servlet/HttpSessionNotifier.java b/session-replacement/src/main/java/com/amadeus/session/servlet/HttpSessionNotifier.java
index 4745472..78d8cbf 100644
--- a/session-replacement/src/main/java/com/amadeus/session/servlet/HttpSessionNotifier.java
+++ b/session-replacement/src/main/java/com/amadeus/session/servlet/HttpSessionNotifier.java
@@ -155,6 +155,10 @@ public void sessionDestroyed(RepositoryBackedSession session, boolean shutdown)
// We notify all session attribute listeners that each attribute is removed
for (String key : session.getAttributeNamesWithValues()) {
HttpSessionBindingEvent event = new HttpSessionBindingEvent((HttpSession)session, key);
+ Object o = session.getAttribute(key);
+ if (o instanceof HttpSessionBindingListener) {
+ ((HttpSessionBindingListener) o).valueUnbound(event);
+ }
for (HttpSessionAttributeListener listener : descriptor.getHttpSessionAttributeListeners()) {
listener.attributeRemoved(event);
}
diff --git a/session-replacement/src/test/java/com/amadeus/session/servlet/TestHttpSessionNotifier.java b/session-replacement/src/test/java/com/amadeus/session/servlet/TestHttpSessionNotifier.java
index d3ec0ad..2871b58 100644
--- a/session-replacement/src/test/java/com/amadeus/session/servlet/TestHttpSessionNotifier.java
+++ b/session-replacement/src/test/java/com/amadeus/session/servlet/TestHttpSessionNotifier.java
@@ -5,6 +5,9 @@
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import java.util.Arrays;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionActivationListener;
@@ -108,14 +111,25 @@ public void testAttributeHasBeenRestored() {
@Test
public void testSessionDestroyed() {
+ HttpSessionBindingListener bindingListener = mock(HttpSessionBindingListener.class);
+ String dummy = "dummy";
+ when(session.getAttribute("binding")).thenReturn(bindingListener);
+ when(session.getAttribute("attribute")).thenReturn(dummy);
+ when(session.getAttributeNamesWithValues()).thenReturn(Arrays.asList("binding", "attribute"));
HttpSessionListener listener = mock(HttpSessionListener.class);
descriptor.addHttpSessionListener(listener);
notifier.sessionDestroyed(session, false);
+ verify(bindingListener).valueUnbound(any(HttpSessionBindingEvent.class));
verify(listener).sessionDestroyed(any(HttpSessionEvent.class));
HttpSessionListener listener2 = mock(HttpSessionListener.class);
+ HttpSessionBindingListener bindingListener2 = mock(HttpSessionBindingListener.class);
+ when(session.getAttribute("binding2")).thenReturn(bindingListener2);
+ when(session.getAttributeNamesWithValues()).thenReturn(Arrays.asList("binding", "attribute", "binding2"));
descriptor.addHttpSessionListener(listener2);
notifier.sessionDestroyed(session, false);
verify(listener, times(2)).sessionDestroyed(any(HttpSessionEvent.class));
+ verify(bindingListener, times(2)).valueUnbound(any(HttpSessionBindingEvent.class));
+ verify(bindingListener2).valueUnbound(any(HttpSessionBindingEvent.class));
verify(listener2).sessionDestroyed(any(HttpSessionEvent.class));
}