While trying to demonstrate the dangers of multiple submits, I found Tapestry throwing NullPointerException.

Can someone who understands Tapestry's internals shed some light on this?

To make the test possible, I emulated a slow operation by sleeping 2 seconds. The NPE then occurred on the 3rd or later click - it varied quite a bit. Here's how I emulated the slow operation...

        @ApplicationState
        private MyOrder _myOrder;

        Object onSuccess() {
                sleep(2000); // Sleep 2 seconds to simulate slow transaction

                int newQuantity = _myOrder.getQuantity() + 1;
                _myOrder.setQuantity(newQuantity);

                return _page2;
        }

        private void sleep(long duration) {
                try {
                        Thread.sleep(duration);
                }
                catch (InterruptedException e) {
                }
        }

Here's the exception...

22:45:53,443 ERROR [RequestExceptionHandler] Processing of request failed with uncaught exception: java.lang.NullPointerException
java.lang.NullPointerException
at org.apache.tapestry.internal.services.InternalModule $2.getCookies(InternalModule.java:307)
        at $CookieSource_11759363dd0.getCookies($CookieSource_11759363dd0.java)
at org .apache .tapestry .internal.services.CookiesImpl.readCookieValue(CookiesImpl.java:53)
        at $Cookies_11759363dcf.readCookieValue($Cookies_11759363dcf.java)
at org .apache .tapestry .services .PersistentLocaleImpl.getCookieValue(PersistentLocaleImpl.java:46) at org .apache .tapestry.services.PersistentLocaleImpl.get(PersistentLocaleImpl.java: 40) at $PersistentLocale_11759363dce.get($PersistentLocale_11759363dce.java) at org .apache .tapestry .internal .services .LocalizationSetterImpl.setThreadLocale(LocalizationSetterImpl.java:98) at $ LocalizationSetter_11759363dcb .setThreadLocale($LocalizationSetter_11759363dcb.java) at org .apache .tapestry .internal.services.LocalizationFilter.service(LocalizationFilter.java: 41) at $RequestHandler_11759363dcd.service($RequestHandler_11759363dcd.java) at org.apache.tapestry.services.TapestryModule $2.service(TapestryModule.java:688) at $RequestHandler_11759363dcd.service($RequestHandler_11759363dcd.java) at org .apache .tapestry .internal.services.StaticFilesFilter.service(StaticFilesFilter.java:84) at $RequestHandler_11759363dcd.service($RequestHandler_11759363dcd.java) at org.apache.tapestry.internal.services.CheckForUpdatesFilter $2.invoke(CheckForUpdatesFilter.java:97) at org.apache.tapestry.internal.services.CheckForUpdatesFilter $2.invoke(CheckForUpdatesFilter.java:88) at org .apache .tapestry .ioc.internal.util.ConcurrentBarrier.withRead(ConcurrentBarrier.java:77) at org .apache .tapestry .internal .services.CheckForUpdatesFilter.service(CheckForUpdatesFilter.java:110) at $RequestHandler_11759363dcd.service($RequestHandler_11759363dcd.java) at $RequestHandler_11759363dc6.service($RequestHandler_11759363dc6.java) at org.apache.tapestry.services.TapestryModule $12.service(TapestryModule.java:1086) at $ HttpServletRequestHandler_11759363dc5 .service($HttpServletRequestHandler_11759363dc5.java)
        at org.apache.tapestry.TapestryFilter.doFilter(TapestryFilter.java:135)
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:179) 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)
22:45:53,449 ERROR [ExceptionReport] Render queue error in BeginRender[core/ExceptionReport:renderobject_0]: org.apache.tapestry.ioc.internal.util.TapestryException org.apache.tapestry.ioc.internal.util.TapestryException [at classpath:org/apache/tapestry/corelib/pages/ExceptionReport.tml, line 45, column 41] at org .apache .tapestry .internal .structure .ComponentPageElementImpl.invoke(ComponentPageElementImpl.java:935) at org.apache.tapestry.internal.structure.ComponentPageElementImpl.access $100(ComponentPageElementImpl.java:69) at org.apache.tapestry.internal.structure.ComponentPageElementImpl $10.render(ComponentPageElementImpl.java:349) at org .apache .tapestry.internal.services.RenderQueueImpl.run(RenderQueueImpl.java:58) at org .apache .tapestry .internal .services .PageMarkupRendererImpl.renderPageMarkup(PageMarkupRendererImpl.java:40) at $ PageMarkupRenderer_11759363e09 .renderPageMarkup($PageMarkupRenderer_11759363e09.java) at org .apache .tapestry .internal .services .PageResponseRendererImpl .renderPageResponse(PageResponseRendererImpl.java:71) at $ PageResponseRenderer_11759363ddb .renderPageResponse($PageResponseRenderer_11759363ddb.java) at org .apache .tapestry .internal .services .DefaultRequestExceptionHandler .handleRequestException(DefaultRequestExceptionHandler.java:60) at $ RequestExceptionHandler_11759363dca .handleRequestException($RequestExceptionHandler_11759363dca.java) at org.apache.tapestry.services.TapestryModule $2.service(TapestryModule.java:697) at $RequestHandler_11759363dcd.service($RequestHandler_11759363dcd.java) at org .apache .tapestry .internal.services.StaticFilesFilter.service(StaticFilesFilter.java:84) at $RequestHandler_11759363dcd.service($RequestHandler_11759363dcd.java) at org.apache.tapestry.internal.services.CheckForUpdatesFilter $2.invoke(CheckForUpdatesFilter.java:97) at org.apache.tapestry.internal.services.CheckForUpdatesFilter $2.invoke(CheckForUpdatesFilter.java:88) at org .apache .tapestry .ioc.internal.util.ConcurrentBarrier.withRead(ConcurrentBarrier.java:77) at org .apache .tapestry .internal .services.CheckForUpdatesFilter.service(CheckForUpdatesFilter.java:110) at $RequestHandler_11759363dcd.service($RequestHandler_11759363dcd.java) at $RequestHandler_11759363dc6.service($RequestHandler_11759363dc6.java) at org.apache.tapestry.services.TapestryModule $12.service(TapestryModule.java:1086) at $ HttpServletRequestHandler_11759363dc5 .service($HttpServletRequestHandler_11759363dc5.java)
        at org.apache.tapestry.TapestryFilter.doFilter(TapestryFilter.java:135)
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:179) 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)
Caused by: java.lang.NullPointerException
        at $Request_11759363def.getContextPath($Request_11759363def.java)
        at $Request_11759363dc0.getContextPath($Request_11759363dc0.java)
