You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by hl...@apache.org on 2011/01/07 23:06:22 UTC

svn commit: r1056532 - in /tapestry/tapestry5/trunk/tapestry-core/src: main/java/org/apache/tapestry5/internal/services/RequestImpl.java test/java/org/apache/tapestry5/internal/services/RequestImplTest.java

Author: hlship
Date: Fri Jan  7 22:06:22 2011
New Revision: 1056532

URL: http://svn.apache.org/viewvc?rev=1056532&view=rev
Log:
TAP5-891: Handle the case where the HttpSession is invalidated seperately form the Tapestry Session

Modified:
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RequestImpl.java
    tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/RequestImplTest.java

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RequestImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RequestImpl.java?rev=1056532&r1=1056531&r2=1056532&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RequestImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RequestImpl.java Fri Jan  7 22:06:22 2011
@@ -1,4 +1,4 @@
-// Copyright 2006, 2007, 2008, 2010 The Apache Software Foundation
+// Copyright 2006, 2007, 2008, 2010, 2011 The Apache Software Foundation
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -43,7 +43,9 @@ public class RequestImpl implements Requ
 
     private boolean encodingSet;
 
-    private Session session;
+    HttpSession hsession;
+
+    Session session;
 
     public RequestImpl(HttpServletRequest request, String requestEncoding, SessionPersistedObjectAnalyzer analyzer)
     {
@@ -103,9 +105,22 @@ public class RequestImpl implements Requ
 
     public Session getSession(boolean create)
     {
+        if (session != null)
+        {
+            // The easy case is when the session was invalidated through the Tapestry Session
+            // object. The hard case is when the HttpSession was invalidated outside of Tapestry,
+            // in which case, request.getSession() will return a new HttpSession instance (or null)
+
+            if (session.isInvalidated() || hsession != request.getSession(false))
+            {
+                session = null;
+                hsession = null;
+            }
+        }
+
         if (session == null)
         {
-            HttpSession hsession = request.getSession(create);
+            hsession = request.getSession(create);
 
             if (hsession != null)
             {
@@ -113,9 +128,6 @@ public class RequestImpl implements Requ
             }
         }
 
-        if (!create && session != null && session.isInvalidated())
-            return null;
-
         return session;
     }
 

Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/RequestImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/RequestImplTest.java?rev=1056532&r1=1056531&r2=1056532&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/RequestImplTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/RequestImplTest.java Fri Jan  7 22:06:22 2011
@@ -1,10 +1,10 @@
-// Copyright 2006, 2007, 2008, 2009 The Apache Software Foundation
+// Copyright 2006, 2007, 2008, 2009, 2011 The Apache Software Foundation
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
-//     http://www.apache.org/licenses/LICENSE-2.0
+// http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
 // distributed under the License is distributed on an "AS IS" BASIS,
@@ -128,8 +128,12 @@ public class RequestImplTest extends Int
     @DataProvider
     public Object[][] xhr_inputs()
     {
-        return new Object[][] { { null, false }, { "", false }, { "some other value", false },
-                { "XMLHttpRequest", true } };
+        return new Object[][]
+        {
+        { null, false },
+        { "", false },
+        { "some other value", false },
+        { "XMLHttpRequest", true } };
     }
 
     @Test
@@ -195,28 +199,35 @@ public class RequestImplTest extends Int
     public void get_session_returns_null_if_invalid()
     {
         HttpServletRequest sr = mockHttpServletRequest();
-        HttpSession hsession = mockHttpSession();
-
-        train_getSession(sr, true, hsession);
+        HttpSession hsession1 = mockHttpSession();
+        HttpSession hsession2 = mockHttpSession();
 
-        hsession.invalidate();
+        train_getSession(sr, true, hsession1);
 
         replay();
 
         Request request = new RequestImpl(sr, CHARSET, null);
 
-        Session session = request.getSession(true);
+        Session session1 = request.getSession(true);
 
-        session.invalidate();
+        verify();
 
-        assertNull(request.getSession(false));
+        hsession1.invalidate();
 
-        assertSame(request.getSession(true), session);
+        train_getSession(sr, false, hsession2);
+        train_getSession(sr, true, hsession2);
 
-        verify(); 
-    }
+        replay();
+
+        session1.invalidate();
+
+        Session session2 = request.getSession(true);
 
+        assertNotSame(session2, session1);
+        assertSame(request.getSession(true), session2);
 
+        verify();
+    }
 
     protected final void train_getPathInfo(HttpServletRequest request, String pathInfo)
     {



Re: svn commit: r1056532 - in /tapestry/tapestry5/trunk/tapestry-core/src: main/java/org/apache/tapestry5/internal/services/RequestImpl.java test/java/org/apache/tapestry5/internal/services/RequestImplTest.java

Posted by Kalle Korhonen <ka...@gmail.com>.
Me too, thanks!

Kalle


On Mon, Jan 10, 2011 at 1:34 AM, Massimo Lusetti <ml...@gmail.com> wrote:
> On Fri, Jan 7, 2011 at 11:06 PM,  <hl...@apache.org> wrote:
>
>> Author: hlship
>> Date: Fri Jan  7 22:06:22 2011
>> New Revision: 1056532
>>
>> URL: http://svn.apache.org/viewvc?rev=1056532&view=rev
>> Log:
>> TAP5-891: Handle the case where the HttpSession is invalidated seperately form the Tapestry Session
>>
>
> This is GREAT! ... I've been running with a similar hack for a long
> time! ... Thanks!
>
> Cheers
> --
> Massimo
> http://meridio.blogspot.com
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@tapestry.apache.org
> For additional commands, e-mail: dev-help@tapestry.apache.org
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tapestry.apache.org
For additional commands, e-mail: dev-help@tapestry.apache.org


Re: svn commit: r1056532 - in /tapestry/tapestry5/trunk/tapestry-core/src: main/java/org/apache/tapestry5/internal/services/RequestImpl.java test/java/org/apache/tapestry5/internal/services/RequestImplTest.java

Posted by Massimo Lusetti <ml...@gmail.com>.
On Fri, Jan 7, 2011 at 11:06 PM,  <hl...@apache.org> wrote:

> Author: hlship
> Date: Fri Jan  7 22:06:22 2011
> New Revision: 1056532
>
> URL: http://svn.apache.org/viewvc?rev=1056532&view=rev
> Log:
> TAP5-891: Handle the case where the HttpSession is invalidated seperately form the Tapestry Session
>

This is GREAT! ... I've been running with a similar hack for a long
time! ... Thanks!

Cheers
-- 
Massimo
http://meridio.blogspot.com

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tapestry.apache.org
For additional commands, e-mail: dev-help@tapestry.apache.org