在Tomcat'中解析参数期间间歇性NPE;s的要求

在Tomcat'中解析参数期间间歇性NPE;s的要求,tomcat,jboss,seam,Tomcat,Jboss,Seam,我们在org.apache.catalina.connector.Request中的parseparameters期间有间歇性NPE。在线用户越多,NPE发生的次数就越多。JBoss重启后,NPE会消失一段时间。在24小时内,我们收到了一到400多个NPE。调用哪个服务并不重要。任何服务请求都可以在此NPE中结束 java.lang.NullPointerException at org.apache.catalina.connector.Request.parseParamet

我们在org.apache.catalina.connector.Request中的parseparameters期间有间歇性NPE。在线用户越多,NPE发生的次数就越多。JBoss重启后,NPE会消失一段时间。在24小时内,我们收到了一到400多个NPE。调用哪个服务并不重要。任何服务请求都可以在此NPE中结束

java.lang.NullPointerException at org.apache.catalina.connector.Request.parseParameters(Request.java:2517) at org.apache.catalina.connector.Request.getParameterNames(Request.java:1102) at org.apache.catalina.connector.Request.getParameterMap(Request.java:1082) at org.apache.catalina.connector.RequestFacade.getParameterMap(RequestFacade.java:414) at javax.servlet.ServletRequestWrapper.getParameterMap(ServletRequestWrapper.java:166) at org.jboss.seam.mock.MockExternalContext.getRequestParameterValuesMap(MockExternalContext.java:307) at org.jboss.seam.faces.Parameters.getRequestParameters(Parameters.java:61) at org.jboss.seam.Component.injectParameters(Component.java:1586) at org.jboss.seam.Component.inject(Component.java:1556) at org.jboss.seam.core.BijectionInterceptor.aroundInvoke(BijectionInterceptor.java:61) at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68) at org.jboss.seam.transaction.TransactionInterceptor$1.work(TransactionInterceptor.java:97) at org.jboss.seam.util.Work.workInTransaction(Work.java:61) at org.jboss.seam.transaction.TransactionInterceptor.aroundInvoke(TransactionInterceptor.java:91) at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68) at org.jboss.seam.core.MethodContextInterceptor.aroundInvoke(MethodContextInterceptor.java:44) at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68) at org.jboss.seam.security.SecurityInterceptor.aroundInvoke(SecurityInterceptor.java:163) at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68) at ExceptionInterceptor.aroundInvoke(ExceptionInterceptor.java:51) at sun.reflect.GeneratedMethodAccessor289.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.jboss.seam.util.Reflections.invoke(Reflections.java:22) at org.jboss.seam.intercept.Interceptor.aroundInvoke(Interceptor.java:187) at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:72) at org.jboss.seam.intercept.RootInterceptor.invoke(RootInterceptor.java:107) at org.jboss.seam.intercept.JavaBeanInterceptor.interceptInvocation(JavaBeanInterceptor.java:185) at org.jboss.seam.intercept.JavaBeanInterceptor.invoke(JavaBeanInterceptor.java:103) at TaskService_$$_javassist_seam_7.getNumberOfUpdatedTasks(TaskService_$$_javassist_seam_7.java) at sun.reflect.GeneratedMethodAccessor319.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.jboss.seam.remoting.gwt.GWTToSeamAdapter.callWebRemoteMethod(GWTToSeamAdapter.java:100) at org.jboss.seam.remoting.gwt.GWTService.RPC_invokeAndEncodeResponse(GWTService.java:550) at org.jboss.seam.remoting.gwt.GWTService.processCall(GWTService.java:206) at org.jboss.seam.remoting.gwt.GWTService$1.process(GWTService.java:120) at org.jboss.seam.servlet.ContextualHttpServletRequest.run(ContextualHttpServletRequest.java:53) at org.jboss.seam.remoting.gwt.GWTService.getResource(GWTService.java:105) at org.jboss.seam.servlet.SeamResourceServlet.service(SeamResourceServlet.java:80) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:83) at org.jboss.seam.web.LoggingFilter.doFilter(LoggingFilter.java:60) at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) at org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:64) at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) at org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:45) at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) at org.jboss.seam.web.IdentityFilter.doFilter(IdentityFilter.java:40) at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:73) at org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:158) 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:235) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:190) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:433) at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:92) at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126) at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:70) 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:158) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330) at org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:436) at org.apache.coyote.ajp.AjpProtocol$AjpConnectionHandler.process(AjpProtocol.java:384) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) at java.lang.Thread.run(Thread.java:619)
在ExceptionFilter中创建的MockExternalContext“以某种方式”保留在应用程序上下文中,“有时”用于处理请求。它甚至在重新部署我们的应用程序后仍然存在,因此我们必须重新启动JBoss以摆脱NPE。

