You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by "Howard M. Lewis Ship (JIRA)" <ji...@apache.org> on 2008/12/30 00:35:44 UTC

[jira] Commented: (TAP5-413) Failure if an ASO is used in same handler as session invalidate

    [ https://issues.apache.org/jira/browse/TAP5-413?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12659692#action_12659692 ] 

Howard M. Lewis Ship commented on TAP5-413:
-------------------------------------------

I'm changing Session to add an isInvalidated() method, and chainging Request to return the same SessionImpl object from getSession().  So as long as you invalidate the session using Tapestry's Session (not the Servlet API HttpSession) this will work.

> Failure if an ASO is used in same handler as session invalidate
> ---------------------------------------------------------------
>
>                 Key: TAP5-413
>                 URL: https://issues.apache.org/jira/browse/TAP5-413
>             Project: Tapestry 5
>          Issue Type: Bug
>          Components: tapestry-core
>    Affects Versions: 5.0.18
>            Reporter: Geoff Callender
>
> Since 5.0.18, Tapestry blows up (IllegalStateException) on return from an event handler that invalidates the session AND uses an ASO.  I believe this is an unintended consequence of TAP-399.
> The workaround is to nullify the ASO, but it's not at all obvious from the exception.  
> Here's an example.  It blows up unless we either:
> (a) comment out the first line of onActionFromLogOut() because it references _myASO; or
> (b) un-comment the line that sets _myASO to null.
> <html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd">
> <body>
> 	<a t:type="actionlink" t:id="LogOut" href="#">Log Out</a>
> </body>
> </html>
> package jumpstart.web.pages;
> import org.apache.tapestry5.annotations.ApplicationState;
> import org.apache.tapestry5.ioc.annotations.Inject;
> import org.apache.tapestry5.services.RequestGlobals;
> import org.apache.tapestry5.services.Session;
> public class TestInvalidate {
> 	@Inject
> 	private RequestGlobals _requestGlobals;
> 	@ApplicationState
> 	private String _myASO;
> 	void setupRender() {
> 		_myASO = "Everything's fine";
> 	}
> 	
> 	void onActionFromLogOut() {
> 		System.out.println("_myASO = " + _myASO + ".");
> 		Session session = _requestGlobals.getRequest().getSession(false);
> 		if (session != null) {
> //			_myASO = null;
> 			session.invalidate();
> 		}
> 	}
> }
> 11:55:21,811 INFO  [STDOUT] _myASO = Everything's fine.
> 11:55:21,812 ERROR [[default]] Servlet.service() for servlet default threw exception
> java.lang.IllegalStateException: Cannot create a session after the response has been committed
> 	at org.apache.catalina.connector.Request.doGetSession(Request.java:2301)
> 	at org.apache.catalina.connector.Request.getSession(Request.java:2075)
> 	at org.apache.catalina.connector.RequestFacade.getSession(RequestFacade.java:833)
> 	at org.apache.tapestry5.internal.services.RequestImpl.getSession(RequestImpl.java:99)
> 	at $Request_11e2dd6dd65.getSession($Request_11e2dd6dd65.java)
> 	at $Request_11e2dd6dd2d.getSession($Request_11e2dd6dd2d.java)
> 	at org.apache.tapestry5.internal.services.SessionApplicationStatePersistenceStrategy.requestDidComplete(SessionApplicationStatePersistenceStrategy.java:126)
> 	at org.apache.tapestry5.internal.services.EndOfRequestListenerHubImpl.fire(EndOfRequestListenerHubImpl.java:40)
> 	at $EndOfRequestListenerHub_11e2dd6dd44.fire($EndOfRequestListenerHub_11e2dd6dd44.java)
> 	at org.apache.tapestry5.services.TapestryModule$3.service(TapestryModule.java:625)
> 	at $RequestHandler_11e2dd6dd47.service($RequestHandler_11e2dd6dd47.java)
> 	at org.apache.tapestry5.services.TapestryModule$2.service(TapestryModule.java:611)
> 	at $RequestHandler_11e2dd6dd47.service($RequestHandler_11e2dd6dd47.java)
> 	at org.apache.tapestry5.internal.services.StaticFilesFilter.service(StaticFilesFilter.java:85)
> 	at $RequestHandler_11e2dd6dd47.service($RequestHandler_11e2dd6dd47.java)
> 	at org.apache.tapestry5.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:93)
> 	at org.apache.tapestry5.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:84)
> 	at org.apache.tapestry5.ioc.internal.util.ConcurrentBarrier.withRead(ConcurrentBarrier.java:83)
> 	at org.apache.tapestry5.internal.services.CheckForUpdatesFilter.service(CheckForUpdatesFilter.java:106)
> 	at $RequestHandler_11e2dd6dd47.service($RequestHandler_11e2dd6dd47.java)
> 	at $RequestHandler_11e2dd6dd3e.service($RequestHandler_11e2dd6dd3e.java)
> 	at org.apache.tapestry5.services.TapestryModule$16.service(TapestryModule.java:1007)
> 	at org.apache.tapestry5.internal.services.IgnoredPathsFilter.service(IgnoredPathsFilter.java:62)
> 	at $HttpServletRequestFilter_11e2dd6dd3d.service($HttpServletRequestFilter_11e2dd6dd3d.java)
> 	at $HttpServletRequestHandler_11e2dd6dd3f.service($HttpServletRequestHandler_11e2dd6dd3f.java)
> 	at $HttpServletRequestHandler_11e2dd6dd3c.service($HttpServletRequestHandler_11e2dd6dd3c.java)
> 	at org.apache.tapestry5.TapestryFilter.doFilter(TapestryFilter.java:179)
> 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
> 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
> 	at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
> 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
> 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
> 	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
> 	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
> 	at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:182)
> 	at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
> 	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
> 	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
> 	at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
> 	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
> 	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262)
> 	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
> 	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
> 	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)
> 	at java.lang.Thread.run(Thread.java:613)

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


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