[
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]