[ 
https://issues.apache.org/jira/browse/WICKET-3168?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12931724#action_12931724
 ] 

Martin Grigorov edited comment on WICKET-3168 at 11/13/10 3:14 PM:
-------------------------------------------------------------------

Yes and No.
Yes - GAE runs on Jetty. I guess older than the fixed one.
No - currently WicketFilter#destroy() stack trace has no Application in the 
thread local, in WICKET-3011 
org.apache.wicket.session.HttpSessionStore.SessionBindingListener.valueUnbound(HttpSessionBindingEvent)
 (i.e. Application#sessionUnbound()) will have no Application.get().
Only Application.get(String) will work because HttpSessionStore has 
'applicationKey' member.

In this ticket even Application.get(String) is not available for :

        getPageManager().destroy();
        getSessionStore().destroy();

in Application#internalDestroy() because 

                applicationKeyToApplication.remove(getApplicationKey());

is called before them.
I think we should move that line at the bottom of #internalDestroy() too.

      was (Author: mgrigorov):
    Yes and No.
Yes - GAE runs on Jetty. I guess older than the fixed one.
No - currently WicketFilter#destroy() stack trace has no Application in the 
thread local, in WICKET-3011 
org.apache.wicket.session.HttpSessionStore.SessionBindingListener.valueUnbound(HttpSessionBindingEvent)
 (i.e. Application#sessionUnbound()) will have no Application.get().
Only Application.get(String) will work because HttpSessionStore has 
'applicationKey' member.

I this ticket even Application.get(String) is not available for :

        getPageManager().destroy();
        getSessionStore().destroy();

in Application#internalDestroy() because 

                applicationKeyToApplication.remove(getApplicationKey());

is called before them.
I think we should move that line at the bottom of #internalDestroy() too.
  
> No Application in the thread when the web server destroys WicketFilter
> ----------------------------------------------------------------------
>
>                 Key: WICKET-3168
>                 URL: https://issues.apache.org/jira/browse/WICKET-3168
>             Project: Wicket
>          Issue Type: Bug
>          Components: wicket
>    Affects Versions: 1.5-M3
>            Reporter: Martin Grigorov
>
> Playing with Wicket 1.5 + Google AppEngine I saw this exception after 
> modifying appengine-web.xml:
> WARNING: EXCEPTION 
> org.apache.wicket.WicketRuntimeException: There is no application attached to 
> current thread Timer-2
>       at org.apache.wicket.Application.get(Application.java:250)
>       at org.apache.wicket.Session.get(Session.java:154)
>       at 
> org.apache.wicket.page.DefaultPageManagerContext.getSessionAttribute(DefaultPageManagerContext.java:63)
>       at 
> org.apache.wicket.pageStore.memory.HttpSessionDataStore.getPageTable(HttpSessionDataStore.java:130)
>       at 
> org.apache.wicket.pageStore.memory.HttpSessionDataStore.destroy(HttpSessionDataStore.java:116)
>       at 
> org.apache.wicket.pageStore.DefaultPageStore.destroy(DefaultPageStore.java:66)
>       at 
> org.apache.wicket.page.PersistentPageManager.destroy(PersistentPageManager.java:374)
>       at 
> org.apache.wicket.page.PageManagerDecorator.destroy(PageManagerDecorator.java:86)
>       at org.apache.wicket.Application.internalDestroy(Application.java:839)
>       at 
> org.apache.wicket.protocol.http.WebApplication.internalDestroy(WebApplication.java:440)
>       at 
> org.apache.wicket.protocol.http.WicketFilter.destroy(WicketFilter.java:437)
>       at 
> org.mortbay.jetty.servlet.FilterHolder.destroyInstance(FilterHolder.java:127)
>       ....
> I.e. the asynchronous thread that destroys WicketFilter has no ThreadContext 
> thread local and thus this exception.
> I see two problems/solutions:
> 1) HttpSessionDataStore should have noop #destroy() - the Application is 
> being destroyed, so all its http sessions will be deleted and there is no 
> need to clean the special attribute which stores session's pages
> 2) WicketFilter#destroy() can set/unset the application in ThreadContext, so 
> other functionality in all #destroy() methods will have access to the 
> Application via Application.get()
> Any objections ?

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to