Author: mgrigorov
Date: Tue May 10 07:09:37 2011
New Revision: 1101345

URL: http://svn.apache.org/viewvc?rev=1101345&view=rev
Log:
WICKET-3690 Session is invalidated more than once because 
Session.sessionInvalidated is not reset

Moved the invocation of Session#detach() after the RequestCycleListener's 
#onDetach(). This way there is no need of RCL for the session detaching and it 
is executed always after the other listeners.
This way it looks like in 1.4 - there Session#detach() is called at the last 
step of RequestCycle#detach() - #threadDetach().

Unit tests pass.
Authentication and authorization examples work as expected.
Our application also works as expected even without null-ifying the 
'sessionInvalidated' flag.


Modified:
    wicket/trunk/wicket-core/src/main/java/org/apache/wicket/Session.java
    
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/cycle/RequestCycle.java

Modified: wicket/trunk/wicket-core/src/main/java/org/apache/wicket/Session.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/Session.java?rev=1101345&r1=1101344&r2=1101345&view=diff
==============================================================================
--- wicket/trunk/wicket-core/src/main/java/org/apache/wicket/Session.java 
(original)
+++ wicket/trunk/wicket-core/src/main/java/org/apache/wicket/Session.java Tue 
May 10 07:09:37 2011
@@ -33,7 +33,6 @@ import org.apache.wicket.feedback.Feedba
 import org.apache.wicket.page.IPageManager;
 import org.apache.wicket.request.ClientInfo;
 import org.apache.wicket.request.Request;
-import org.apache.wicket.request.cycle.AbstractRequestCycleListener;
 import org.apache.wicket.request.cycle.RequestCycle;
 import org.apache.wicket.session.ISessionStore;
 import org.apache.wicket.util.lang.Objects;
@@ -458,18 +457,6 @@ public abstract class Session implements
         */
        public void invalidate()
        {
-               if (sessionInvalidated == false)
-               {
-                       RequestCycle.get().getListeners().add(new 
AbstractRequestCycleListener()
-                       {
-                               @Override
-                               public void onDetach(final RequestCycle cycle)
-                               {
-                                       detach();
-                               }
-                       });
-               }
-
                sessionInvalidated = true;
        }
 
@@ -633,7 +620,6 @@ public abstract class Session implements
                if (sessionInvalidated)
                {
                        invalidateNow();
-                       sessionInvalidated = false;
                }
        }
 

Modified: 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/cycle/RequestCycle.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/cycle/RequestCycle.java?rev=1101345&r1=1101344&r2=1101345&view=diff
==============================================================================
--- 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/cycle/RequestCycle.java
 (original)
+++ 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/cycle/RequestCycle.java
 Tue May 10 07:09:37 2011
@@ -513,8 +513,6 @@ public class RequestCycle implements IRe
         */
        public void onDetach()
        {
-
-
                if (cleanupFeedbackMessagesOnDetach)
                {
                        if (Session.exists())
@@ -523,11 +521,6 @@ public class RequestCycle implements IRe
                        }
                }
 
-               if (Session.exists())
-               {
-                       Session.get().detach();
-               }
-
                try
                {
                        onEndRequest();
@@ -546,6 +539,12 @@ public class RequestCycle implements IRe
                {
                        listeners.onDetach(this);
                }
+
+               if (Session.exists())
+               {
+                       Session.get().detach();
+               }
+
        }
 
        /**


Reply via email to