at org .apache .tapestry .internal.services.RequestRenderer.render(RequestRenderer.java:34) at org .apache .tapestry .internal.services.RequestRenderer.render(RequestRenderer.java:24)
        at $ObjectRenderer_11759363ec6.render($ObjectRenderer_11759363ec6.java)
        at $ObjectRenderer_11759363dad.render($ObjectRenderer_11759363dad.java)
at org .apache .tapestry .corelib.components.RenderObject.beginRender(RenderObject.java:39) at org .apache .tapestry.corelib.components.RenderObject.beginRender(RenderObject.java) at org.apache.tapestry.internal.structure.ComponentPageElementImpl $10$1.run(ComponentPageElementImpl.java:345) at org .apache .tapestry .internal .structure .ComponentPageElementImpl.invoke(ComponentPageElementImpl.java:923)
        ... 40 more
22:45:53,450 ERROR [PagePool] Page Page[core/ExceptionReport en_US] is dirty, and will be discarded (rather than returned to the page pool). 22:45:53,450 ERROR [[default]] Servlet.service() for servlet default threw exception org.apache.tapestry.ioc.internal.util.TapestryException [at classpath:org/apache/tapestry/corelib/pages/ExceptionReport.tml, line 45, column 41] at org .apache .tapestry .internal .structure .ComponentPageElementImpl.invoke(ComponentPageElementImpl.java:935) at org.apache.tapestry.internal.structure.ComponentPageElementImpl.access $100(ComponentPageElementImpl.java:69) at org.apache.tapestry.internal.structure.ComponentPageElementImpl $10.render(ComponentPageElementImpl.java:349) at org .apache .tapestry.internal.services.RenderQueueImpl.run(RenderQueueImpl.java:58) at org .apache .tapestry .internal .services .PageMarkupRendererImpl.renderPageMarkup(PageMarkupRendererImpl.java:40) at $ PageMarkupRenderer_11759363e09 .renderPageMarkup($PageMarkupRenderer_11759363e09.java) at org .apache .tapestry .internal .services .PageResponseRendererImpl .renderPageResponse(PageResponseRendererImpl.java:71) at $ PageResponseRenderer_11759363ddb .renderPageResponse($PageResponseRenderer_11759363ddb.java) at org .apache .tapestry .internal .services .DefaultRequestExceptionHandler .handleRequestException(DefaultRequestExceptionHandler.java:60) at $ RequestExceptionHandler_11759363dca .handleRequestException($RequestExceptionHandler_11759363dca.java) at org.apache.tapestry.services.TapestryModule $2.service(TapestryModule.java:697) at $RequestHandler_11759363dcd.service($RequestHandler_11759363dcd.java) at org .apache .tapestry .internal.services.StaticFilesFilter.service(StaticFilesFilter.java:84) at $RequestHandler_11759363dcd.service($RequestHandler_11759363dcd.java) at org.apache.tapestry.internal.services.CheckForUpdatesFilter $2.invoke(CheckForUpdatesFilter.java:97) at org.apache.tapestry.internal.services.CheckForUpdatesFilter $2.invoke(CheckForUpdatesFilter.java:88) at org .apache .tapestry .ioc.internal.util.ConcurrentBarrier.withRead(ConcurrentBarrier.java:77) at org .apache .tapestry .internal .services.CheckForUpdatesFilter.service(CheckForUpdatesFilter.java:110) at $RequestHandler_11759363dcd.service($RequestHandler_11759363dcd.java) at $RequestHandler_11759363dc6.service($RequestHandler_11759363dc6.java) at org.apache.tapestry.services.TapestryModule $12.service(TapestryModule.java:1086) at $ HttpServletRequestHandler_11759363dc5 .service($HttpServletRequestHandler_11759363dc5.java)
        at org.apache.tapestry.TapestryFilter.doFilter(TapestryFilter.java:135)
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:179) 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)
Caused by: java.lang.NullPointerException
        at $Request_11759363def.getContextPath($Request_11759363def.java)
        at $Request_11759363dc0.getContextPath($Request_11759363dc0.java)
at org .apache .tapestry .internal.services.RequestRenderer.render(RequestRenderer.java:34) at org .apache .tapestry .internal.services.RequestRenderer.render(RequestRenderer.java:24)
        at $ObjectRenderer_11759363ec6.render($ObjectRenderer_11759363ec6.java)
        at $ObjectRenderer_11759363dad.render($ObjectRenderer_11759363dad.java)
at org .apache .tapestry .corelib.components.RenderObject.beginRender(RenderObject.java:39) at org .apache .tapestry.corelib.components.RenderObject.beginRender(RenderObject.java) at org.apache.tapestry.internal.structure.ComponentPageElementImpl $10$1.run(ComponentPageElementImpl.java:345) at org .apache .tapestry .internal .structure .ComponentPageElementImpl.invoke(ComponentPageElementImpl.java:923)
        ... 40 more


Thanks,

Geoff

Reply via email to