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

Robert Zeigler commented on TAPESTRY-2037:
------------------------------------------

New stack trace.
Definitely looks like a jdk issue.
This is from a trivial app.  It has one form, but the exception was encountered 
when hitting the main page.
There is /no/ db access, no request filters (aside from the example timing 
filter), etc. 

This is Tapestry 5.0.5 (it will be awhile before I can update this app due to 
external constraints).

But it certainly does suggest that ThreadLocale is an issue.

java.lang.NullPointerException
        at 
java.lang.ThreadLocal$ThreadLocalMap$Entry.access$602(ThreadLocal.java:235)
        at 
java.lang.ThreadLocal$ThreadLocalMap.replaceStaleEntry(ThreadLocal.java:518)
        at 
java.lang.ThreadLocal$ThreadLocalMap.getAfterMiss(ThreadLocal.java:368)
        at java.lang.ThreadLocal$ThreadLocalMap.get(ThreadLocal.java:347)
        at java.lang.ThreadLocal$ThreadLocalMap.access$000(ThreadLocal.java:225)
        at java.lang.ThreadLocal.get(ThreadLocal.java:127)
        at 
org.apache.tapestry.ioc.internal.services.PerThreadServiceCreator.createObject(PerThreadServiceCreator.java:56)
        at 
$RequestGlobals_117c6f995f8._perThreadInstance($RequestGlobals_117c6f995f8.java)
        at $RequestGlobals_117c6f995f8.store($RequestGlobals_117c6f995f8.java)
        at $RequestGlobals_117c6f995e4.store($RequestGlobals_117c6f995e4.java)
        at 
org.apache.tapestry.services.TapestryModule$11.service(TapestryModule.java:1042)
        at 
$HttpServletRequestHandler_117c6f995f5.service($HttpServletRequestHandler_117c6f995f5.java)
        at org.apache.tapestry.TapestryFilter.doFilter(TapestryFilter.java:135)
        at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:213)
        at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
        at 
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:243)
        at 
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
        at 
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
        at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
        at 
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:190)
        at 
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
        at 
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
        at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
        at 
org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2343)
        at 
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
        at 
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
        at 
org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170)
        at 
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
        at 
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:170)
        at 
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
        at 
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:468)
        at 
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
        at 
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
        at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
        at 
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
        at 
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
        at 
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
        at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
        at 
org.apache.ajp.tomcat4.Ajp13Processor.process(Ajp13Processor.java:429)
        at org.apache.ajp.tomcat4.Ajp13Processor.run(Ajp13Processor.java:495)
        at java.lang.Thread.run(Thread.java:595)

I've continued to try to track this down. 
One thing I found, pre tapestry 5.0.10-SNAPSHOT is that the if an exception is 
thrown in a request filter, you wind up with a null pointer exception trying to 
handle the exception.  This seems to be fixed in 5.0.10-SNAPSHOT (due to 
reworking the ordering of tapestry's request filter, perhaps?)

Sorry for the meandering, I have scattered thoughts on this right now, and I'm 
jotting them down so I don't forget them.  Still trying to build a case where I 
can consistently generate an exception.




> 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.10
>
>
> 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