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)); }