[ 
https://issues.apache.org/jira/browse/TAPESTRY-2037?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12577420#action_12577420
 ] 

Geoff Callender commented on TAPESTRY-2037:
-------------------------------------------

With snapshot 5.0.11-20080308.120020-32 I'm not getting the NPE on refresh 
error (Safari, OS X), BUT alas I am still getting the original problem that 
kicked off this issue - "While trying to demonstrate the dangers of multiple 
submits, I found Tapestry throwing NullPointerException".

Here's how to reproduce it - click a few times quickly on this page's button:

<html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd";>
<body>
        <form t:type="form">
                Click often:<input type="submit" value="Submit"/>
        </form>
</body>
</html>


package xyz.pages;

import xyz.MyOrder;

import org.apache.tapestry.annotations.ApplicationState;

public class Page1 {
        private final int ORDER_QTY = 1;

        @InjectPage
        private Page2 _page2;

        @ApplicationState
        private MyOrder _myOrder;

        void onSuccess() {
                sleep(3000); // Sleep 3 seconds to simulate busy system

                int newQuantity = _myOrder.getQuantity() + ORDER_QTY;
                _myOrder.setQuantity(newQuantity);
        }

        private void sleep(long duration) {
                try {
                        Thread.sleep(duration);
                }
                catch (InterruptedException e) {
                }
        }
        
        public MyOrder getMyOrder() {
                return _myOrder;
        }
}

Stack trace I got was similar to Robert's but it did differ:

23:08:23,291 ERROR [RequestExceptionHandler] Processing of request failed with 
uncaught exception: java.lang.NullPointerException
java.lang.NullPointerException
        at 
org.apache.tapestry.services.TapestryModule$30.getCookies(TapestryModule.java:1832)
        at $CookieSource_1189dbcd764.getCookies($CookieSource_1189dbcd764.java)
        at 
org.apache.tapestry.internal.services.CookiesImpl.readCookieValue(CookiesImpl.java:61)
        at $Cookies_1189dbcd763.readCookieValue($Cookies_1189dbcd763.java)
        at 
org.apache.tapestry.internal.services.PersistentLocaleImpl.getCookieValue(PersistentLocaleImpl.java:50)
        at 
org.apache.tapestry.internal.services.PersistentLocaleImpl.get(PersistentLocaleImpl.java:43)
        at $PersistentLocale_1189dbcd762.get($PersistentLocale_1189dbcd762.java)
        at 
org.apache.tapestry.internal.services.LocalizationSetterImpl.setThreadLocale(LocalizationSetterImpl.java:97)
        at 
$LocalizationSetter_1189dbcd75e.setThreadLocale($LocalizationSetter_1189dbcd75e.java)
        at 
org.apache.tapestry.internal.services.LocalizationFilter.service(LocalizationFilter.java:41)
        at $RequestHandler_1189dbcd761.service($RequestHandler_1189dbcd761.java)
        at 
org.apache.tapestry.services.TapestryModule$3.service(TapestryModule.java:516)
        at $RequestHandler_1189dbcd761.service($RequestHandler_1189dbcd761.java)
        at 
org.apache.tapestry.services.TapestryModule$2.service(TapestryModule.java:491)
        at $RequestHandler_1189dbcd761.service($RequestHandler_1189dbcd761.java)
        at 
org.apache.tapestry.internal.services.IgnoredPathsFilter.service(IgnoredPathsFilter.java:53)
        at $RequestFilter_1189dbcd75f.service($RequestFilter_1189dbcd75f.java)
        at $RequestHandler_1189dbcd761.service($RequestHandler_1189dbcd761.java)
        at 
org.apache.tapestry.internal.services.StaticFilesFilter.service(StaticFilesFilter.java:79)
        at $RequestHandler_1189dbcd761.service($RequestHandler_1189dbcd761.java)
        at 
org.apache.tapestry.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:93)
        at 
org.apache.tapestry.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:84)
        at 
org.apache.tapestry.ioc.internal.util.ConcurrentBarrier.withRead(ConcurrentBarrier.java:77)
        at 
org.apache.tapestry.internal.services.CheckForUpdatesFilter.service(CheckForUpdatesFilter.java:106)
        at $RequestHandler_1189dbcd761.service($RequestHandler_1189dbcd761.java)
        at $RequestHandler_1189dbcd759.service($RequestHandler_1189dbcd759.java)
        at 
org.apache.tapestry.services.TapestryModule$12.service(TapestryModule.java:904)
        at 
$HttpServletRequestHandler_1189dbcd758.service($HttpServletRequestHandler_1189dbcd758.java)
        at org.apache.tapestry.TapestryFilter.doFilter(TapestryFilter.java:164)
        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)




> NullPointerException caused by many rapid page refreshes
> --------------------------------------------------------
>
>                 Key: TAPESTRY-2037
>                 URL: https://issues.apache.org/jira/browse/TAPESTRY-2037
>             Project: Tapestry
>          Issue Type: Bug
>          Components: tapestry-core, tapestry-ioc
>    Affects Versions: 5.0.7
>         Environment: jdk 1.5
>            Reporter: Howard M. Lewis Ship
>            Assignee: Howard M. Lewis Ship
>            Priority: Critical
>             Fix For: 5.0.12
>
>
> This was reported on the mailing list.
> In certain places, hitting the refresh button rapidly can cause a null 
> pointer exception.
> It is believed this is related to a JDK 1.5 bug:
> http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6550283
> Tapestry makes a few uses of ThreadLocal that are consistent with this 
> pattern.  ThreadLocals are used to connect service proxies to perthread scope 
> services.
> We will locate all useages of ThreadLocal and, alas, synchronize access to 
> them.
> More discussion: http://markmail.org/message/7bwztu66paz2cfqm

-- 
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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to