自5.0.18起,Tapestry在从使会话无效的事件处理程序返回时会崩溃(IllegalStateException),并使用ASO。我认为这是TAP-399的意外后果。
解决方法是取消ASO,但从异常情况来看,这一点并不明显。
这里有一个例子。除非我们:
(a) 注释掉onActionFromLogOut()的第一行,因为它引用了_myASO;或
(b) 取消注释将_myASO设置为null的行。
<html xmlns:t=“http://tapestry.apache.org/schema/tapestry_5_0_0.xsd">
<body>
注销</a>
</body>
</html>
包jumpstart.web.pages;
导入org.apache.tapestry5.annotations。应用状态;
导入org.apache.tapestry5.ioc.annotations。注入;
导入org.apache.tapestry5.services。RequestGlobals;
导入org.apache.tapestry5.services。会话;
公共类TestInvalidate{
@注入
private RequestGlobals _RequestGlobals;
@应用程序状态
私有字符串_myASO;
无效设置渲染器()
{_myASO=“一切都很好”;}无效onActionFromLogOut(){
System.out.println(“_myASO=”+_myASO+“.”);
会话会话=_requestGlobals.getRequest().getSession(false);
if(会话!=空)
{//_myASO=空;session.invalidate();}}
}
11:55:21811信息[停止]_myASO=一切都很好。
11:55:21812错误[[默认]]Servlet默认值的Servlet.service()引发异常
java.lang.IllegalStateException:提交响应后无法创建会话
在org.apache.catalina.connector上。Request.doGetSession(Request.java:2301)
在org.apache.catalina.connector上。Request.getSession(Request.java:2075)
在org.apache.catalina.connector上。RequestFacade.getSession(RequestFacade.java:833)
在org.apache.tapestry5.internal.services上。请求Impl.getSession(RequestImpl.java:99)
位于$Request_11e2dd6dd65.getSession($Request_11e2dd6md65.java)
位于$Request_11e2dd6dd2d.getSession($Request_11e2dd6mdd2d.java)
在org.apache.tapestry5.internal.services上。SessionApplicationStatePersistenceStrategy.requestDidComplete(会话应用状态持久性策略.java:126)
在org.apache.tapestry5.internal.services上。EndOfRequestListenerHubImpl.fire(EndOf请求侦听器HubImple.java:40)
位于$EndOfRequestListenerHub_11e2dd6dd44.fire($EndO fRequestlistenerHub2_11e2D6dd44.java)
在org.apache.tapestry5.services上。TapestryModule$3.service(Tapestry Module.java:625)
位于$RequestHandler_11e2dd6dd47.service($RequestHandler.11e2dd6md47.java)
在org.apache.tapestry5.services上。TapestryModule$2.service(Tapestry Module.java:611)
位于$RequestHandler_11e2dd6dd47.service($RequestHandler.11e2dd6md47.java)
在org.apache.tapestry5.internal.services上。静态文件过滤器服务(StaticFilesFilter.java:85)
位于$RequestHandler_11e2dd6dd47.service($RequestHandler.11e2dd6md47.java)
在org.apache.tapestry5.internal.services上。CheckForUpdatesFilter$2.invoke(CheckForUpdate过滤器.java:93)
在org.apache.tapestry5.internal.services上。CheckForUpdatesFilter$2.invoke(CheckForUpdate过滤器.java:84)
网址:org.apache.tapestry5.ioc.internal.util。ConcurrentBarrier.withRead(Concurrent Barrier.java:83)
在org.apache.tapestry5.internal.services上。CheckForUpdatesFilter.service(CheckForUpdate过滤器.java:106)
位于$RequestHandler_11e2dd6dd47.service($RequestHandler.11e2dd6md47.java)
位于$RequestHandler_11e2dd6dd3e.service($RequestHandler.11e2dd6md3e.java)
网址:org.apache.tapestry5.services。TapestryModule$16.service(Tapestry Module.java:1007)
在org.apache.tapestry5.internal.services上。IgnoredPathsFilter.service(IgnoredPath Filter.java:62)
在$HttpServletRequestFilter_11e2dd6dd3d.service上
位于$HttpServletRequestHandler_11e2dd6dd3f.service($Http ServletRequest Handler.11e2dd6 dd3f.java)
位于$HttpServletRequestHandler_11e2dd6dd3c.service($Http ServletRequest Handler_11e2dd6 dd3c.java)
位于org.apache.tapestry5.TapestryFilter.doFilter(Tapestry Filter.java:179)
在org.apache.catalina.core。ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
在org.apache.catalina.core。ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
在org.jboss.web.tomcat.filters上。ReplyHeaderFilter.doFilter(ReplyHeader Filter.java:96)
在org.apache.catalina.core。ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
在org.apache.catalina.core。ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
在org.apache.catalina.core。StandardWrapperValve.invoke(StandardWropperValve.java:230)
在org.apache.catalina.core。调用(StandardContextValve.java:175)
在org.jboss.web.tomcat.security上。调用(SecurityAssociationValve.java:182)
在org.jboss.web.tomcat.security上。调用(JaccContextValve.java:84)
在org.apache.catalina.core。调用(StandardHostValve.java:127)
在org.apache.catalina.valves。ErrorReportValve.invoke(ErrorReportValve.java:102)
网址:org.jboss.web.tomcat.service.jca。调用(CachedConnectionValve.java:157)
在org.apache.catalina.core。StandardEngineValve.invoke(StandardEngine Valve.java:109)
网址:org.apache.catalina.connector。CoyoteAdapter.service(CoyoteAttapter.java:262)
位于org.apache.coyote.http11.Http11Processor.process(http11-Processor.java:844)
位于org.apache.coyote.http11.Http11Protocol$http11-ConnectionHandler.process(http11协议.java:583)
网址:org.apache.tomcat.util.net。JIoEndpoint$Worker.run(JIoEnppoint.java:446)
在java.lang.Thread.run(线程.java:613)