非常感谢您的这篇文章。这是我们几个星期的噩梦。我们的配置是:GWT2.0.4,Seam 2.2.1 CR2,JBoss AS 5.1.0。我们在应用程序中修补了注销机制,但它仍然会返回(尽管很少)。现在,当EJB层中的事务持续时间过长时,似乎会发生这种情况。现在我们已经准备好摆脱Seam,它会导致我们无法处理的问题

更新:
当“ServiceImpl”组件的作用域从“会话”更改为默认值时(刚将其删除),这个奇怪的错误就完全消失了。还添加了注释@BypassInterceptors。同时,我为我们的应用程序准备了Seam GWT bridge的替代品。这是Guice+gwt调度。非常快速可靠的解决方案。

非常感谢您发布此帖子。这是我们几个星期的噩梦。我们的配置是:GWT2.0.4,Seam 2.2.1 CR2,JBoss AS 5.1.0。我们在应用程序中修补了注销机制,但它仍然会返回(尽管很少)。现在,当EJB层中的事务持续时间过长时,似乎会发生这种情况。现在我们已经准备好摆脱Seam,它会导致我们无法处理的问题

更新:
当“ServiceImpl”组件的作用域从“会话”更改为默认值时(刚将其删除),这个奇怪的错误就完全消失了。还添加了注释@BypassInterceptors。同时,我为我们的应用程序准备了Seam GWT bridge的替代品。这是Guice+gwt调度。非常快速可靠的解决方案。

这看起来像一个可疑的线程安全漏洞。JBossas5使用了Tomcat的分叉版本,所以我建议用JBoss而不是Apache来提交bug。谢谢你的建议,skaffman。我们也考虑到了这一点(在Tomcat中请求回收)。重新启动JBoss,同时让许多NPE立即得到帮助,这一事实在这方面给出了另一个提示。我将提交一个bug报告。编辑这个问题,并提供我们在调试NPE时发现的更多见解。它不是一个安全的bug。正如上面的更新所描述的,问题是注销调用的运行速度超过了其他异步调用。这看起来可疑地像一个线程安全错误。JBossas5使用了Tomcat的分叉版本,所以我建议用JBoss而不是Apache来提交bug。谢谢你的建议,skaffman。我们也考虑到了这一点(在Tomcat中请求回收)。重新启动JBoss,同时让许多NPE立即得到帮助,这一事实在这方面给出了另一个提示。我将提交一个bug报告。编辑这个问题,并提供我们在调试NPE时发现的更多见解。它不是一个安全的bug。正如上面的更新所描述的,问题在于注销调用的运行速度超过了其他异步调用。 ERROR [Seam Resource Servlet].error: Servlet.service() for servlet Seam Resource Servlet threw exception java.lang.IllegalStateException: Cannot create a session after the response has been committed at org.apache.catalina.connector.Request.doGetSession(Request.java:2338) at org.apache.catalina.connector.Request.getSession(Request.java:2094) at org.apache.catalina.connector.RequestFacade.getSession(RequestFacade.java:833) at javax.servlet.http.HttpServletRequestWrapper.getSession(HttpServletRequestWrapper.java:216) at org.jboss.seam.mock.MockExternalContext.getSessionMap(MockExternalContext.java:357) at org.jboss.seam.contexts.FacesLifecycle.beginExceptionRecovery(FacesLifecycle.java:86) at org.jboss.seam.web.ExceptionFilter.endWebRequestAfterException(ExceptionFilter.java:96) at org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:70) at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) at org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:45) at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) at org.jboss.seam.web.IdentityFilter.doFilter(IdentityFilter.java:40) at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:73) at org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:158) 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:235) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:190) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:433) at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:92) at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126) at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:70) 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:158) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330) at org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:436) at org.apache.coyote.ajp.AjpProtocol$AjpConnectionHandler.process(AjpProtocol.java:384) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) at java.lang.Thread.run(Thread.java:619)