Looks like this is a bug in 5.0.18 that has been fixed in 5.1.0.0. See
http://issues.apache.org/jira/browse/TAP5-413 for details.

-Dave


On Mon, Mar 9, 2009 at 6:11 PM, Dave Dombrosky <dom...@gmail.com> wrote:
> Sorry I may have jumped the gun.  I thought I had this fixed, but I
> must have been testing on Jetty and not Tomcat.  Still broken in
> Tomcat.
>
> -Dave
>
>
> On Mon, Mar 9, 2009 at 5:49 PM, Dave Dombrosky <dom...@gmail.com> wrote:
>> Peter, returning true "works", but it does not redirect the user to a
>> different page than they were on.  Normally you want the user to be
>> sent to a different page if they are in a secure area of the site when
>> logging off.
>>
>> I was just able to fix my problem with a similar situation.  I was
>> trying to return my home page as a Class, but Tapestry did not like
>> initializing the page after the session had been invalidated.  To
>> solve this, I injected the page using @InjectPage, and then used that
>> value in the method return.  The key here seems to be getting the page
>> initialized before the session is invalidated.
>>
>> Now for Harald's case, this might be difficult to implement.  It looks
>> like he's got a dynamic start page that he wants a user to be returned
>> to.  Somehow he's going to have to get an instance of the page and
>> return that, instead of returning a URL.  I'm not quite sure how to do
>> that here, but maybe someone else can chime in.
>>
>> -Dave
>>
>>
>> On Mon, Mar 9, 2009 at 5:46 AM, Peter Stavrinides
>> <p.stavrini...@albourne.com> wrote:
>>> Sorry here is the rest of it:
>>>
>>>  public Object onActionFromLinkLogoff() {
>>>               User user = userDao.load(getVisit().getUserId());
>>>               auditDao.audit(AuditType.LOGOFF, user);
>>>
>>>               String startPage = getVisit().getStartPage();
>>>                componentResources.discardPersistentFieldChanges();
>>>
>>>               if (null != session)
>>>                       request.getSession(false).invalidate();
>>> return true;
>>>               try {
>>>                       return new URL(startPage);
>>>               } catch (MalformedURLException e) {
>>>                       return null;
>>>               }
>>>       }
>>>
>>>
>>> --
>>> If you are not an intended recipient of this e-mail, please notify the 
>>> sender, delete it and do not read, act upon, print, disclose, copy, retain 
>>> or redistribute it. Please visit http://www.albourne.com/email.html for 
>>> important additional terms relating to this e-mail.
>>>
>>> ----- Original Message -----
>>> From: "Peter Stavrinides" <p.stavrini...@albourne.com>
>>> To: "Tapestry users" <users@tapestry.apache.org>
>>> Sent: Monday, 9 March, 2009 11:30:05 GMT +02:00 Athens, Beirut, Bucharest, 
>>> Istanbul
>>> Subject: Re: [T5 5.0.18] java.lang.IllegalStateException: Cannot create a 
>>> session after the response has been committed
>>>
>>>>I have a filer to trim off the long jsession IDs from url
>>> You can do so, but IMHO that should never be necessary, the session id is 
>>> encoded into the URL only once, and then removed by the container (that is 
>>> if you have cookies enabled in the browser). It provides a backwards 
>>> compatibility mechanism and support for devices that can't support cookies. 
>>> The only other reason that it might be encoded request after request is if 
>>> you are creating a new session with each request (a configuration problem 
>>> that can happen for instance when you have a problem with your front end - 
>>> Apache mod_rewrite), which is not mapping your cookie correctly to your 
>>> back end (Tomcat / Jetty etc).
>>>
>>> Returning true is interpreted as a terminator for the request by your 
>>> container, false allows the request to continue naturally, so if you call 
>>> something like session.invalidate(), immediatly after call return true; to 
>>> terminate, invalidate acts like a finalize on the request, so anything that 
>>> trys to do something with it will cause an IllegalStateException.
>>>
>>> The problem I was having the other day related to lazy loading, after an 
>>> invalidate, I could not initialize a new page because a new session could 
>>> not be instantiated at that point, simply setting the property before the 
>>> invalidate fixed that, the second issue was the use of the Response 
>>> Tapestry service rather than HttpServletResponse, where the later cannot be 
>>> tracked by Tapestry so there is a timing issue (like a race condition), 
>>> hence using the first was the solution.
>>>
>>> Cheers,
>>> Peter
>>>
>>>
>>> ----- Original Message -----
>>> From: "Dave Dombrosky" <dom...@gmail.com>
>>> To: "Tapestry users" <users@tapestry.apache.org>
>>> Sent: Monday, 9 March, 2009 05:46:16 GMT +02:00 Athens, Beirut, Bucharest, 
>>> Istanbul
>>> Subject: Re: [T5 5.0.18] java.lang.IllegalStateException: Cannot create a  
>>> session after the response has been committed
>>>
>>> I'm also getting an exception after a session.invalidate() from an
>>> ActionLink and can confirm that it works in Jetty but fails in Tomcat.
>>>  It would be nice to know if there is a workaround.  Here's the
>>> exception:
>>>
>>> java.lang.IllegalStateException: Cannot create a session after the
>>> response has been committed
>>>        org.apache.catalina.connector.Request.doGetSession(Unknown Source)
>>>        org.apache.catalina.connector.Request.getSession(Unknown Source)
>>>        org.apache.catalina.connector.RequestFacade.getSession(Unknown 
>>> Source)
>>>        javax.servlet.http.HttpServletRequestWrapper.getSession(Unknown 
>>> Source)
>>>        
>>> org.apache.tapestry5.internal.services.RequestImpl.getSession(RequestImpl.java:99)
>>>        $Request_11fda81101a.getSession($Request_11fda81101a.java)
>>>        $Request_11fda810fec.getSession($Request_11fda810fec.java)
>>>        
>>> org.apache.tapestry5.internal.services.SessionApplicationStatePersistenceStrategy.requestDidComplete(SessionApplicationStatePersistenceStrategy.java:126)
>>>        
>>> org.apache.tapestry5.internal.services.EndOfRequestListenerHubImpl.fire(EndOfRequestListenerHubImpl.java:40)
>>>        ...
>>>
>>>
>>> On Fri, Mar 6, 2009 at 6:47 AM, Angelo Chen <angelochen...@yahoo.com.hk> 
>>> wrote:
>>>>
>>>> I have same error, the reason is, I have a filer to trim off the long
>>>> jsession IDs from url, solution was, I stopped using invalidate in the T5
>>>> side. however, according to Peter, this happens when you have a 
>>>> sendRedirect
>>>> without a matching return true in a dispatcher, you can try that.
>>>>
>>>>
>>>> Harald Geritzer-2 wrote:
>>>>>
>>>>>
>>>>> hi all,
>>>>>
>>>>> the following code causes IllegalStateExceptions on tomcat 6 while using
>>>>> jetty it works without
>>>>> errors. any idea?
>>>>>
>>>>>       public URL onActionFromLinkLogoff() {
>>>>>               User user = userDao.load(getVisit().getUserId());
>>>>>               auditDao.audit(AuditType.LOGOFF, user);
>>>>>
>>>>>               String startPage = getVisit().getStartPage();
>>>>>               Session session = request.getSession(false);
>>>>>
>>>>>               componentResources.discardPersistentFieldChanges();
>>>>>
>>>>>               if (null != session)
>>>>>                       session.invalidate();
>>>>>               try {
>>>>>                       return new URL(startPage);
>>>>>               } catch (MalformedURLException e) {
>>>>>                       return null;
>>>>>               }
>>>>>       }
>>>>>
>>>>> ---------------------------------------------------------------------
>>>>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
>>>>> For additional commands, e-mail: users-h...@tapestry.apache.org
>>>>>
>>>>>
>>>>>
>>>>
>>>> --
>>>> View this message in context: 
>>>> http://www.nabble.com/-T5-5.0.18--java.lang.IllegalStateException%3A-Cannot-create-a-session-after-the-response-has-been-committed-tp22369307p22369465.html
>>>> Sent from the Tapestry - User mailing list archive at Nabble.com.
>>>>
>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
>>>> For additional commands, e-mail: users-h...@tapestry.apache.org
>>>>
>>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
>>> For additional commands, e-mail: users-h...@tapestry.apache.org
>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
>>> For additional commands, e-mail: users-h...@tapestry.apache.org
>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
>>> For additional commands, e-mail: users-h...@tapestry.apache.org
>>>
>>>
>>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org

Reply via email to