Also Tomcat throws an IllegalStateException when Jetty doesn't because there is an inconsistency between 2.3 compliant and 2.4 containers:
Try: -- 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