You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by "SegFault (JIRA)" <ji...@apache.org> on 2011/02/23 01:27:38 UTC

[jira] Created: (WICKET-3470) Can't write session to disk with tomcat : Servlet is destroyed before serialization

Can't write session to disk with tomcat : Servlet is destroyed before serialization
-----------------------------------------------------------------------------------

                 Key: WICKET-3470
                 URL: https://issues.apache.org/jira/browse/WICKET-3470
             Project: Wicket
          Issue Type: Bug
          Components: wicket
    Affects Versions: 1.5-RC1
         Environment: Windows 7 x64
apache-tomcat-6.0.32-windows-x86
(Running from Eclipse view, Faceted project)
            Reporter: SegFault


Hi,

When I stop my tomcat, I have the following error :
GRAVE: Exception au déchargement des sessions vers le stockage persistant (persistent storage)
java.lang.IllegalStateException: PageManager for application wicket not registered.
	at lm.lbx.application.PersistentPageManager$SessionEntry.getPageStore(PersistentPageManager.java:86)
	at lm.lbx.application.PersistentPageManager$SessionEntry.writeObject(PersistentPageManager.java:197)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at java.io.ObjectStreamClass.invokeWriteObject(Unknown Source)
	at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
	at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
	at java.io.ObjectOutputStream.writeObject0(Unknown Source)
	at java.io.ObjectOutputStream.writeObject(Unknown Source)
	at org.apache.catalina.session.StandardSession.writeObject(StandardSession.java:1561)
	at org.apache.catalina.session.StandardSession.writeObjectData(StandardSession.java:1004)
	at org.apache.catalina.session.StandardManager.doUnload(StandardManager.java:528)
	at org.apache.catalina.session.StandardManager.unload(StandardManager.java:469)
	at org.apache.catalina.session.StandardManager.stop(StandardManager.java:678)
	at org.apache.catalina.core.StandardContext.stop(StandardContext.java:4875)
	at org.apache.catalina.core.ContainerBase.stop(ContainerBase.java:1106)
	at org.apache.catalina.core.ContainerBase.stop(ContainerBase.java:1106)
	at org.apache.catalina.core.StandardEngine.stop(StandardEngine.java:468)
	at org.apache.catalina.core.StandardService.stop(StandardService.java:604)
	at org.apache.catalina.core.StandardServer.stop(StandardServer.java:788)
	at org.apache.catalina.startup.Catalina.stop(Catalina.java:662)
	at org.apache.catalina.startup.Catalina.start(Catalina.java:629)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)

After a little digging, it's because tomcat first unload the servlet mapping and destroy the servlet, and then, ask for serialization. I'm not sure it's a wiket bug, tell me if i have to report it against tomcat.
Here is the trace of the destroy :

Thread [main] (Suspended (breakpoint at line 357 in PersistentPageManager))	
	PersistentPageManager.destroy() line: 357	
	PageAccessSynchronizer$1(PageManagerDecorator).destroy() line: 86	
	LibellexApplication(Application).internalDestroy() line: 658	
	LibellexApplication(WebApplication).internalDestroy() line: 470	
	WicketFilter.destroy() line: 456	
	ApplicationFilterConfig.release() line: 357	
	StandardContext.filterStop() line: 4106	
	StandardContext.stop() line: 4869	
	StandardHost(ContainerBase).stop() line: 1106	
	StandardEngine(ContainerBase).stop() line: 1106	
	StandardEngine.stop() line: 468	
	StandardService.stop() line: 604	
	StandardServer.stop() line: 788	
	Catalina.stop() line: 662	
	Catalina.start() line: 629	
	NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
	NativeMethodAccessorImpl.invoke(Object, Object[]) line: not available	
	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: not available	
	Method.invoke(Object, Object...) line: not available	
	Bootstrap.start() line: 289	
	Bootstrap.main(String[]) line: 414	

And the trace requesting serialization :

Thread [main] (Suspended (breakpoint at line 83 in PersistentPageManager$SessionEntry))	
	PersistentPageManager$SessionEntry.getPageStore() line: 83	
	PersistentPageManager$SessionEntry.writeObject(ObjectOutputStream) line: 197	
	NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
	NativeMethodAccessorImpl.invoke(Object, Object[]) line: not available	
	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: not available	
	Method.invoke(Object, Object...) line: not available	
	ObjectStreamClass.invokeWriteObject(Object, ObjectOutputStream) line: not available	
	ObjectOutputStream.writeSerialData(Object, ObjectStreamClass) line: not available	
	ObjectOutputStream.writeOrdinaryObject(Object, ObjectStreamClass, boolean) line: not available	
	ObjectOutputStream.writeObject0(Object, boolean) line: not available	
	ObjectOutputStream.writeObject(Object) line: not available	
	StandardSession.writeObject(ObjectOutputStream) line: 1561	
	StandardSession.writeObjectData(ObjectOutputStream) line: 1004	
	StandardManager.doUnload() line: 528	
	StandardManager.unload() line: 469	
	StandardManager.stop() line: 678	
	StandardContext.stop() line: 4875	
	StandardHost(ContainerBase).stop() line: 1106	
	StandardEngine(ContainerBase).stop() line: 1106	
	StandardEngine.stop() line: 468	
	StandardService.stop() line: 604	
	StandardServer.stop() line: 788	
	Catalina.stop() line: 662	
	Catalina.start() line: 629	
	NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
	NativeMethodAccessorImpl.invoke(Object, Object[]) line: not available	
	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: not available	
	Method.invoke(Object, Object...) line: not available	
	Bootstrap.start() line: 289	
	Bootstrap.main(String[]) line: 414	

Well at this time, a simple dirty hack is to bypass destroy chain to avoid  removal of app from managers properties of class PersistentPageManager. But I would like to have a real clean solution.

-- 
This message is automatically generated by JIRA.
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

       

[jira] Commented: (WICKET-3470) Can't write session to disk with tomcat : Servlet is destroyed before serialization

Posted by "Martin Grigorov (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/WICKET-3470?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13008166#comment-13008166 ] 

Martin Grigorov commented on WICKET-3470:
-----------------------------------------

In a brainstorm session in IRC between me and ivaynberg here is our proposal for this problem:

Background:

Servlet containers deserialize persisted sessions before initializing the Servlet Filters (there is a problem reported that GAE (Jetty 6.x) fails to deserialize persisted session because there is no org.apache.wicket.page.PersistentPageManager for an application with name "XYZ").
The problem described in this ticket is similar but in the opposite direction: Tomcat destroys WicketFilter and then tries to persist the sessions and PersistentPageManager is no more available. 
Also by Servlet specification the container can destroy a Servlet (it is not clear for Filter but Tomcat manages them the same way) at any time without stopping the whole application and later re-initialize them again. 


Proposed solution:

We need a ServletContextListener (SCL) that will setup the PageManager before the start of WicketFilter and stop it after its destroy.
This SCL will be put in web-fragment.xml in wicket-core.jar and will be used for free for all users which use Servlet 3.0 complaint web containers. Servlet 2.x users will have to add it manually in their web.xml files.

We would like to avoid parsing of web.xml so the SCL to be able to find the name of the Filter and the name of the Application class the setup will look like:

for Application:
        <context-param>
		<param-name>wicket-app-filterName1</param-name>
		<param-value>com.mycompany.MyApp</param-value>
	</context-param>

       <filter>
		<filter-name>wicket-app-filterName1</filter-name>
		<filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class>
	</filter>


for ApplicationFactory:
        <context-param>
		<param-name>wicket-app-factory-filterName2</param-name>
		<param-value>com.mycompany.MyAppFactory</param-value>
	</context-param>

       <filter>
		<filter-name>wicket-app-factory-filterName2</filter-name>
		<filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class>
	</filter>

Here 'wicket-app-' and 'wicket-app-factory-' are special prefixes! SCL will iterate over all context parameters and all starting with these special prefixes will be processed.
Later when WicketFilter is being initialized it will parse its filterName like it does it currently and will find its application/applicationFactory class from the servlet context parameters. 

The same logic will be applied for WicketServlet.

Specific parameters like wicket.configuration, or Guice module names, etc. will still be in filter's <init-param>.

Opinions?

> Can't write session to disk with tomcat : Servlet is destroyed before serialization
> -----------------------------------------------------------------------------------
>
>                 Key: WICKET-3470
>                 URL: https://issues.apache.org/jira/browse/WICKET-3470
>             Project: Wicket
>          Issue Type: Bug
>          Components: wicket-core
>    Affects Versions: 1.5-RC1
>         Environment: Windows 7 x64
> apache-tomcat-6.0.32-windows-x86
> (Running from Eclipse view, Faceted project)
>            Reporter: SegFault
>              Labels: persistent, session, storage, tomcat
>             Fix For: 1.5.0
>
>   Original Estimate: 4h
>  Remaining Estimate: 4h
>
> Hi,
> When I stop my tomcat, I have the following error :
> GRAVE: Exception au déchargement des sessions vers le stockage persistant (persistent storage)
> java.lang.IllegalStateException: PageManager for application wicket not registered.
> 	at lm.lbx.application.PersistentPageManager$SessionEntry.getPageStore(PersistentPageManager.java:86)
> 	at lm.lbx.application.PersistentPageManager$SessionEntry.writeObject(PersistentPageManager.java:197)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
> 	at java.lang.reflect.Method.invoke(Unknown Source)
> 	at java.io.ObjectStreamClass.invokeWriteObject(Unknown Source)
> 	at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
> 	at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
> 	at java.io.ObjectOutputStream.writeObject0(Unknown Source)
> 	at java.io.ObjectOutputStream.writeObject(Unknown Source)
> 	at org.apache.catalina.session.StandardSession.writeObject(StandardSession.java:1561)
> 	at org.apache.catalina.session.StandardSession.writeObjectData(StandardSession.java:1004)
> 	at org.apache.catalina.session.StandardManager.doUnload(StandardManager.java:528)
> 	at org.apache.catalina.session.StandardManager.unload(StandardManager.java:469)
> 	at org.apache.catalina.session.StandardManager.stop(StandardManager.java:678)
> 	at org.apache.catalina.core.StandardContext.stop(StandardContext.java:4875)
> 	at org.apache.catalina.core.ContainerBase.stop(ContainerBase.java:1106)
> 	at org.apache.catalina.core.ContainerBase.stop(ContainerBase.java:1106)
> 	at org.apache.catalina.core.StandardEngine.stop(StandardEngine.java:468)
> 	at org.apache.catalina.core.StandardService.stop(StandardService.java:604)
> 	at org.apache.catalina.core.StandardServer.stop(StandardServer.java:788)
> 	at org.apache.catalina.startup.Catalina.stop(Catalina.java:662)
> 	at org.apache.catalina.startup.Catalina.start(Catalina.java:629)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
> 	at java.lang.reflect.Method.invoke(Unknown Source)
> 	at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
> 	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
> After a little digging, it's because tomcat first unload the servlet mapping and destroy the servlet, and then, ask for serialization. I'm not sure it's a wiket bug, tell me if i have to report it against tomcat.
> Here is the trace of the destroy :
> Thread [main] (Suspended (breakpoint at line 357 in PersistentPageManager))	
> 	PersistentPageManager.destroy() line: 357	
> 	PageAccessSynchronizer$1(PageManagerDecorator).destroy() line: 86	
> 	LibellexApplication(Application).internalDestroy() line: 658	
> 	LibellexApplication(WebApplication).internalDestroy() line: 470	
> 	WicketFilter.destroy() line: 456	
> 	ApplicationFilterConfig.release() line: 357	
> 	StandardContext.filterStop() line: 4106	
> 	StandardContext.stop() line: 4869	
> 	StandardHost(ContainerBase).stop() line: 1106	
> 	StandardEngine(ContainerBase).stop() line: 1106	
> 	StandardEngine.stop() line: 468	
> 	StandardService.stop() line: 604	
> 	StandardServer.stop() line: 788	
> 	Catalina.stop() line: 662	
> 	Catalina.start() line: 629	
> 	NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
> 	NativeMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	Method.invoke(Object, Object...) line: not available	
> 	Bootstrap.start() line: 289	
> 	Bootstrap.main(String[]) line: 414	
> And the trace requesting serialization :
> Thread [main] (Suspended (breakpoint at line 83 in PersistentPageManager$SessionEntry))	
> 	PersistentPageManager$SessionEntry.getPageStore() line: 83	
> 	PersistentPageManager$SessionEntry.writeObject(ObjectOutputStream) line: 197	
> 	NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
> 	NativeMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	Method.invoke(Object, Object...) line: not available	
> 	ObjectStreamClass.invokeWriteObject(Object, ObjectOutputStream) line: not available	
> 	ObjectOutputStream.writeSerialData(Object, ObjectStreamClass) line: not available	
> 	ObjectOutputStream.writeOrdinaryObject(Object, ObjectStreamClass, boolean) line: not available	
> 	ObjectOutputStream.writeObject0(Object, boolean) line: not available	
> 	ObjectOutputStream.writeObject(Object) line: not available	
> 	StandardSession.writeObject(ObjectOutputStream) line: 1561	
> 	StandardSession.writeObjectData(ObjectOutputStream) line: 1004	
> 	StandardManager.doUnload() line: 528	
> 	StandardManager.unload() line: 469	
> 	StandardManager.stop() line: 678	
> 	StandardContext.stop() line: 4875	
> 	StandardHost(ContainerBase).stop() line: 1106	
> 	StandardEngine(ContainerBase).stop() line: 1106	
> 	StandardEngine.stop() line: 468	
> 	StandardService.stop() line: 604	
> 	StandardServer.stop() line: 788	
> 	Catalina.stop() line: 662	
> 	Catalina.start() line: 629	
> 	NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
> 	NativeMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	Method.invoke(Object, Object...) line: not available	
> 	Bootstrap.start() line: 289	
> 	Bootstrap.main(String[]) line: 414	
> Well at this time, a simple dirty hack is to bypass destroy chain to avoid  removal of app from managers properties of class PersistentPageManager. But I would like to have a real clean solution.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

[jira] Issue Comment Edited: (WICKET-3470) Can't write session to disk with tomcat : Servlet is destroyed before serialization

Posted by "Martin Grigorov (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/WICKET-3470?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12998252#comment-12998252 ] 

Martin Grigorov edited comment on WICKET-3470 at 2/23/11 8:59 AM:
------------------------------------------------------------------

Yes, I'm interested to hear what Tomcat developers think about this.
The problem is in StandardContext.stop() - it destroys the filter at line 4869 and later at line 4875 it tries to serialize the data.

I remember Peter Ertl reported similar bug for Jetty which has been fixed in their 7.1.x series - http://jira.codehaus.org/browse/JETTY-1266.

      was (Author: mgrigorov):
    Yes, I'm interested to hear what Tomcat developers think about this.
The problem is in StandardContext.stop() - it destroys the filter at line 4869 and later at line 4875 it tries to serialize the data.

I remember Peter Ertl reported similar bug for Jetty which has been fixed in their 7.1.x series.
  
> Can't write session to disk with tomcat : Servlet is destroyed before serialization
> -----------------------------------------------------------------------------------
>
>                 Key: WICKET-3470
>                 URL: https://issues.apache.org/jira/browse/WICKET-3470
>             Project: Wicket
>          Issue Type: Bug
>          Components: wicket
>    Affects Versions: 1.5-RC1
>         Environment: Windows 7 x64
> apache-tomcat-6.0.32-windows-x86
> (Running from Eclipse view, Faceted project)
>            Reporter: SegFault
>              Labels: persistent, session, storage, tomcat
>   Original Estimate: 4h
>  Remaining Estimate: 4h
>
> Hi,
> When I stop my tomcat, I have the following error :
> GRAVE: Exception au déchargement des sessions vers le stockage persistant (persistent storage)
> java.lang.IllegalStateException: PageManager for application wicket not registered.
> 	at lm.lbx.application.PersistentPageManager$SessionEntry.getPageStore(PersistentPageManager.java:86)
> 	at lm.lbx.application.PersistentPageManager$SessionEntry.writeObject(PersistentPageManager.java:197)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
> 	at java.lang.reflect.Method.invoke(Unknown Source)
> 	at java.io.ObjectStreamClass.invokeWriteObject(Unknown Source)
> 	at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
> 	at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
> 	at java.io.ObjectOutputStream.writeObject0(Unknown Source)
> 	at java.io.ObjectOutputStream.writeObject(Unknown Source)
> 	at org.apache.catalina.session.StandardSession.writeObject(StandardSession.java:1561)
> 	at org.apache.catalina.session.StandardSession.writeObjectData(StandardSession.java:1004)
> 	at org.apache.catalina.session.StandardManager.doUnload(StandardManager.java:528)
> 	at org.apache.catalina.session.StandardManager.unload(StandardManager.java:469)
> 	at org.apache.catalina.session.StandardManager.stop(StandardManager.java:678)
> 	at org.apache.catalina.core.StandardContext.stop(StandardContext.java:4875)
> 	at org.apache.catalina.core.ContainerBase.stop(ContainerBase.java:1106)
> 	at org.apache.catalina.core.ContainerBase.stop(ContainerBase.java:1106)
> 	at org.apache.catalina.core.StandardEngine.stop(StandardEngine.java:468)
> 	at org.apache.catalina.core.StandardService.stop(StandardService.java:604)
> 	at org.apache.catalina.core.StandardServer.stop(StandardServer.java:788)
> 	at org.apache.catalina.startup.Catalina.stop(Catalina.java:662)
> 	at org.apache.catalina.startup.Catalina.start(Catalina.java:629)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
> 	at java.lang.reflect.Method.invoke(Unknown Source)
> 	at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
> 	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
> After a little digging, it's because tomcat first unload the servlet mapping and destroy the servlet, and then, ask for serialization. I'm not sure it's a wiket bug, tell me if i have to report it against tomcat.
> Here is the trace of the destroy :
> Thread [main] (Suspended (breakpoint at line 357 in PersistentPageManager))	
> 	PersistentPageManager.destroy() line: 357	
> 	PageAccessSynchronizer$1(PageManagerDecorator).destroy() line: 86	
> 	LibellexApplication(Application).internalDestroy() line: 658	
> 	LibellexApplication(WebApplication).internalDestroy() line: 470	
> 	WicketFilter.destroy() line: 456	
> 	ApplicationFilterConfig.release() line: 357	
> 	StandardContext.filterStop() line: 4106	
> 	StandardContext.stop() line: 4869	
> 	StandardHost(ContainerBase).stop() line: 1106	
> 	StandardEngine(ContainerBase).stop() line: 1106	
> 	StandardEngine.stop() line: 468	
> 	StandardService.stop() line: 604	
> 	StandardServer.stop() line: 788	
> 	Catalina.stop() line: 662	
> 	Catalina.start() line: 629	
> 	NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
> 	NativeMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	Method.invoke(Object, Object...) line: not available	
> 	Bootstrap.start() line: 289	
> 	Bootstrap.main(String[]) line: 414	
> And the trace requesting serialization :
> Thread [main] (Suspended (breakpoint at line 83 in PersistentPageManager$SessionEntry))	
> 	PersistentPageManager$SessionEntry.getPageStore() line: 83	
> 	PersistentPageManager$SessionEntry.writeObject(ObjectOutputStream) line: 197	
> 	NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
> 	NativeMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	Method.invoke(Object, Object...) line: not available	
> 	ObjectStreamClass.invokeWriteObject(Object, ObjectOutputStream) line: not available	
> 	ObjectOutputStream.writeSerialData(Object, ObjectStreamClass) line: not available	
> 	ObjectOutputStream.writeOrdinaryObject(Object, ObjectStreamClass, boolean) line: not available	
> 	ObjectOutputStream.writeObject0(Object, boolean) line: not available	
> 	ObjectOutputStream.writeObject(Object) line: not available	
> 	StandardSession.writeObject(ObjectOutputStream) line: 1561	
> 	StandardSession.writeObjectData(ObjectOutputStream) line: 1004	
> 	StandardManager.doUnload() line: 528	
> 	StandardManager.unload() line: 469	
> 	StandardManager.stop() line: 678	
> 	StandardContext.stop() line: 4875	
> 	StandardHost(ContainerBase).stop() line: 1106	
> 	StandardEngine(ContainerBase).stop() line: 1106	
> 	StandardEngine.stop() line: 468	
> 	StandardService.stop() line: 604	
> 	StandardServer.stop() line: 788	
> 	Catalina.stop() line: 662	
> 	Catalina.start() line: 629	
> 	NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
> 	NativeMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	Method.invoke(Object, Object...) line: not available	
> 	Bootstrap.start() line: 289	
> 	Bootstrap.main(String[]) line: 414	
> Well at this time, a simple dirty hack is to bypass destroy chain to avoid  removal of app from managers properties of class PersistentPageManager. But I would like to have a real clean solution.

-- 
This message is automatically generated by JIRA.
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

       

[jira] Commented: (WICKET-3470) Can't write session to disk with tomcat : Servlet is destroyed before serialization

Posted by "Mark Thomas (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/WICKET-3470?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12998419#comment-12998419 ] 

Mark Thomas commented on WICKET-3470:
-------------------------------------

The Tomcat developers think this is a Wicket bug. Sessions should not be expired in the Servlet.destroy() method. See section SRV.2.3.4 of the Servlet 2.5 specification for the reason why.

> Can't write session to disk with tomcat : Servlet is destroyed before serialization
> -----------------------------------------------------------------------------------
>
>                 Key: WICKET-3470
>                 URL: https://issues.apache.org/jira/browse/WICKET-3470
>             Project: Wicket
>          Issue Type: Bug
>          Components: wicket
>    Affects Versions: 1.5-RC1
>         Environment: Windows 7 x64
> apache-tomcat-6.0.32-windows-x86
> (Running from Eclipse view, Faceted project)
>            Reporter: SegFault
>              Labels: persistent, session, storage, tomcat
>   Original Estimate: 4h
>  Remaining Estimate: 4h
>
> Hi,
> When I stop my tomcat, I have the following error :
> GRAVE: Exception au déchargement des sessions vers le stockage persistant (persistent storage)
> java.lang.IllegalStateException: PageManager for application wicket not registered.
> 	at lm.lbx.application.PersistentPageManager$SessionEntry.getPageStore(PersistentPageManager.java:86)
> 	at lm.lbx.application.PersistentPageManager$SessionEntry.writeObject(PersistentPageManager.java:197)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
> 	at java.lang.reflect.Method.invoke(Unknown Source)
> 	at java.io.ObjectStreamClass.invokeWriteObject(Unknown Source)
> 	at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
> 	at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
> 	at java.io.ObjectOutputStream.writeObject0(Unknown Source)
> 	at java.io.ObjectOutputStream.writeObject(Unknown Source)
> 	at org.apache.catalina.session.StandardSession.writeObject(StandardSession.java:1561)
> 	at org.apache.catalina.session.StandardSession.writeObjectData(StandardSession.java:1004)
> 	at org.apache.catalina.session.StandardManager.doUnload(StandardManager.java:528)
> 	at org.apache.catalina.session.StandardManager.unload(StandardManager.java:469)
> 	at org.apache.catalina.session.StandardManager.stop(StandardManager.java:678)
> 	at org.apache.catalina.core.StandardContext.stop(StandardContext.java:4875)
> 	at org.apache.catalina.core.ContainerBase.stop(ContainerBase.java:1106)
> 	at org.apache.catalina.core.ContainerBase.stop(ContainerBase.java:1106)
> 	at org.apache.catalina.core.StandardEngine.stop(StandardEngine.java:468)
> 	at org.apache.catalina.core.StandardService.stop(StandardService.java:604)
> 	at org.apache.catalina.core.StandardServer.stop(StandardServer.java:788)
> 	at org.apache.catalina.startup.Catalina.stop(Catalina.java:662)
> 	at org.apache.catalina.startup.Catalina.start(Catalina.java:629)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
> 	at java.lang.reflect.Method.invoke(Unknown Source)
> 	at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
> 	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
> After a little digging, it's because tomcat first unload the servlet mapping and destroy the servlet, and then, ask for serialization. I'm not sure it's a wiket bug, tell me if i have to report it against tomcat.
> Here is the trace of the destroy :
> Thread [main] (Suspended (breakpoint at line 357 in PersistentPageManager))	
> 	PersistentPageManager.destroy() line: 357	
> 	PageAccessSynchronizer$1(PageManagerDecorator).destroy() line: 86	
> 	LibellexApplication(Application).internalDestroy() line: 658	
> 	LibellexApplication(WebApplication).internalDestroy() line: 470	
> 	WicketFilter.destroy() line: 456	
> 	ApplicationFilterConfig.release() line: 357	
> 	StandardContext.filterStop() line: 4106	
> 	StandardContext.stop() line: 4869	
> 	StandardHost(ContainerBase).stop() line: 1106	
> 	StandardEngine(ContainerBase).stop() line: 1106	
> 	StandardEngine.stop() line: 468	
> 	StandardService.stop() line: 604	
> 	StandardServer.stop() line: 788	
> 	Catalina.stop() line: 662	
> 	Catalina.start() line: 629	
> 	NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
> 	NativeMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	Method.invoke(Object, Object...) line: not available	
> 	Bootstrap.start() line: 289	
> 	Bootstrap.main(String[]) line: 414	
> And the trace requesting serialization :
> Thread [main] (Suspended (breakpoint at line 83 in PersistentPageManager$SessionEntry))	
> 	PersistentPageManager$SessionEntry.getPageStore() line: 83	
> 	PersistentPageManager$SessionEntry.writeObject(ObjectOutputStream) line: 197	
> 	NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
> 	NativeMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	Method.invoke(Object, Object...) line: not available	
> 	ObjectStreamClass.invokeWriteObject(Object, ObjectOutputStream) line: not available	
> 	ObjectOutputStream.writeSerialData(Object, ObjectStreamClass) line: not available	
> 	ObjectOutputStream.writeOrdinaryObject(Object, ObjectStreamClass, boolean) line: not available	
> 	ObjectOutputStream.writeObject0(Object, boolean) line: not available	
> 	ObjectOutputStream.writeObject(Object) line: not available	
> 	StandardSession.writeObject(ObjectOutputStream) line: 1561	
> 	StandardSession.writeObjectData(ObjectOutputStream) line: 1004	
> 	StandardManager.doUnload() line: 528	
> 	StandardManager.unload() line: 469	
> 	StandardManager.stop() line: 678	
> 	StandardContext.stop() line: 4875	
> 	StandardHost(ContainerBase).stop() line: 1106	
> 	StandardEngine(ContainerBase).stop() line: 1106	
> 	StandardEngine.stop() line: 468	
> 	StandardService.stop() line: 604	
> 	StandardServer.stop() line: 788	
> 	Catalina.stop() line: 662	
> 	Catalina.start() line: 629	
> 	NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
> 	NativeMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	Method.invoke(Object, Object...) line: not available	
> 	Bootstrap.start() line: 289	
> 	Bootstrap.main(String[]) line: 414	
> Well at this time, a simple dirty hack is to bypass destroy chain to avoid  removal of app from managers properties of class PersistentPageManager. But I would like to have a real clean solution.

-- 
This message is automatically generated by JIRA.
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

       

[jira] Commented: (WICKET-3470) Can't write session to disk with tomcat : Servlet is destroyed before serialization

Posted by "Martin Grigorov (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/WICKET-3470?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13008626#comment-13008626 ] 

Martin Grigorov commented on WICKET-3470:
-----------------------------------------

Cross link the ticket with the discussion in dev@:
http://apache-wicket.1842946.n4.nabble.com/HEADS-UP-A-change-in-web-xml-setup-is-required-td3385721.html.

The outcome is that there is no need to create new ServletContextListener. The Page serialization don't need to convert to/from SerializedPage when the Application stops/starts. See the link above for more details.

> Can't write session to disk with tomcat : Servlet is destroyed before serialization
> -----------------------------------------------------------------------------------
>
>                 Key: WICKET-3470
>                 URL: https://issues.apache.org/jira/browse/WICKET-3470
>             Project: Wicket
>          Issue Type: Bug
>          Components: wicket-core
>    Affects Versions: 1.5-RC1
>         Environment: Windows 7 x64
> apache-tomcat-6.0.32-windows-x86
> (Running from Eclipse view, Faceted project)
>            Reporter: SegFault
>              Labels: persistent, session, storage, tomcat
>             Fix For: 1.5-RC3, 1.5.0
>
>   Original Estimate: 4h
>  Remaining Estimate: 4h
>
> Hi,
> When I stop my tomcat, I have the following error :
> GRAVE: Exception au déchargement des sessions vers le stockage persistant (persistent storage)
> java.lang.IllegalStateException: PageManager for application wicket not registered.
> 	at lm.lbx.application.PersistentPageManager$SessionEntry.getPageStore(PersistentPageManager.java:86)
> 	at lm.lbx.application.PersistentPageManager$SessionEntry.writeObject(PersistentPageManager.java:197)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
> 	at java.lang.reflect.Method.invoke(Unknown Source)
> 	at java.io.ObjectStreamClass.invokeWriteObject(Unknown Source)
> 	at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
> 	at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
> 	at java.io.ObjectOutputStream.writeObject0(Unknown Source)
> 	at java.io.ObjectOutputStream.writeObject(Unknown Source)
> 	at org.apache.catalina.session.StandardSession.writeObject(StandardSession.java:1561)
> 	at org.apache.catalina.session.StandardSession.writeObjectData(StandardSession.java:1004)
> 	at org.apache.catalina.session.StandardManager.doUnload(StandardManager.java:528)
> 	at org.apache.catalina.session.StandardManager.unload(StandardManager.java:469)
> 	at org.apache.catalina.session.StandardManager.stop(StandardManager.java:678)
> 	at org.apache.catalina.core.StandardContext.stop(StandardContext.java:4875)
> 	at org.apache.catalina.core.ContainerBase.stop(ContainerBase.java:1106)
> 	at org.apache.catalina.core.ContainerBase.stop(ContainerBase.java:1106)
> 	at org.apache.catalina.core.StandardEngine.stop(StandardEngine.java:468)
> 	at org.apache.catalina.core.StandardService.stop(StandardService.java:604)
> 	at org.apache.catalina.core.StandardServer.stop(StandardServer.java:788)
> 	at org.apache.catalina.startup.Catalina.stop(Catalina.java:662)
> 	at org.apache.catalina.startup.Catalina.start(Catalina.java:629)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
> 	at java.lang.reflect.Method.invoke(Unknown Source)
> 	at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
> 	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
> After a little digging, it's because tomcat first unload the servlet mapping and destroy the servlet, and then, ask for serialization. I'm not sure it's a wiket bug, tell me if i have to report it against tomcat.
> Here is the trace of the destroy :
> Thread [main] (Suspended (breakpoint at line 357 in PersistentPageManager))	
> 	PersistentPageManager.destroy() line: 357	
> 	PageAccessSynchronizer$1(PageManagerDecorator).destroy() line: 86	
> 	LibellexApplication(Application).internalDestroy() line: 658	
> 	LibellexApplication(WebApplication).internalDestroy() line: 470	
> 	WicketFilter.destroy() line: 456	
> 	ApplicationFilterConfig.release() line: 357	
> 	StandardContext.filterStop() line: 4106	
> 	StandardContext.stop() line: 4869	
> 	StandardHost(ContainerBase).stop() line: 1106	
> 	StandardEngine(ContainerBase).stop() line: 1106	
> 	StandardEngine.stop() line: 468	
> 	StandardService.stop() line: 604	
> 	StandardServer.stop() line: 788	
> 	Catalina.stop() line: 662	
> 	Catalina.start() line: 629	
> 	NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
> 	NativeMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	Method.invoke(Object, Object...) line: not available	
> 	Bootstrap.start() line: 289	
> 	Bootstrap.main(String[]) line: 414	
> And the trace requesting serialization :
> Thread [main] (Suspended (breakpoint at line 83 in PersistentPageManager$SessionEntry))	
> 	PersistentPageManager$SessionEntry.getPageStore() line: 83	
> 	PersistentPageManager$SessionEntry.writeObject(ObjectOutputStream) line: 197	
> 	NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
> 	NativeMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	Method.invoke(Object, Object...) line: not available	
> 	ObjectStreamClass.invokeWriteObject(Object, ObjectOutputStream) line: not available	
> 	ObjectOutputStream.writeSerialData(Object, ObjectStreamClass) line: not available	
> 	ObjectOutputStream.writeOrdinaryObject(Object, ObjectStreamClass, boolean) line: not available	
> 	ObjectOutputStream.writeObject0(Object, boolean) line: not available	
> 	ObjectOutputStream.writeObject(Object) line: not available	
> 	StandardSession.writeObject(ObjectOutputStream) line: 1561	
> 	StandardSession.writeObjectData(ObjectOutputStream) line: 1004	
> 	StandardManager.doUnload() line: 528	
> 	StandardManager.unload() line: 469	
> 	StandardManager.stop() line: 678	
> 	StandardContext.stop() line: 4875	
> 	StandardHost(ContainerBase).stop() line: 1106	
> 	StandardEngine(ContainerBase).stop() line: 1106	
> 	StandardEngine.stop() line: 468	
> 	StandardService.stop() line: 604	
> 	StandardServer.stop() line: 788	
> 	Catalina.stop() line: 662	
> 	Catalina.start() line: 629	
> 	NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
> 	NativeMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	Method.invoke(Object, Object...) line: not available	
> 	Bootstrap.start() line: 289	
> 	Bootstrap.main(String[]) line: 414	
> Well at this time, a simple dirty hack is to bypass destroy chain to avoid  removal of app from managers properties of class PersistentPageManager. But I would like to have a real clean solution.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

[jira] Commented: (WICKET-3470) Can't write session to disk with tomcat : Servlet is destroyed before serialization

Posted by "SegFault (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/WICKET-3470?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12998269#comment-12998269 ] 

SegFault commented on WICKET-3470:
----------------------------------

I submitted it to tomcat team : https://issues.apache.org/bugzilla/show_bug.cgi?id=50819

> Can't write session to disk with tomcat : Servlet is destroyed before serialization
> -----------------------------------------------------------------------------------
>
>                 Key: WICKET-3470
>                 URL: https://issues.apache.org/jira/browse/WICKET-3470
>             Project: Wicket
>          Issue Type: Bug
>          Components: wicket
>    Affects Versions: 1.5-RC1
>         Environment: Windows 7 x64
> apache-tomcat-6.0.32-windows-x86
> (Running from Eclipse view, Faceted project)
>            Reporter: SegFault
>              Labels: persistent, session, storage, tomcat
>   Original Estimate: 4h
>  Remaining Estimate: 4h
>
> Hi,
> When I stop my tomcat, I have the following error :
> GRAVE: Exception au déchargement des sessions vers le stockage persistant (persistent storage)
> java.lang.IllegalStateException: PageManager for application wicket not registered.
> 	at lm.lbx.application.PersistentPageManager$SessionEntry.getPageStore(PersistentPageManager.java:86)
> 	at lm.lbx.application.PersistentPageManager$SessionEntry.writeObject(PersistentPageManager.java:197)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
> 	at java.lang.reflect.Method.invoke(Unknown Source)
> 	at java.io.ObjectStreamClass.invokeWriteObject(Unknown Source)
> 	at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
> 	at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
> 	at java.io.ObjectOutputStream.writeObject0(Unknown Source)
> 	at java.io.ObjectOutputStream.writeObject(Unknown Source)
> 	at org.apache.catalina.session.StandardSession.writeObject(StandardSession.java:1561)
> 	at org.apache.catalina.session.StandardSession.writeObjectData(StandardSession.java:1004)
> 	at org.apache.catalina.session.StandardManager.doUnload(StandardManager.java:528)
> 	at org.apache.catalina.session.StandardManager.unload(StandardManager.java:469)
> 	at org.apache.catalina.session.StandardManager.stop(StandardManager.java:678)
> 	at org.apache.catalina.core.StandardContext.stop(StandardContext.java:4875)
> 	at org.apache.catalina.core.ContainerBase.stop(ContainerBase.java:1106)
> 	at org.apache.catalina.core.ContainerBase.stop(ContainerBase.java:1106)
> 	at org.apache.catalina.core.StandardEngine.stop(StandardEngine.java:468)
> 	at org.apache.catalina.core.StandardService.stop(StandardService.java:604)
> 	at org.apache.catalina.core.StandardServer.stop(StandardServer.java:788)
> 	at org.apache.catalina.startup.Catalina.stop(Catalina.java:662)
> 	at org.apache.catalina.startup.Catalina.start(Catalina.java:629)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
> 	at java.lang.reflect.Method.invoke(Unknown Source)
> 	at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
> 	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
> After a little digging, it's because tomcat first unload the servlet mapping and destroy the servlet, and then, ask for serialization. I'm not sure it's a wiket bug, tell me if i have to report it against tomcat.
> Here is the trace of the destroy :
> Thread [main] (Suspended (breakpoint at line 357 in PersistentPageManager))	
> 	PersistentPageManager.destroy() line: 357	
> 	PageAccessSynchronizer$1(PageManagerDecorator).destroy() line: 86	
> 	LibellexApplication(Application).internalDestroy() line: 658	
> 	LibellexApplication(WebApplication).internalDestroy() line: 470	
> 	WicketFilter.destroy() line: 456	
> 	ApplicationFilterConfig.release() line: 357	
> 	StandardContext.filterStop() line: 4106	
> 	StandardContext.stop() line: 4869	
> 	StandardHost(ContainerBase).stop() line: 1106	
> 	StandardEngine(ContainerBase).stop() line: 1106	
> 	StandardEngine.stop() line: 468	
> 	StandardService.stop() line: 604	
> 	StandardServer.stop() line: 788	
> 	Catalina.stop() line: 662	
> 	Catalina.start() line: 629	
> 	NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
> 	NativeMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	Method.invoke(Object, Object...) line: not available	
> 	Bootstrap.start() line: 289	
> 	Bootstrap.main(String[]) line: 414	
> And the trace requesting serialization :
> Thread [main] (Suspended (breakpoint at line 83 in PersistentPageManager$SessionEntry))	
> 	PersistentPageManager$SessionEntry.getPageStore() line: 83	
> 	PersistentPageManager$SessionEntry.writeObject(ObjectOutputStream) line: 197	
> 	NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
> 	NativeMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	Method.invoke(Object, Object...) line: not available	
> 	ObjectStreamClass.invokeWriteObject(Object, ObjectOutputStream) line: not available	
> 	ObjectOutputStream.writeSerialData(Object, ObjectStreamClass) line: not available	
> 	ObjectOutputStream.writeOrdinaryObject(Object, ObjectStreamClass, boolean) line: not available	
> 	ObjectOutputStream.writeObject0(Object, boolean) line: not available	
> 	ObjectOutputStream.writeObject(Object) line: not available	
> 	StandardSession.writeObject(ObjectOutputStream) line: 1561	
> 	StandardSession.writeObjectData(ObjectOutputStream) line: 1004	
> 	StandardManager.doUnload() line: 528	
> 	StandardManager.unload() line: 469	
> 	StandardManager.stop() line: 678	
> 	StandardContext.stop() line: 4875	
> 	StandardHost(ContainerBase).stop() line: 1106	
> 	StandardEngine(ContainerBase).stop() line: 1106	
> 	StandardEngine.stop() line: 468	
> 	StandardService.stop() line: 604	
> 	StandardServer.stop() line: 788	
> 	Catalina.stop() line: 662	
> 	Catalina.start() line: 629	
> 	NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
> 	NativeMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	Method.invoke(Object, Object...) line: not available	
> 	Bootstrap.start() line: 289	
> 	Bootstrap.main(String[]) line: 414	
> Well at this time, a simple dirty hack is to bypass destroy chain to avoid  removal of app from managers properties of class PersistentPageManager. But I would like to have a real clean solution.

-- 
This message is automatically generated by JIRA.
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

       

[jira] Commented: (WICKET-3470) Can't write session to disk with tomcat : Servlet is destroyed before serialization

Posted by "SegFault (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/WICKET-3470?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12999057#comment-12999057 ] 

SegFault commented on WICKET-3470:
----------------------------------

Ok, well, my simple test app with session don't raise this bug.... I'll do more investigation this weekend to provide you a test case, sorry not much time before

> Can't write session to disk with tomcat : Servlet is destroyed before serialization
> -----------------------------------------------------------------------------------
>
>                 Key: WICKET-3470
>                 URL: https://issues.apache.org/jira/browse/WICKET-3470
>             Project: Wicket
>          Issue Type: Bug
>          Components: wicket
>    Affects Versions: 1.5-RC1
>         Environment: Windows 7 x64
> apache-tomcat-6.0.32-windows-x86
> (Running from Eclipse view, Faceted project)
>            Reporter: SegFault
>              Labels: persistent, session, storage, tomcat
>   Original Estimate: 4h
>  Remaining Estimate: 4h
>
> Hi,
> When I stop my tomcat, I have the following error :
> GRAVE: Exception au déchargement des sessions vers le stockage persistant (persistent storage)
> java.lang.IllegalStateException: PageManager for application wicket not registered.
> 	at lm.lbx.application.PersistentPageManager$SessionEntry.getPageStore(PersistentPageManager.java:86)
> 	at lm.lbx.application.PersistentPageManager$SessionEntry.writeObject(PersistentPageManager.java:197)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
> 	at java.lang.reflect.Method.invoke(Unknown Source)
> 	at java.io.ObjectStreamClass.invokeWriteObject(Unknown Source)
> 	at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
> 	at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
> 	at java.io.ObjectOutputStream.writeObject0(Unknown Source)
> 	at java.io.ObjectOutputStream.writeObject(Unknown Source)
> 	at org.apache.catalina.session.StandardSession.writeObject(StandardSession.java:1561)
> 	at org.apache.catalina.session.StandardSession.writeObjectData(StandardSession.java:1004)
> 	at org.apache.catalina.session.StandardManager.doUnload(StandardManager.java:528)
> 	at org.apache.catalina.session.StandardManager.unload(StandardManager.java:469)
> 	at org.apache.catalina.session.StandardManager.stop(StandardManager.java:678)
> 	at org.apache.catalina.core.StandardContext.stop(StandardContext.java:4875)
> 	at org.apache.catalina.core.ContainerBase.stop(ContainerBase.java:1106)
> 	at org.apache.catalina.core.ContainerBase.stop(ContainerBase.java:1106)
> 	at org.apache.catalina.core.StandardEngine.stop(StandardEngine.java:468)
> 	at org.apache.catalina.core.StandardService.stop(StandardService.java:604)
> 	at org.apache.catalina.core.StandardServer.stop(StandardServer.java:788)
> 	at org.apache.catalina.startup.Catalina.stop(Catalina.java:662)
> 	at org.apache.catalina.startup.Catalina.start(Catalina.java:629)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
> 	at java.lang.reflect.Method.invoke(Unknown Source)
> 	at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
> 	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
> After a little digging, it's because tomcat first unload the servlet mapping and destroy the servlet, and then, ask for serialization. I'm not sure it's a wiket bug, tell me if i have to report it against tomcat.
> Here is the trace of the destroy :
> Thread [main] (Suspended (breakpoint at line 357 in PersistentPageManager))	
> 	PersistentPageManager.destroy() line: 357	
> 	PageAccessSynchronizer$1(PageManagerDecorator).destroy() line: 86	
> 	LibellexApplication(Application).internalDestroy() line: 658	
> 	LibellexApplication(WebApplication).internalDestroy() line: 470	
> 	WicketFilter.destroy() line: 456	
> 	ApplicationFilterConfig.release() line: 357	
> 	StandardContext.filterStop() line: 4106	
> 	StandardContext.stop() line: 4869	
> 	StandardHost(ContainerBase).stop() line: 1106	
> 	StandardEngine(ContainerBase).stop() line: 1106	
> 	StandardEngine.stop() line: 468	
> 	StandardService.stop() line: 604	
> 	StandardServer.stop() line: 788	
> 	Catalina.stop() line: 662	
> 	Catalina.start() line: 629	
> 	NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
> 	NativeMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	Method.invoke(Object, Object...) line: not available	
> 	Bootstrap.start() line: 289	
> 	Bootstrap.main(String[]) line: 414	
> And the trace requesting serialization :
> Thread [main] (Suspended (breakpoint at line 83 in PersistentPageManager$SessionEntry))	
> 	PersistentPageManager$SessionEntry.getPageStore() line: 83	
> 	PersistentPageManager$SessionEntry.writeObject(ObjectOutputStream) line: 197	
> 	NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
> 	NativeMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	Method.invoke(Object, Object...) line: not available	
> 	ObjectStreamClass.invokeWriteObject(Object, ObjectOutputStream) line: not available	
> 	ObjectOutputStream.writeSerialData(Object, ObjectStreamClass) line: not available	
> 	ObjectOutputStream.writeOrdinaryObject(Object, ObjectStreamClass, boolean) line: not available	
> 	ObjectOutputStream.writeObject0(Object, boolean) line: not available	
> 	ObjectOutputStream.writeObject(Object) line: not available	
> 	StandardSession.writeObject(ObjectOutputStream) line: 1561	
> 	StandardSession.writeObjectData(ObjectOutputStream) line: 1004	
> 	StandardManager.doUnload() line: 528	
> 	StandardManager.unload() line: 469	
> 	StandardManager.stop() line: 678	
> 	StandardContext.stop() line: 4875	
> 	StandardHost(ContainerBase).stop() line: 1106	
> 	StandardEngine(ContainerBase).stop() line: 1106	
> 	StandardEngine.stop() line: 468	
> 	StandardService.stop() line: 604	
> 	StandardServer.stop() line: 788	
> 	Catalina.stop() line: 662	
> 	Catalina.start() line: 629	
> 	NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
> 	NativeMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	Method.invoke(Object, Object...) line: not available	
> 	Bootstrap.start() line: 289	
> 	Bootstrap.main(String[]) line: 414	
> Well at this time, a simple dirty hack is to bypass destroy chain to avoid  removal of app from managers properties of class PersistentPageManager. But I would like to have a real clean solution.

-- 
This message is automatically generated by JIRA.
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

       

[jira] Commented: (WICKET-3470) Can't write session to disk with tomcat : Servlet is destroyed before serialization

Posted by "SegFault (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/WICKET-3470?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12998518#comment-12998518 ] 

SegFault commented on WICKET-3470:
----------------------------------

Basically starting from maven quickstart archetype, make the application inherit from AuthenticatedWebApplication with a dumb session implementation which inherit AuthenticatedWebSession and have a member field.

Start Tomcat
Login on wicket app
Stop Tomcat

I'll made the quickstart application tomorrow, but it's probably reproducible on a wicket session example.

> Can't write session to disk with tomcat : Servlet is destroyed before serialization
> -----------------------------------------------------------------------------------
>
>                 Key: WICKET-3470
>                 URL: https://issues.apache.org/jira/browse/WICKET-3470
>             Project: Wicket
>          Issue Type: Bug
>          Components: wicket
>    Affects Versions: 1.5-RC1
>         Environment: Windows 7 x64
> apache-tomcat-6.0.32-windows-x86
> (Running from Eclipse view, Faceted project)
>            Reporter: SegFault
>              Labels: persistent, session, storage, tomcat
>   Original Estimate: 4h
>  Remaining Estimate: 4h
>
> Hi,
> When I stop my tomcat, I have the following error :
> GRAVE: Exception au déchargement des sessions vers le stockage persistant (persistent storage)
> java.lang.IllegalStateException: PageManager for application wicket not registered.
> 	at lm.lbx.application.PersistentPageManager$SessionEntry.getPageStore(PersistentPageManager.java:86)
> 	at lm.lbx.application.PersistentPageManager$SessionEntry.writeObject(PersistentPageManager.java:197)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
> 	at java.lang.reflect.Method.invoke(Unknown Source)
> 	at java.io.ObjectStreamClass.invokeWriteObject(Unknown Source)
> 	at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
> 	at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
> 	at java.io.ObjectOutputStream.writeObject0(Unknown Source)
> 	at java.io.ObjectOutputStream.writeObject(Unknown Source)
> 	at org.apache.catalina.session.StandardSession.writeObject(StandardSession.java:1561)
> 	at org.apache.catalina.session.StandardSession.writeObjectData(StandardSession.java:1004)
> 	at org.apache.catalina.session.StandardManager.doUnload(StandardManager.java:528)
> 	at org.apache.catalina.session.StandardManager.unload(StandardManager.java:469)
> 	at org.apache.catalina.session.StandardManager.stop(StandardManager.java:678)
> 	at org.apache.catalina.core.StandardContext.stop(StandardContext.java:4875)
> 	at org.apache.catalina.core.ContainerBase.stop(ContainerBase.java:1106)
> 	at org.apache.catalina.core.ContainerBase.stop(ContainerBase.java:1106)
> 	at org.apache.catalina.core.StandardEngine.stop(StandardEngine.java:468)
> 	at org.apache.catalina.core.StandardService.stop(StandardService.java:604)
> 	at org.apache.catalina.core.StandardServer.stop(StandardServer.java:788)
> 	at org.apache.catalina.startup.Catalina.stop(Catalina.java:662)
> 	at org.apache.catalina.startup.Catalina.start(Catalina.java:629)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
> 	at java.lang.reflect.Method.invoke(Unknown Source)
> 	at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
> 	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
> After a little digging, it's because tomcat first unload the servlet mapping and destroy the servlet, and then, ask for serialization. I'm not sure it's a wiket bug, tell me if i have to report it against tomcat.
> Here is the trace of the destroy :
> Thread [main] (Suspended (breakpoint at line 357 in PersistentPageManager))	
> 	PersistentPageManager.destroy() line: 357	
> 	PageAccessSynchronizer$1(PageManagerDecorator).destroy() line: 86	
> 	LibellexApplication(Application).internalDestroy() line: 658	
> 	LibellexApplication(WebApplication).internalDestroy() line: 470	
> 	WicketFilter.destroy() line: 456	
> 	ApplicationFilterConfig.release() line: 357	
> 	StandardContext.filterStop() line: 4106	
> 	StandardContext.stop() line: 4869	
> 	StandardHost(ContainerBase).stop() line: 1106	
> 	StandardEngine(ContainerBase).stop() line: 1106	
> 	StandardEngine.stop() line: 468	
> 	StandardService.stop() line: 604	
> 	StandardServer.stop() line: 788	
> 	Catalina.stop() line: 662	
> 	Catalina.start() line: 629	
> 	NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
> 	NativeMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	Method.invoke(Object, Object...) line: not available	
> 	Bootstrap.start() line: 289	
> 	Bootstrap.main(String[]) line: 414	
> And the trace requesting serialization :
> Thread [main] (Suspended (breakpoint at line 83 in PersistentPageManager$SessionEntry))	
> 	PersistentPageManager$SessionEntry.getPageStore() line: 83	
> 	PersistentPageManager$SessionEntry.writeObject(ObjectOutputStream) line: 197	
> 	NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
> 	NativeMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	Method.invoke(Object, Object...) line: not available	
> 	ObjectStreamClass.invokeWriteObject(Object, ObjectOutputStream) line: not available	
> 	ObjectOutputStream.writeSerialData(Object, ObjectStreamClass) line: not available	
> 	ObjectOutputStream.writeOrdinaryObject(Object, ObjectStreamClass, boolean) line: not available	
> 	ObjectOutputStream.writeObject0(Object, boolean) line: not available	
> 	ObjectOutputStream.writeObject(Object) line: not available	
> 	StandardSession.writeObject(ObjectOutputStream) line: 1561	
> 	StandardSession.writeObjectData(ObjectOutputStream) line: 1004	
> 	StandardManager.doUnload() line: 528	
> 	StandardManager.unload() line: 469	
> 	StandardManager.stop() line: 678	
> 	StandardContext.stop() line: 4875	
> 	StandardHost(ContainerBase).stop() line: 1106	
> 	StandardEngine(ContainerBase).stop() line: 1106	
> 	StandardEngine.stop() line: 468	
> 	StandardService.stop() line: 604	
> 	StandardServer.stop() line: 788	
> 	Catalina.stop() line: 662	
> 	Catalina.start() line: 629	
> 	NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
> 	NativeMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	Method.invoke(Object, Object...) line: not available	
> 	Bootstrap.start() line: 289	
> 	Bootstrap.main(String[]) line: 414	
> Well at this time, a simple dirty hack is to bypass destroy chain to avoid  removal of app from managers properties of class PersistentPageManager. But I would like to have a real clean solution.

-- 
This message is automatically generated by JIRA.
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

       

[jira] Commented: (WICKET-3470) Can't write session to disk with tomcat : Servlet is destroyed before serialization

Posted by "Martin Grigorov (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/WICKET-3470?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12998514#comment-12998514 ] 

Martin Grigorov commented on WICKET-3470:
-----------------------------------------

SefFault can you please create a quickstart application that reproduces the problem and describe the steps to reproduce it.


> Can't write session to disk with tomcat : Servlet is destroyed before serialization
> -----------------------------------------------------------------------------------
>
>                 Key: WICKET-3470
>                 URL: https://issues.apache.org/jira/browse/WICKET-3470
>             Project: Wicket
>          Issue Type: Bug
>          Components: wicket
>    Affects Versions: 1.5-RC1
>         Environment: Windows 7 x64
> apache-tomcat-6.0.32-windows-x86
> (Running from Eclipse view, Faceted project)
>            Reporter: SegFault
>              Labels: persistent, session, storage, tomcat
>   Original Estimate: 4h
>  Remaining Estimate: 4h
>
> Hi,
> When I stop my tomcat, I have the following error :
> GRAVE: Exception au déchargement des sessions vers le stockage persistant (persistent storage)
> java.lang.IllegalStateException: PageManager for application wicket not registered.
> 	at lm.lbx.application.PersistentPageManager$SessionEntry.getPageStore(PersistentPageManager.java:86)
> 	at lm.lbx.application.PersistentPageManager$SessionEntry.writeObject(PersistentPageManager.java:197)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
> 	at java.lang.reflect.Method.invoke(Unknown Source)
> 	at java.io.ObjectStreamClass.invokeWriteObject(Unknown Source)
> 	at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
> 	at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
> 	at java.io.ObjectOutputStream.writeObject0(Unknown Source)
> 	at java.io.ObjectOutputStream.writeObject(Unknown Source)
> 	at org.apache.catalina.session.StandardSession.writeObject(StandardSession.java:1561)
> 	at org.apache.catalina.session.StandardSession.writeObjectData(StandardSession.java:1004)
> 	at org.apache.catalina.session.StandardManager.doUnload(StandardManager.java:528)
> 	at org.apache.catalina.session.StandardManager.unload(StandardManager.java:469)
> 	at org.apache.catalina.session.StandardManager.stop(StandardManager.java:678)
> 	at org.apache.catalina.core.StandardContext.stop(StandardContext.java:4875)
> 	at org.apache.catalina.core.ContainerBase.stop(ContainerBase.java:1106)
> 	at org.apache.catalina.core.ContainerBase.stop(ContainerBase.java:1106)
> 	at org.apache.catalina.core.StandardEngine.stop(StandardEngine.java:468)
> 	at org.apache.catalina.core.StandardService.stop(StandardService.java:604)
> 	at org.apache.catalina.core.StandardServer.stop(StandardServer.java:788)
> 	at org.apache.catalina.startup.Catalina.stop(Catalina.java:662)
> 	at org.apache.catalina.startup.Catalina.start(Catalina.java:629)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
> 	at java.lang.reflect.Method.invoke(Unknown Source)
> 	at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
> 	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
> After a little digging, it's because tomcat first unload the servlet mapping and destroy the servlet, and then, ask for serialization. I'm not sure it's a wiket bug, tell me if i have to report it against tomcat.
> Here is the trace of the destroy :
> Thread [main] (Suspended (breakpoint at line 357 in PersistentPageManager))	
> 	PersistentPageManager.destroy() line: 357	
> 	PageAccessSynchronizer$1(PageManagerDecorator).destroy() line: 86	
> 	LibellexApplication(Application).internalDestroy() line: 658	
> 	LibellexApplication(WebApplication).internalDestroy() line: 470	
> 	WicketFilter.destroy() line: 456	
> 	ApplicationFilterConfig.release() line: 357	
> 	StandardContext.filterStop() line: 4106	
> 	StandardContext.stop() line: 4869	
> 	StandardHost(ContainerBase).stop() line: 1106	
> 	StandardEngine(ContainerBase).stop() line: 1106	
> 	StandardEngine.stop() line: 468	
> 	StandardService.stop() line: 604	
> 	StandardServer.stop() line: 788	
> 	Catalina.stop() line: 662	
> 	Catalina.start() line: 629	
> 	NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
> 	NativeMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	Method.invoke(Object, Object...) line: not available	
> 	Bootstrap.start() line: 289	
> 	Bootstrap.main(String[]) line: 414	
> And the trace requesting serialization :
> Thread [main] (Suspended (breakpoint at line 83 in PersistentPageManager$SessionEntry))	
> 	PersistentPageManager$SessionEntry.getPageStore() line: 83	
> 	PersistentPageManager$SessionEntry.writeObject(ObjectOutputStream) line: 197	
> 	NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
> 	NativeMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	Method.invoke(Object, Object...) line: not available	
> 	ObjectStreamClass.invokeWriteObject(Object, ObjectOutputStream) line: not available	
> 	ObjectOutputStream.writeSerialData(Object, ObjectStreamClass) line: not available	
> 	ObjectOutputStream.writeOrdinaryObject(Object, ObjectStreamClass, boolean) line: not available	
> 	ObjectOutputStream.writeObject0(Object, boolean) line: not available	
> 	ObjectOutputStream.writeObject(Object) line: not available	
> 	StandardSession.writeObject(ObjectOutputStream) line: 1561	
> 	StandardSession.writeObjectData(ObjectOutputStream) line: 1004	
> 	StandardManager.doUnload() line: 528	
> 	StandardManager.unload() line: 469	
> 	StandardManager.stop() line: 678	
> 	StandardContext.stop() line: 4875	
> 	StandardHost(ContainerBase).stop() line: 1106	
> 	StandardEngine(ContainerBase).stop() line: 1106	
> 	StandardEngine.stop() line: 468	
> 	StandardService.stop() line: 604	
> 	StandardServer.stop() line: 788	
> 	Catalina.stop() line: 662	
> 	Catalina.start() line: 629	
> 	NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
> 	NativeMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	Method.invoke(Object, Object...) line: not available	
> 	Bootstrap.start() line: 289	
> 	Bootstrap.main(String[]) line: 414	
> Well at this time, a simple dirty hack is to bypass destroy chain to avoid  removal of app from managers properties of class PersistentPageManager. But I would like to have a real clean solution.

-- 
This message is automatically generated by JIRA.
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

       

[jira] Commented: (WICKET-3470) Can't write session to disk with tomcat : Servlet is destroyed before serialization

Posted by "Martin Grigorov (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/WICKET-3470?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12999971#comment-12999971 ] 

Martin Grigorov commented on WICKET-3470:
-----------------------------------------

The problem is easy reproducible with wicket-examples.war.
1. Deploy it at Tomcat (I used Tomcat 7.0.8)
2. Play a bit with "authorization" example
3. Stop Tomcat
4. The exception is logged in logs/catalina.out

Using ServletContextListener will solve the problem but this would mean that each user application should add this <listener>.
With Servlet API 3.0 it is possible to do it in code with ServletContext.addListener() but this is only for 3.0.

I remember Matej didn't call pageManager.destroy() in Application.internalDestroy() and I added this at one point (Maybe he knew about this problem). If we remove this call again then the only problem I see is that there is no one to clean the static org.apache.wicket.page.PersistentPageManager.managers without using a listener.
Other ideas ?

> Can't write session to disk with tomcat : Servlet is destroyed before serialization
> -----------------------------------------------------------------------------------
>
>                 Key: WICKET-3470
>                 URL: https://issues.apache.org/jira/browse/WICKET-3470
>             Project: Wicket
>          Issue Type: Bug
>          Components: wicket-core
>    Affects Versions: 1.5-RC1
>         Environment: Windows 7 x64
> apache-tomcat-6.0.32-windows-x86
> (Running from Eclipse view, Faceted project)
>            Reporter: SegFault
>              Labels: persistent, session, storage, tomcat
>   Original Estimate: 4h
>  Remaining Estimate: 4h
>
> Hi,
> When I stop my tomcat, I have the following error :
> GRAVE: Exception au déchargement des sessions vers le stockage persistant (persistent storage)
> java.lang.IllegalStateException: PageManager for application wicket not registered.
> 	at lm.lbx.application.PersistentPageManager$SessionEntry.getPageStore(PersistentPageManager.java:86)
> 	at lm.lbx.application.PersistentPageManager$SessionEntry.writeObject(PersistentPageManager.java:197)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
> 	at java.lang.reflect.Method.invoke(Unknown Source)
> 	at java.io.ObjectStreamClass.invokeWriteObject(Unknown Source)
> 	at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
> 	at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
> 	at java.io.ObjectOutputStream.writeObject0(Unknown Source)
> 	at java.io.ObjectOutputStream.writeObject(Unknown Source)
> 	at org.apache.catalina.session.StandardSession.writeObject(StandardSession.java:1561)
> 	at org.apache.catalina.session.StandardSession.writeObjectData(StandardSession.java:1004)
> 	at org.apache.catalina.session.StandardManager.doUnload(StandardManager.java:528)
> 	at org.apache.catalina.session.StandardManager.unload(StandardManager.java:469)
> 	at org.apache.catalina.session.StandardManager.stop(StandardManager.java:678)
> 	at org.apache.catalina.core.StandardContext.stop(StandardContext.java:4875)
> 	at org.apache.catalina.core.ContainerBase.stop(ContainerBase.java:1106)
> 	at org.apache.catalina.core.ContainerBase.stop(ContainerBase.java:1106)
> 	at org.apache.catalina.core.StandardEngine.stop(StandardEngine.java:468)
> 	at org.apache.catalina.core.StandardService.stop(StandardService.java:604)
> 	at org.apache.catalina.core.StandardServer.stop(StandardServer.java:788)
> 	at org.apache.catalina.startup.Catalina.stop(Catalina.java:662)
> 	at org.apache.catalina.startup.Catalina.start(Catalina.java:629)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
> 	at java.lang.reflect.Method.invoke(Unknown Source)
> 	at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
> 	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
> After a little digging, it's because tomcat first unload the servlet mapping and destroy the servlet, and then, ask for serialization. I'm not sure it's a wiket bug, tell me if i have to report it against tomcat.
> Here is the trace of the destroy :
> Thread [main] (Suspended (breakpoint at line 357 in PersistentPageManager))	
> 	PersistentPageManager.destroy() line: 357	
> 	PageAccessSynchronizer$1(PageManagerDecorator).destroy() line: 86	
> 	LibellexApplication(Application).internalDestroy() line: 658	
> 	LibellexApplication(WebApplication).internalDestroy() line: 470	
> 	WicketFilter.destroy() line: 456	
> 	ApplicationFilterConfig.release() line: 357	
> 	StandardContext.filterStop() line: 4106	
> 	StandardContext.stop() line: 4869	
> 	StandardHost(ContainerBase).stop() line: 1106	
> 	StandardEngine(ContainerBase).stop() line: 1106	
> 	StandardEngine.stop() line: 468	
> 	StandardService.stop() line: 604	
> 	StandardServer.stop() line: 788	
> 	Catalina.stop() line: 662	
> 	Catalina.start() line: 629	
> 	NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
> 	NativeMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	Method.invoke(Object, Object...) line: not available	
> 	Bootstrap.start() line: 289	
> 	Bootstrap.main(String[]) line: 414	
> And the trace requesting serialization :
> Thread [main] (Suspended (breakpoint at line 83 in PersistentPageManager$SessionEntry))	
> 	PersistentPageManager$SessionEntry.getPageStore() line: 83	
> 	PersistentPageManager$SessionEntry.writeObject(ObjectOutputStream) line: 197	
> 	NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
> 	NativeMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	Method.invoke(Object, Object...) line: not available	
> 	ObjectStreamClass.invokeWriteObject(Object, ObjectOutputStream) line: not available	
> 	ObjectOutputStream.writeSerialData(Object, ObjectStreamClass) line: not available	
> 	ObjectOutputStream.writeOrdinaryObject(Object, ObjectStreamClass, boolean) line: not available	
> 	ObjectOutputStream.writeObject0(Object, boolean) line: not available	
> 	ObjectOutputStream.writeObject(Object) line: not available	
> 	StandardSession.writeObject(ObjectOutputStream) line: 1561	
> 	StandardSession.writeObjectData(ObjectOutputStream) line: 1004	
> 	StandardManager.doUnload() line: 528	
> 	StandardManager.unload() line: 469	
> 	StandardManager.stop() line: 678	
> 	StandardContext.stop() line: 4875	
> 	StandardHost(ContainerBase).stop() line: 1106	
> 	StandardEngine(ContainerBase).stop() line: 1106	
> 	StandardEngine.stop() line: 468	
> 	StandardService.stop() line: 604	
> 	StandardServer.stop() line: 788	
> 	Catalina.stop() line: 662	
> 	Catalina.start() line: 629	
> 	NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
> 	NativeMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	Method.invoke(Object, Object...) line: not available	
> 	Bootstrap.start() line: 289	
> 	Bootstrap.main(String[]) line: 414	
> Well at this time, a simple dirty hack is to bypass destroy chain to avoid  removal of app from managers properties of class PersistentPageManager. But I would like to have a real clean solution.

-- 
This message is automatically generated by JIRA.
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

       

[jira] Commented: (WICKET-3470) Can't write session to disk with tomcat : Servlet is destroyed before serialization

Posted by "Martin Grigorov (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/WICKET-3470?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12998252#comment-12998252 ] 

Martin Grigorov commented on WICKET-3470:
-----------------------------------------

Yes, I'm interested to hear what Tomcat developers think about this.
The problem is in StandardContext.stop() - it destroys the filter at line 4869 and later at line 4875 it tries to serialize the data.

I remember Peter Ertl reported similar bug for Jetty which has been fixed in their 7.1.x series.

> Can't write session to disk with tomcat : Servlet is destroyed before serialization
> -----------------------------------------------------------------------------------
>
>                 Key: WICKET-3470
>                 URL: https://issues.apache.org/jira/browse/WICKET-3470
>             Project: Wicket
>          Issue Type: Bug
>          Components: wicket
>    Affects Versions: 1.5-RC1
>         Environment: Windows 7 x64
> apache-tomcat-6.0.32-windows-x86
> (Running from Eclipse view, Faceted project)
>            Reporter: SegFault
>              Labels: persistent, session, storage, tomcat
>   Original Estimate: 4h
>  Remaining Estimate: 4h
>
> Hi,
> When I stop my tomcat, I have the following error :
> GRAVE: Exception au déchargement des sessions vers le stockage persistant (persistent storage)
> java.lang.IllegalStateException: PageManager for application wicket not registered.
> 	at lm.lbx.application.PersistentPageManager$SessionEntry.getPageStore(PersistentPageManager.java:86)
> 	at lm.lbx.application.PersistentPageManager$SessionEntry.writeObject(PersistentPageManager.java:197)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
> 	at java.lang.reflect.Method.invoke(Unknown Source)
> 	at java.io.ObjectStreamClass.invokeWriteObject(Unknown Source)
> 	at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
> 	at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
> 	at java.io.ObjectOutputStream.writeObject0(Unknown Source)
> 	at java.io.ObjectOutputStream.writeObject(Unknown Source)
> 	at org.apache.catalina.session.StandardSession.writeObject(StandardSession.java:1561)
> 	at org.apache.catalina.session.StandardSession.writeObjectData(StandardSession.java:1004)
> 	at org.apache.catalina.session.StandardManager.doUnload(StandardManager.java:528)
> 	at org.apache.catalina.session.StandardManager.unload(StandardManager.java:469)
> 	at org.apache.catalina.session.StandardManager.stop(StandardManager.java:678)
> 	at org.apache.catalina.core.StandardContext.stop(StandardContext.java:4875)
> 	at org.apache.catalina.core.ContainerBase.stop(ContainerBase.java:1106)
> 	at org.apache.catalina.core.ContainerBase.stop(ContainerBase.java:1106)
> 	at org.apache.catalina.core.StandardEngine.stop(StandardEngine.java:468)
> 	at org.apache.catalina.core.StandardService.stop(StandardService.java:604)
> 	at org.apache.catalina.core.StandardServer.stop(StandardServer.java:788)
> 	at org.apache.catalina.startup.Catalina.stop(Catalina.java:662)
> 	at org.apache.catalina.startup.Catalina.start(Catalina.java:629)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
> 	at java.lang.reflect.Method.invoke(Unknown Source)
> 	at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
> 	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
> After a little digging, it's because tomcat first unload the servlet mapping and destroy the servlet, and then, ask for serialization. I'm not sure it's a wiket bug, tell me if i have to report it against tomcat.
> Here is the trace of the destroy :
> Thread [main] (Suspended (breakpoint at line 357 in PersistentPageManager))	
> 	PersistentPageManager.destroy() line: 357	
> 	PageAccessSynchronizer$1(PageManagerDecorator).destroy() line: 86	
> 	LibellexApplication(Application).internalDestroy() line: 658	
> 	LibellexApplication(WebApplication).internalDestroy() line: 470	
> 	WicketFilter.destroy() line: 456	
> 	ApplicationFilterConfig.release() line: 357	
> 	StandardContext.filterStop() line: 4106	
> 	StandardContext.stop() line: 4869	
> 	StandardHost(ContainerBase).stop() line: 1106	
> 	StandardEngine(ContainerBase).stop() line: 1106	
> 	StandardEngine.stop() line: 468	
> 	StandardService.stop() line: 604	
> 	StandardServer.stop() line: 788	
> 	Catalina.stop() line: 662	
> 	Catalina.start() line: 629	
> 	NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
> 	NativeMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	Method.invoke(Object, Object...) line: not available	
> 	Bootstrap.start() line: 289	
> 	Bootstrap.main(String[]) line: 414	
> And the trace requesting serialization :
> Thread [main] (Suspended (breakpoint at line 83 in PersistentPageManager$SessionEntry))	
> 	PersistentPageManager$SessionEntry.getPageStore() line: 83	
> 	PersistentPageManager$SessionEntry.writeObject(ObjectOutputStream) line: 197	
> 	NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
> 	NativeMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	Method.invoke(Object, Object...) line: not available	
> 	ObjectStreamClass.invokeWriteObject(Object, ObjectOutputStream) line: not available	
> 	ObjectOutputStream.writeSerialData(Object, ObjectStreamClass) line: not available	
> 	ObjectOutputStream.writeOrdinaryObject(Object, ObjectStreamClass, boolean) line: not available	
> 	ObjectOutputStream.writeObject0(Object, boolean) line: not available	
> 	ObjectOutputStream.writeObject(Object) line: not available	
> 	StandardSession.writeObject(ObjectOutputStream) line: 1561	
> 	StandardSession.writeObjectData(ObjectOutputStream) line: 1004	
> 	StandardManager.doUnload() line: 528	
> 	StandardManager.unload() line: 469	
> 	StandardManager.stop() line: 678	
> 	StandardContext.stop() line: 4875	
> 	StandardHost(ContainerBase).stop() line: 1106	
> 	StandardEngine(ContainerBase).stop() line: 1106	
> 	StandardEngine.stop() line: 468	
> 	StandardService.stop() line: 604	
> 	StandardServer.stop() line: 788	
> 	Catalina.stop() line: 662	
> 	Catalina.start() line: 629	
> 	NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
> 	NativeMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	Method.invoke(Object, Object...) line: not available	
> 	Bootstrap.start() line: 289	
> 	Bootstrap.main(String[]) line: 414	
> Well at this time, a simple dirty hack is to bypass destroy chain to avoid  removal of app from managers properties of class PersistentPageManager. But I would like to have a real clean solution.

-- 
This message is automatically generated by JIRA.
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

       

[jira] Resolved: (WICKET-3470) Can't write session to disk with tomcat : Servlet is destroyed before serialization

Posted by "Martin Grigorov (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/WICKET-3470?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Martin Grigorov resolved WICKET-3470.
-------------------------------------

       Resolution: Fixed
    Fix Version/s: 1.5-RC3
         Assignee: Martin Grigorov

Fixed with r1083061

> Can't write session to disk with tomcat : Servlet is destroyed before serialization
> -----------------------------------------------------------------------------------
>
>                 Key: WICKET-3470
>                 URL: https://issues.apache.org/jira/browse/WICKET-3470
>             Project: Wicket
>          Issue Type: Bug
>          Components: wicket-core
>    Affects Versions: 1.5-RC1
>         Environment: Windows 7 x64
> apache-tomcat-6.0.32-windows-x86
> (Running from Eclipse view, Faceted project)
>            Reporter: SegFault
>            Assignee: Martin Grigorov
>              Labels: persistent, session, storage, tomcat
>             Fix For: 1.5-RC3, 1.5.0
>
>   Original Estimate: 4h
>  Remaining Estimate: 4h
>
> Hi,
> When I stop my tomcat, I have the following error :
> GRAVE: Exception au déchargement des sessions vers le stockage persistant (persistent storage)
> java.lang.IllegalStateException: PageManager for application wicket not registered.
> 	at lm.lbx.application.PersistentPageManager$SessionEntry.getPageStore(PersistentPageManager.java:86)
> 	at lm.lbx.application.PersistentPageManager$SessionEntry.writeObject(PersistentPageManager.java:197)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
> 	at java.lang.reflect.Method.invoke(Unknown Source)
> 	at java.io.ObjectStreamClass.invokeWriteObject(Unknown Source)
> 	at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
> 	at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
> 	at java.io.ObjectOutputStream.writeObject0(Unknown Source)
> 	at java.io.ObjectOutputStream.writeObject(Unknown Source)
> 	at org.apache.catalina.session.StandardSession.writeObject(StandardSession.java:1561)
> 	at org.apache.catalina.session.StandardSession.writeObjectData(StandardSession.java:1004)
> 	at org.apache.catalina.session.StandardManager.doUnload(StandardManager.java:528)
> 	at org.apache.catalina.session.StandardManager.unload(StandardManager.java:469)
> 	at org.apache.catalina.session.StandardManager.stop(StandardManager.java:678)
> 	at org.apache.catalina.core.StandardContext.stop(StandardContext.java:4875)
> 	at org.apache.catalina.core.ContainerBase.stop(ContainerBase.java:1106)
> 	at org.apache.catalina.core.ContainerBase.stop(ContainerBase.java:1106)
> 	at org.apache.catalina.core.StandardEngine.stop(StandardEngine.java:468)
> 	at org.apache.catalina.core.StandardService.stop(StandardService.java:604)
> 	at org.apache.catalina.core.StandardServer.stop(StandardServer.java:788)
> 	at org.apache.catalina.startup.Catalina.stop(Catalina.java:662)
> 	at org.apache.catalina.startup.Catalina.start(Catalina.java:629)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
> 	at java.lang.reflect.Method.invoke(Unknown Source)
> 	at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
> 	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
> After a little digging, it's because tomcat first unload the servlet mapping and destroy the servlet, and then, ask for serialization. I'm not sure it's a wiket bug, tell me if i have to report it against tomcat.
> Here is the trace of the destroy :
> Thread [main] (Suspended (breakpoint at line 357 in PersistentPageManager))	
> 	PersistentPageManager.destroy() line: 357	
> 	PageAccessSynchronizer$1(PageManagerDecorator).destroy() line: 86	
> 	LibellexApplication(Application).internalDestroy() line: 658	
> 	LibellexApplication(WebApplication).internalDestroy() line: 470	
> 	WicketFilter.destroy() line: 456	
> 	ApplicationFilterConfig.release() line: 357	
> 	StandardContext.filterStop() line: 4106	
> 	StandardContext.stop() line: 4869	
> 	StandardHost(ContainerBase).stop() line: 1106	
> 	StandardEngine(ContainerBase).stop() line: 1106	
> 	StandardEngine.stop() line: 468	
> 	StandardService.stop() line: 604	
> 	StandardServer.stop() line: 788	
> 	Catalina.stop() line: 662	
> 	Catalina.start() line: 629	
> 	NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
> 	NativeMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	Method.invoke(Object, Object...) line: not available	
> 	Bootstrap.start() line: 289	
> 	Bootstrap.main(String[]) line: 414	
> And the trace requesting serialization :
> Thread [main] (Suspended (breakpoint at line 83 in PersistentPageManager$SessionEntry))	
> 	PersistentPageManager$SessionEntry.getPageStore() line: 83	
> 	PersistentPageManager$SessionEntry.writeObject(ObjectOutputStream) line: 197	
> 	NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
> 	NativeMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	Method.invoke(Object, Object...) line: not available	
> 	ObjectStreamClass.invokeWriteObject(Object, ObjectOutputStream) line: not available	
> 	ObjectOutputStream.writeSerialData(Object, ObjectStreamClass) line: not available	
> 	ObjectOutputStream.writeOrdinaryObject(Object, ObjectStreamClass, boolean) line: not available	
> 	ObjectOutputStream.writeObject0(Object, boolean) line: not available	
> 	ObjectOutputStream.writeObject(Object) line: not available	
> 	StandardSession.writeObject(ObjectOutputStream) line: 1561	
> 	StandardSession.writeObjectData(ObjectOutputStream) line: 1004	
> 	StandardManager.doUnload() line: 528	
> 	StandardManager.unload() line: 469	
> 	StandardManager.stop() line: 678	
> 	StandardContext.stop() line: 4875	
> 	StandardHost(ContainerBase).stop() line: 1106	
> 	StandardEngine(ContainerBase).stop() line: 1106	
> 	StandardEngine.stop() line: 468	
> 	StandardService.stop() line: 604	
> 	StandardServer.stop() line: 788	
> 	Catalina.stop() line: 662	
> 	Catalina.start() line: 629	
> 	NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
> 	NativeMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	Method.invoke(Object, Object...) line: not available	
> 	Bootstrap.start() line: 289	
> 	Bootstrap.main(String[]) line: 414	
> Well at this time, a simple dirty hack is to bypass destroy chain to avoid  removal of app from managers properties of class PersistentPageManager. But I would like to have a real clean solution.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

[jira] Commented: (WICKET-3470) Can't write session to disk with tomcat : Servlet is destroyed before serialization

Posted by "SegFault (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/WICKET-3470?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12999990#comment-12999990 ] 

SegFault commented on WICKET-3470:
----------------------------------

Thanks for reproduction case.

First, I don't know much about servlet api, no more about wicket init mechanism, so I might say stupid things.

To my mind, it's a good idea to map Wicket-App lifecyle to a Servlet lifecycle, not only at destroying time, but at loading time too, because there is no clue about when it will be instantiate, and this make wicket very "container implementation dependent". I can't think about concrete case by now to support this idea, but it make sense to me.

I don't see what is the problem with the need to add a <listener> for each app. There is no other way which maintain compatibility with Servlet2.5 ; wicket is just before a brand new release, good time to add this in migration guide, no ? 

" the only problem I see is that there is no one to clean the static org.apache.wicket.page.PersistentPageManager.managers" <= maybe a stupid question, but how does this behave in case of many context reloading (for example in developpement mode), is this cleaned up by container ? or this will end up with a PermGen space error ?

> Can't write session to disk with tomcat : Servlet is destroyed before serialization
> -----------------------------------------------------------------------------------
>
>                 Key: WICKET-3470
>                 URL: https://issues.apache.org/jira/browse/WICKET-3470
>             Project: Wicket
>          Issue Type: Bug
>          Components: wicket-core
>    Affects Versions: 1.5-RC1
>         Environment: Windows 7 x64
> apache-tomcat-6.0.32-windows-x86
> (Running from Eclipse view, Faceted project)
>            Reporter: SegFault
>              Labels: persistent, session, storage, tomcat
>   Original Estimate: 4h
>  Remaining Estimate: 4h
>
> Hi,
> When I stop my tomcat, I have the following error :
> GRAVE: Exception au déchargement des sessions vers le stockage persistant (persistent storage)
> java.lang.IllegalStateException: PageManager for application wicket not registered.
> 	at lm.lbx.application.PersistentPageManager$SessionEntry.getPageStore(PersistentPageManager.java:86)
> 	at lm.lbx.application.PersistentPageManager$SessionEntry.writeObject(PersistentPageManager.java:197)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
> 	at java.lang.reflect.Method.invoke(Unknown Source)
> 	at java.io.ObjectStreamClass.invokeWriteObject(Unknown Source)
> 	at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
> 	at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
> 	at java.io.ObjectOutputStream.writeObject0(Unknown Source)
> 	at java.io.ObjectOutputStream.writeObject(Unknown Source)
> 	at org.apache.catalina.session.StandardSession.writeObject(StandardSession.java:1561)
> 	at org.apache.catalina.session.StandardSession.writeObjectData(StandardSession.java:1004)
> 	at org.apache.catalina.session.StandardManager.doUnload(StandardManager.java:528)
> 	at org.apache.catalina.session.StandardManager.unload(StandardManager.java:469)
> 	at org.apache.catalina.session.StandardManager.stop(StandardManager.java:678)
> 	at org.apache.catalina.core.StandardContext.stop(StandardContext.java:4875)
> 	at org.apache.catalina.core.ContainerBase.stop(ContainerBase.java:1106)
> 	at org.apache.catalina.core.ContainerBase.stop(ContainerBase.java:1106)
> 	at org.apache.catalina.core.StandardEngine.stop(StandardEngine.java:468)
> 	at org.apache.catalina.core.StandardService.stop(StandardService.java:604)
> 	at org.apache.catalina.core.StandardServer.stop(StandardServer.java:788)
> 	at org.apache.catalina.startup.Catalina.stop(Catalina.java:662)
> 	at org.apache.catalina.startup.Catalina.start(Catalina.java:629)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
> 	at java.lang.reflect.Method.invoke(Unknown Source)
> 	at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
> 	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
> After a little digging, it's because tomcat first unload the servlet mapping and destroy the servlet, and then, ask for serialization. I'm not sure it's a wiket bug, tell me if i have to report it against tomcat.
> Here is the trace of the destroy :
> Thread [main] (Suspended (breakpoint at line 357 in PersistentPageManager))	
> 	PersistentPageManager.destroy() line: 357	
> 	PageAccessSynchronizer$1(PageManagerDecorator).destroy() line: 86	
> 	LibellexApplication(Application).internalDestroy() line: 658	
> 	LibellexApplication(WebApplication).internalDestroy() line: 470	
> 	WicketFilter.destroy() line: 456	
> 	ApplicationFilterConfig.release() line: 357	
> 	StandardContext.filterStop() line: 4106	
> 	StandardContext.stop() line: 4869	
> 	StandardHost(ContainerBase).stop() line: 1106	
> 	StandardEngine(ContainerBase).stop() line: 1106	
> 	StandardEngine.stop() line: 468	
> 	StandardService.stop() line: 604	
> 	StandardServer.stop() line: 788	
> 	Catalina.stop() line: 662	
> 	Catalina.start() line: 629	
> 	NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
> 	NativeMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	Method.invoke(Object, Object...) line: not available	
> 	Bootstrap.start() line: 289	
> 	Bootstrap.main(String[]) line: 414	
> And the trace requesting serialization :
> Thread [main] (Suspended (breakpoint at line 83 in PersistentPageManager$SessionEntry))	
> 	PersistentPageManager$SessionEntry.getPageStore() line: 83	
> 	PersistentPageManager$SessionEntry.writeObject(ObjectOutputStream) line: 197	
> 	NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
> 	NativeMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	Method.invoke(Object, Object...) line: not available	
> 	ObjectStreamClass.invokeWriteObject(Object, ObjectOutputStream) line: not available	
> 	ObjectOutputStream.writeSerialData(Object, ObjectStreamClass) line: not available	
> 	ObjectOutputStream.writeOrdinaryObject(Object, ObjectStreamClass, boolean) line: not available	
> 	ObjectOutputStream.writeObject0(Object, boolean) line: not available	
> 	ObjectOutputStream.writeObject(Object) line: not available	
> 	StandardSession.writeObject(ObjectOutputStream) line: 1561	
> 	StandardSession.writeObjectData(ObjectOutputStream) line: 1004	
> 	StandardManager.doUnload() line: 528	
> 	StandardManager.unload() line: 469	
> 	StandardManager.stop() line: 678	
> 	StandardContext.stop() line: 4875	
> 	StandardHost(ContainerBase).stop() line: 1106	
> 	StandardEngine(ContainerBase).stop() line: 1106	
> 	StandardEngine.stop() line: 468	
> 	StandardService.stop() line: 604	
> 	StandardServer.stop() line: 788	
> 	Catalina.stop() line: 662	
> 	Catalina.start() line: 629	
> 	NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
> 	NativeMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	Method.invoke(Object, Object...) line: not available	
> 	Bootstrap.start() line: 289	
> 	Bootstrap.main(String[]) line: 414	
> Well at this time, a simple dirty hack is to bypass destroy chain to avoid  removal of app from managers properties of class PersistentPageManager. But I would like to have a real clean solution.

-- 
This message is automatically generated by JIRA.
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

       

[jira] Commented: (WICKET-3470) Can't write session to disk with tomcat : Servlet is destroyed before serialization

Posted by "Andera Del Bene (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/WICKET-3470?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12999322#comment-12999322 ] 

Andera Del Bene commented on WICKET-3470:
-----------------------------------------

I've got the same problem after migrating my project from Wicket 1.4.x to 1.5. rc2. When tomcat restart inside Eclipse I get ": PageManager for application wicket not registered. ".
My dev. environment is: Eclispe 3.6, tomcat 6.0.32 on Ubuntu 10.04 64 bit.

> Can't write session to disk with tomcat : Servlet is destroyed before serialization
> -----------------------------------------------------------------------------------
>
>                 Key: WICKET-3470
>                 URL: https://issues.apache.org/jira/browse/WICKET-3470
>             Project: Wicket
>          Issue Type: Bug
>          Components: wicket
>    Affects Versions: 1.5-RC1
>         Environment: Windows 7 x64
> apache-tomcat-6.0.32-windows-x86
> (Running from Eclipse view, Faceted project)
>            Reporter: SegFault
>              Labels: persistent, session, storage, tomcat
>   Original Estimate: 4h
>  Remaining Estimate: 4h
>
> Hi,
> When I stop my tomcat, I have the following error :
> GRAVE: Exception au déchargement des sessions vers le stockage persistant (persistent storage)
> java.lang.IllegalStateException: PageManager for application wicket not registered.
> 	at lm.lbx.application.PersistentPageManager$SessionEntry.getPageStore(PersistentPageManager.java:86)
> 	at lm.lbx.application.PersistentPageManager$SessionEntry.writeObject(PersistentPageManager.java:197)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
> 	at java.lang.reflect.Method.invoke(Unknown Source)
> 	at java.io.ObjectStreamClass.invokeWriteObject(Unknown Source)
> 	at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
> 	at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
> 	at java.io.ObjectOutputStream.writeObject0(Unknown Source)
> 	at java.io.ObjectOutputStream.writeObject(Unknown Source)
> 	at org.apache.catalina.session.StandardSession.writeObject(StandardSession.java:1561)
> 	at org.apache.catalina.session.StandardSession.writeObjectData(StandardSession.java:1004)
> 	at org.apache.catalina.session.StandardManager.doUnload(StandardManager.java:528)
> 	at org.apache.catalina.session.StandardManager.unload(StandardManager.java:469)
> 	at org.apache.catalina.session.StandardManager.stop(StandardManager.java:678)
> 	at org.apache.catalina.core.StandardContext.stop(StandardContext.java:4875)
> 	at org.apache.catalina.core.ContainerBase.stop(ContainerBase.java:1106)
> 	at org.apache.catalina.core.ContainerBase.stop(ContainerBase.java:1106)
> 	at org.apache.catalina.core.StandardEngine.stop(StandardEngine.java:468)
> 	at org.apache.catalina.core.StandardService.stop(StandardService.java:604)
> 	at org.apache.catalina.core.StandardServer.stop(StandardServer.java:788)
> 	at org.apache.catalina.startup.Catalina.stop(Catalina.java:662)
> 	at org.apache.catalina.startup.Catalina.start(Catalina.java:629)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
> 	at java.lang.reflect.Method.invoke(Unknown Source)
> 	at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
> 	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
> After a little digging, it's because tomcat first unload the servlet mapping and destroy the servlet, and then, ask for serialization. I'm not sure it's a wiket bug, tell me if i have to report it against tomcat.
> Here is the trace of the destroy :
> Thread [main] (Suspended (breakpoint at line 357 in PersistentPageManager))	
> 	PersistentPageManager.destroy() line: 357	
> 	PageAccessSynchronizer$1(PageManagerDecorator).destroy() line: 86	
> 	LibellexApplication(Application).internalDestroy() line: 658	
> 	LibellexApplication(WebApplication).internalDestroy() line: 470	
> 	WicketFilter.destroy() line: 456	
> 	ApplicationFilterConfig.release() line: 357	
> 	StandardContext.filterStop() line: 4106	
> 	StandardContext.stop() line: 4869	
> 	StandardHost(ContainerBase).stop() line: 1106	
> 	StandardEngine(ContainerBase).stop() line: 1106	
> 	StandardEngine.stop() line: 468	
> 	StandardService.stop() line: 604	
> 	StandardServer.stop() line: 788	
> 	Catalina.stop() line: 662	
> 	Catalina.start() line: 629	
> 	NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
> 	NativeMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	Method.invoke(Object, Object...) line: not available	
> 	Bootstrap.start() line: 289	
> 	Bootstrap.main(String[]) line: 414	
> And the trace requesting serialization :
> Thread [main] (Suspended (breakpoint at line 83 in PersistentPageManager$SessionEntry))	
> 	PersistentPageManager$SessionEntry.getPageStore() line: 83	
> 	PersistentPageManager$SessionEntry.writeObject(ObjectOutputStream) line: 197	
> 	NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
> 	NativeMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	Method.invoke(Object, Object...) line: not available	
> 	ObjectStreamClass.invokeWriteObject(Object, ObjectOutputStream) line: not available	
> 	ObjectOutputStream.writeSerialData(Object, ObjectStreamClass) line: not available	
> 	ObjectOutputStream.writeOrdinaryObject(Object, ObjectStreamClass, boolean) line: not available	
> 	ObjectOutputStream.writeObject0(Object, boolean) line: not available	
> 	ObjectOutputStream.writeObject(Object) line: not available	
> 	StandardSession.writeObject(ObjectOutputStream) line: 1561	
> 	StandardSession.writeObjectData(ObjectOutputStream) line: 1004	
> 	StandardManager.doUnload() line: 528	
> 	StandardManager.unload() line: 469	
> 	StandardManager.stop() line: 678	
> 	StandardContext.stop() line: 4875	
> 	StandardHost(ContainerBase).stop() line: 1106	
> 	StandardEngine(ContainerBase).stop() line: 1106	
> 	StandardEngine.stop() line: 468	
> 	StandardService.stop() line: 604	
> 	StandardServer.stop() line: 788	
> 	Catalina.stop() line: 662	
> 	Catalina.start() line: 629	
> 	NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
> 	NativeMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	Method.invoke(Object, Object...) line: not available	
> 	Bootstrap.start() line: 289	
> 	Bootstrap.main(String[]) line: 414	
> Well at this time, a simple dirty hack is to bypass destroy chain to avoid  removal of app from managers properties of class PersistentPageManager. But I would like to have a real clean solution.

-- 
This message is automatically generated by JIRA.
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

       

[jira] Updated: (WICKET-3470) Can't write session to disk with tomcat : Servlet is destroyed before serialization

Posted by "Martin Grigorov (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/WICKET-3470?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Martin Grigorov updated WICKET-3470:
------------------------------------

    Fix Version/s: 1.5.0

Set "Fix Version" to 1.5.0 because we need to solve that before releasing 1.5 final.

> Can't write session to disk with tomcat : Servlet is destroyed before serialization
> -----------------------------------------------------------------------------------
>
>                 Key: WICKET-3470
>                 URL: https://issues.apache.org/jira/browse/WICKET-3470
>             Project: Wicket
>          Issue Type: Bug
>          Components: wicket-core
>    Affects Versions: 1.5-RC1
>         Environment: Windows 7 x64
> apache-tomcat-6.0.32-windows-x86
> (Running from Eclipse view, Faceted project)
>            Reporter: SegFault
>              Labels: persistent, session, storage, tomcat
>             Fix For: 1.5.0
>
>   Original Estimate: 4h
>  Remaining Estimate: 4h
>
> Hi,
> When I stop my tomcat, I have the following error :
> GRAVE: Exception au déchargement des sessions vers le stockage persistant (persistent storage)
> java.lang.IllegalStateException: PageManager for application wicket not registered.
> 	at lm.lbx.application.PersistentPageManager$SessionEntry.getPageStore(PersistentPageManager.java:86)
> 	at lm.lbx.application.PersistentPageManager$SessionEntry.writeObject(PersistentPageManager.java:197)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
> 	at java.lang.reflect.Method.invoke(Unknown Source)
> 	at java.io.ObjectStreamClass.invokeWriteObject(Unknown Source)
> 	at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
> 	at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
> 	at java.io.ObjectOutputStream.writeObject0(Unknown Source)
> 	at java.io.ObjectOutputStream.writeObject(Unknown Source)
> 	at org.apache.catalina.session.StandardSession.writeObject(StandardSession.java:1561)
> 	at org.apache.catalina.session.StandardSession.writeObjectData(StandardSession.java:1004)
> 	at org.apache.catalina.session.StandardManager.doUnload(StandardManager.java:528)
> 	at org.apache.catalina.session.StandardManager.unload(StandardManager.java:469)
> 	at org.apache.catalina.session.StandardManager.stop(StandardManager.java:678)
> 	at org.apache.catalina.core.StandardContext.stop(StandardContext.java:4875)
> 	at org.apache.catalina.core.ContainerBase.stop(ContainerBase.java:1106)
> 	at org.apache.catalina.core.ContainerBase.stop(ContainerBase.java:1106)
> 	at org.apache.catalina.core.StandardEngine.stop(StandardEngine.java:468)
> 	at org.apache.catalina.core.StandardService.stop(StandardService.java:604)
> 	at org.apache.catalina.core.StandardServer.stop(StandardServer.java:788)
> 	at org.apache.catalina.startup.Catalina.stop(Catalina.java:662)
> 	at org.apache.catalina.startup.Catalina.start(Catalina.java:629)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
> 	at java.lang.reflect.Method.invoke(Unknown Source)
> 	at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
> 	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
> After a little digging, it's because tomcat first unload the servlet mapping and destroy the servlet, and then, ask for serialization. I'm not sure it's a wiket bug, tell me if i have to report it against tomcat.
> Here is the trace of the destroy :
> Thread [main] (Suspended (breakpoint at line 357 in PersistentPageManager))	
> 	PersistentPageManager.destroy() line: 357	
> 	PageAccessSynchronizer$1(PageManagerDecorator).destroy() line: 86	
> 	LibellexApplication(Application).internalDestroy() line: 658	
> 	LibellexApplication(WebApplication).internalDestroy() line: 470	
> 	WicketFilter.destroy() line: 456	
> 	ApplicationFilterConfig.release() line: 357	
> 	StandardContext.filterStop() line: 4106	
> 	StandardContext.stop() line: 4869	
> 	StandardHost(ContainerBase).stop() line: 1106	
> 	StandardEngine(ContainerBase).stop() line: 1106	
> 	StandardEngine.stop() line: 468	
> 	StandardService.stop() line: 604	
> 	StandardServer.stop() line: 788	
> 	Catalina.stop() line: 662	
> 	Catalina.start() line: 629	
> 	NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
> 	NativeMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	Method.invoke(Object, Object...) line: not available	
> 	Bootstrap.start() line: 289	
> 	Bootstrap.main(String[]) line: 414	
> And the trace requesting serialization :
> Thread [main] (Suspended (breakpoint at line 83 in PersistentPageManager$SessionEntry))	
> 	PersistentPageManager$SessionEntry.getPageStore() line: 83	
> 	PersistentPageManager$SessionEntry.writeObject(ObjectOutputStream) line: 197	
> 	NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
> 	NativeMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	Method.invoke(Object, Object...) line: not available	
> 	ObjectStreamClass.invokeWriteObject(Object, ObjectOutputStream) line: not available	
> 	ObjectOutputStream.writeSerialData(Object, ObjectStreamClass) line: not available	
> 	ObjectOutputStream.writeOrdinaryObject(Object, ObjectStreamClass, boolean) line: not available	
> 	ObjectOutputStream.writeObject0(Object, boolean) line: not available	
> 	ObjectOutputStream.writeObject(Object) line: not available	
> 	StandardSession.writeObject(ObjectOutputStream) line: 1561	
> 	StandardSession.writeObjectData(ObjectOutputStream) line: 1004	
> 	StandardManager.doUnload() line: 528	
> 	StandardManager.unload() line: 469	
> 	StandardManager.stop() line: 678	
> 	StandardContext.stop() line: 4875	
> 	StandardHost(ContainerBase).stop() line: 1106	
> 	StandardEngine(ContainerBase).stop() line: 1106	
> 	StandardEngine.stop() line: 468	
> 	StandardService.stop() line: 604	
> 	StandardServer.stop() line: 788	
> 	Catalina.stop() line: 662	
> 	Catalina.start() line: 629	
> 	NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
> 	NativeMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	Method.invoke(Object, Object...) line: not available	
> 	Bootstrap.start() line: 289	
> 	Bootstrap.main(String[]) line: 414	
> Well at this time, a simple dirty hack is to bypass destroy chain to avoid  removal of app from managers properties of class PersistentPageManager. But I would like to have a real clean solution.

-- 
This message is automatically generated by JIRA.
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

       

[jira] [Updated] (WICKET-3470) Can't write session to disk with tomcat : Servlet is destroyed before serialization

Posted by "Martin Grigorov (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/WICKET-3470?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Martin Grigorov updated WICKET-3470:
------------------------------------

    Fix Version/s:     (was: 1.5.0)

> Can't write session to disk with tomcat : Servlet is destroyed before serialization
> -----------------------------------------------------------------------------------
>
>                 Key: WICKET-3470
>                 URL: https://issues.apache.org/jira/browse/WICKET-3470
>             Project: Wicket
>          Issue Type: Bug
>          Components: wicket-core
>    Affects Versions: 1.5-RC1
>         Environment: Windows 7 x64
> apache-tomcat-6.0.32-windows-x86
> (Running from Eclipse view, Faceted project)
>            Reporter: SegFault
>            Assignee: Martin Grigorov
>              Labels: persistent, session, storage, tomcat
>             Fix For: 1.5-RC3
>
>   Original Estimate: 4h
>  Remaining Estimate: 4h
>
> Hi,
> When I stop my tomcat, I have the following error :
> GRAVE: Exception au déchargement des sessions vers le stockage persistant (persistent storage)
> java.lang.IllegalStateException: PageManager for application wicket not registered.
> 	at lm.lbx.application.PersistentPageManager$SessionEntry.getPageStore(PersistentPageManager.java:86)
> 	at lm.lbx.application.PersistentPageManager$SessionEntry.writeObject(PersistentPageManager.java:197)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
> 	at java.lang.reflect.Method.invoke(Unknown Source)
> 	at java.io.ObjectStreamClass.invokeWriteObject(Unknown Source)
> 	at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
> 	at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
> 	at java.io.ObjectOutputStream.writeObject0(Unknown Source)
> 	at java.io.ObjectOutputStream.writeObject(Unknown Source)
> 	at org.apache.catalina.session.StandardSession.writeObject(StandardSession.java:1561)
> 	at org.apache.catalina.session.StandardSession.writeObjectData(StandardSession.java:1004)
> 	at org.apache.catalina.session.StandardManager.doUnload(StandardManager.java:528)
> 	at org.apache.catalina.session.StandardManager.unload(StandardManager.java:469)
> 	at org.apache.catalina.session.StandardManager.stop(StandardManager.java:678)
> 	at org.apache.catalina.core.StandardContext.stop(StandardContext.java:4875)
> 	at org.apache.catalina.core.ContainerBase.stop(ContainerBase.java:1106)
> 	at org.apache.catalina.core.ContainerBase.stop(ContainerBase.java:1106)
> 	at org.apache.catalina.core.StandardEngine.stop(StandardEngine.java:468)
> 	at org.apache.catalina.core.StandardService.stop(StandardService.java:604)
> 	at org.apache.catalina.core.StandardServer.stop(StandardServer.java:788)
> 	at org.apache.catalina.startup.Catalina.stop(Catalina.java:662)
> 	at org.apache.catalina.startup.Catalina.start(Catalina.java:629)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
> 	at java.lang.reflect.Method.invoke(Unknown Source)
> 	at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
> 	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
> After a little digging, it's because tomcat first unload the servlet mapping and destroy the servlet, and then, ask for serialization. I'm not sure it's a wiket bug, tell me if i have to report it against tomcat.
> Here is the trace of the destroy :
> Thread [main] (Suspended (breakpoint at line 357 in PersistentPageManager))	
> 	PersistentPageManager.destroy() line: 357	
> 	PageAccessSynchronizer$1(PageManagerDecorator).destroy() line: 86	
> 	LibellexApplication(Application).internalDestroy() line: 658	
> 	LibellexApplication(WebApplication).internalDestroy() line: 470	
> 	WicketFilter.destroy() line: 456	
> 	ApplicationFilterConfig.release() line: 357	
> 	StandardContext.filterStop() line: 4106	
> 	StandardContext.stop() line: 4869	
> 	StandardHost(ContainerBase).stop() line: 1106	
> 	StandardEngine(ContainerBase).stop() line: 1106	
> 	StandardEngine.stop() line: 468	
> 	StandardService.stop() line: 604	
> 	StandardServer.stop() line: 788	
> 	Catalina.stop() line: 662	
> 	Catalina.start() line: 629	
> 	NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
> 	NativeMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	Method.invoke(Object, Object...) line: not available	
> 	Bootstrap.start() line: 289	
> 	Bootstrap.main(String[]) line: 414	
> And the trace requesting serialization :
> Thread [main] (Suspended (breakpoint at line 83 in PersistentPageManager$SessionEntry))	
> 	PersistentPageManager$SessionEntry.getPageStore() line: 83	
> 	PersistentPageManager$SessionEntry.writeObject(ObjectOutputStream) line: 197	
> 	NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
> 	NativeMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	Method.invoke(Object, Object...) line: not available	
> 	ObjectStreamClass.invokeWriteObject(Object, ObjectOutputStream) line: not available	
> 	ObjectOutputStream.writeSerialData(Object, ObjectStreamClass) line: not available	
> 	ObjectOutputStream.writeOrdinaryObject(Object, ObjectStreamClass, boolean) line: not available	
> 	ObjectOutputStream.writeObject0(Object, boolean) line: not available	
> 	ObjectOutputStream.writeObject(Object) line: not available	
> 	StandardSession.writeObject(ObjectOutputStream) line: 1561	
> 	StandardSession.writeObjectData(ObjectOutputStream) line: 1004	
> 	StandardManager.doUnload() line: 528	
> 	StandardManager.unload() line: 469	
> 	StandardManager.stop() line: 678	
> 	StandardContext.stop() line: 4875	
> 	StandardHost(ContainerBase).stop() line: 1106	
> 	StandardEngine(ContainerBase).stop() line: 1106	
> 	StandardEngine.stop() line: 468	
> 	StandardService.stop() line: 604	
> 	StandardServer.stop() line: 788	
> 	Catalina.stop() line: 662	
> 	Catalina.start() line: 629	
> 	NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
> 	NativeMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	Method.invoke(Object, Object...) line: not available	
> 	Bootstrap.start() line: 289	
> 	Bootstrap.main(String[]) line: 414	
> Well at this time, a simple dirty hack is to bypass destroy chain to avoid  removal of app from managers properties of class PersistentPageManager. But I would like to have a real clean solution.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

[jira] Commented: (WICKET-3470) Can't write session to disk with tomcat : Servlet is destroyed before serialization

Posted by "Martin Grigorov (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/WICKET-3470?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13000359#comment-13000359 ] 

Martin Grigorov commented on WICKET-3470:
-----------------------------------------

See also http://apache-wicket.1842946.n4.nabble.com/Re-Null-pointer-exception-on-GAE-with-your-initializer-demo-td3328173.html for similar problem in GAE environment (Jetty 6.x).

> Can't write session to disk with tomcat : Servlet is destroyed before serialization
> -----------------------------------------------------------------------------------
>
>                 Key: WICKET-3470
>                 URL: https://issues.apache.org/jira/browse/WICKET-3470
>             Project: Wicket
>          Issue Type: Bug
>          Components: wicket-core
>    Affects Versions: 1.5-RC1
>         Environment: Windows 7 x64
> apache-tomcat-6.0.32-windows-x86
> (Running from Eclipse view, Faceted project)
>            Reporter: SegFault
>              Labels: persistent, session, storage, tomcat
>             Fix For: 1.5.0
>
>   Original Estimate: 4h
>  Remaining Estimate: 4h
>
> Hi,
> When I stop my tomcat, I have the following error :
> GRAVE: Exception au déchargement des sessions vers le stockage persistant (persistent storage)
> java.lang.IllegalStateException: PageManager for application wicket not registered.
> 	at lm.lbx.application.PersistentPageManager$SessionEntry.getPageStore(PersistentPageManager.java:86)
> 	at lm.lbx.application.PersistentPageManager$SessionEntry.writeObject(PersistentPageManager.java:197)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
> 	at java.lang.reflect.Method.invoke(Unknown Source)
> 	at java.io.ObjectStreamClass.invokeWriteObject(Unknown Source)
> 	at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
> 	at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
> 	at java.io.ObjectOutputStream.writeObject0(Unknown Source)
> 	at java.io.ObjectOutputStream.writeObject(Unknown Source)
> 	at org.apache.catalina.session.StandardSession.writeObject(StandardSession.java:1561)
> 	at org.apache.catalina.session.StandardSession.writeObjectData(StandardSession.java:1004)
> 	at org.apache.catalina.session.StandardManager.doUnload(StandardManager.java:528)
> 	at org.apache.catalina.session.StandardManager.unload(StandardManager.java:469)
> 	at org.apache.catalina.session.StandardManager.stop(StandardManager.java:678)
> 	at org.apache.catalina.core.StandardContext.stop(StandardContext.java:4875)
> 	at org.apache.catalina.core.ContainerBase.stop(ContainerBase.java:1106)
> 	at org.apache.catalina.core.ContainerBase.stop(ContainerBase.java:1106)
> 	at org.apache.catalina.core.StandardEngine.stop(StandardEngine.java:468)
> 	at org.apache.catalina.core.StandardService.stop(StandardService.java:604)
> 	at org.apache.catalina.core.StandardServer.stop(StandardServer.java:788)
> 	at org.apache.catalina.startup.Catalina.stop(Catalina.java:662)
> 	at org.apache.catalina.startup.Catalina.start(Catalina.java:629)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
> 	at java.lang.reflect.Method.invoke(Unknown Source)
> 	at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
> 	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
> After a little digging, it's because tomcat first unload the servlet mapping and destroy the servlet, and then, ask for serialization. I'm not sure it's a wiket bug, tell me if i have to report it against tomcat.
> Here is the trace of the destroy :
> Thread [main] (Suspended (breakpoint at line 357 in PersistentPageManager))	
> 	PersistentPageManager.destroy() line: 357	
> 	PageAccessSynchronizer$1(PageManagerDecorator).destroy() line: 86	
> 	LibellexApplication(Application).internalDestroy() line: 658	
> 	LibellexApplication(WebApplication).internalDestroy() line: 470	
> 	WicketFilter.destroy() line: 456	
> 	ApplicationFilterConfig.release() line: 357	
> 	StandardContext.filterStop() line: 4106	
> 	StandardContext.stop() line: 4869	
> 	StandardHost(ContainerBase).stop() line: 1106	
> 	StandardEngine(ContainerBase).stop() line: 1106	
> 	StandardEngine.stop() line: 468	
> 	StandardService.stop() line: 604	
> 	StandardServer.stop() line: 788	
> 	Catalina.stop() line: 662	
> 	Catalina.start() line: 629	
> 	NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
> 	NativeMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	Method.invoke(Object, Object...) line: not available	
> 	Bootstrap.start() line: 289	
> 	Bootstrap.main(String[]) line: 414	
> And the trace requesting serialization :
> Thread [main] (Suspended (breakpoint at line 83 in PersistentPageManager$SessionEntry))	
> 	PersistentPageManager$SessionEntry.getPageStore() line: 83	
> 	PersistentPageManager$SessionEntry.writeObject(ObjectOutputStream) line: 197	
> 	NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
> 	NativeMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	Method.invoke(Object, Object...) line: not available	
> 	ObjectStreamClass.invokeWriteObject(Object, ObjectOutputStream) line: not available	
> 	ObjectOutputStream.writeSerialData(Object, ObjectStreamClass) line: not available	
> 	ObjectOutputStream.writeOrdinaryObject(Object, ObjectStreamClass, boolean) line: not available	
> 	ObjectOutputStream.writeObject0(Object, boolean) line: not available	
> 	ObjectOutputStream.writeObject(Object) line: not available	
> 	StandardSession.writeObject(ObjectOutputStream) line: 1561	
> 	StandardSession.writeObjectData(ObjectOutputStream) line: 1004	
> 	StandardManager.doUnload() line: 528	
> 	StandardManager.unload() line: 469	
> 	StandardManager.stop() line: 678	
> 	StandardContext.stop() line: 4875	
> 	StandardHost(ContainerBase).stop() line: 1106	
> 	StandardEngine(ContainerBase).stop() line: 1106	
> 	StandardEngine.stop() line: 468	
> 	StandardService.stop() line: 604	
> 	StandardServer.stop() line: 788	
> 	Catalina.stop() line: 662	
> 	Catalina.start() line: 629	
> 	NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
> 	NativeMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	Method.invoke(Object, Object...) line: not available	
> 	Bootstrap.start() line: 289	
> 	Bootstrap.main(String[]) line: 414	
> Well at this time, a simple dirty hack is to bypass destroy chain to avoid  removal of app from managers properties of class PersistentPageManager. But I would like to have a real clean solution.

-- 
This message is automatically generated by JIRA.
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

       

[jira] Commented: (WICKET-3470) Can't write session to disk with tomcat : Servlet is destroyed before serialization

Posted by "Mark Thomas (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/WICKET-3470?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12998428#comment-12998428 ] 

Mark Thomas commented on WICKET-3470:
-------------------------------------

Re-reading this, I see the Tomcat bug referred to a Servlet whereas Wicket is actually using a Filter. That does change things since the the Servlet specification is less clear on the Filter lifecycle. However, having re-read the section SRV.6 of both the Servlet 2.5 and Servlet 3.0 specifications it appears that containers have a fair amount of leeway in how they initialise and destroy filters. For example, from reading the spec it appears to be specification compliant (although performance would be truly awful) to create and destroy filters per request.

Since the specification offers no guidance on the correct ordering then I am not inclined to change the order for the benefit of a single application. There may well be other applications that depend on the current ordering. Regardless of what applications exist or don't exist that depend on a particular order, if the specification does not define an order then an application should not depend on an order.

I think Wicket would be better off using a ServletContextListener. From section 11.3.4 of the Servlet 3.0. spec "On application shutdown, listeners are notified in reverse order to their declarations with notifications to session listeners preceding notifications to context listeners. Session listeners must be notified of session invalidations prior to context listeners being notified of application shutdown.". That should ensure the ordering that Wicket requires.

> Can't write session to disk with tomcat : Servlet is destroyed before serialization
> -----------------------------------------------------------------------------------
>
>                 Key: WICKET-3470
>                 URL: https://issues.apache.org/jira/browse/WICKET-3470
>             Project: Wicket
>          Issue Type: Bug
>          Components: wicket
>    Affects Versions: 1.5-RC1
>         Environment: Windows 7 x64
> apache-tomcat-6.0.32-windows-x86
> (Running from Eclipse view, Faceted project)
>            Reporter: SegFault
>              Labels: persistent, session, storage, tomcat
>   Original Estimate: 4h
>  Remaining Estimate: 4h
>
> Hi,
> When I stop my tomcat, I have the following error :
> GRAVE: Exception au déchargement des sessions vers le stockage persistant (persistent storage)
> java.lang.IllegalStateException: PageManager for application wicket not registered.
> 	at lm.lbx.application.PersistentPageManager$SessionEntry.getPageStore(PersistentPageManager.java:86)
> 	at lm.lbx.application.PersistentPageManager$SessionEntry.writeObject(PersistentPageManager.java:197)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
> 	at java.lang.reflect.Method.invoke(Unknown Source)
> 	at java.io.ObjectStreamClass.invokeWriteObject(Unknown Source)
> 	at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
> 	at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
> 	at java.io.ObjectOutputStream.writeObject0(Unknown Source)
> 	at java.io.ObjectOutputStream.writeObject(Unknown Source)
> 	at org.apache.catalina.session.StandardSession.writeObject(StandardSession.java:1561)
> 	at org.apache.catalina.session.StandardSession.writeObjectData(StandardSession.java:1004)
> 	at org.apache.catalina.session.StandardManager.doUnload(StandardManager.java:528)
> 	at org.apache.catalina.session.StandardManager.unload(StandardManager.java:469)
> 	at org.apache.catalina.session.StandardManager.stop(StandardManager.java:678)
> 	at org.apache.catalina.core.StandardContext.stop(StandardContext.java:4875)
> 	at org.apache.catalina.core.ContainerBase.stop(ContainerBase.java:1106)
> 	at org.apache.catalina.core.ContainerBase.stop(ContainerBase.java:1106)
> 	at org.apache.catalina.core.StandardEngine.stop(StandardEngine.java:468)
> 	at org.apache.catalina.core.StandardService.stop(StandardService.java:604)
> 	at org.apache.catalina.core.StandardServer.stop(StandardServer.java:788)
> 	at org.apache.catalina.startup.Catalina.stop(Catalina.java:662)
> 	at org.apache.catalina.startup.Catalina.start(Catalina.java:629)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
> 	at java.lang.reflect.Method.invoke(Unknown Source)
> 	at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
> 	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
> After a little digging, it's because tomcat first unload the servlet mapping and destroy the servlet, and then, ask for serialization. I'm not sure it's a wiket bug, tell me if i have to report it against tomcat.
> Here is the trace of the destroy :
> Thread [main] (Suspended (breakpoint at line 357 in PersistentPageManager))	
> 	PersistentPageManager.destroy() line: 357	
> 	PageAccessSynchronizer$1(PageManagerDecorator).destroy() line: 86	
> 	LibellexApplication(Application).internalDestroy() line: 658	
> 	LibellexApplication(WebApplication).internalDestroy() line: 470	
> 	WicketFilter.destroy() line: 456	
> 	ApplicationFilterConfig.release() line: 357	
> 	StandardContext.filterStop() line: 4106	
> 	StandardContext.stop() line: 4869	
> 	StandardHost(ContainerBase).stop() line: 1106	
> 	StandardEngine(ContainerBase).stop() line: 1106	
> 	StandardEngine.stop() line: 468	
> 	StandardService.stop() line: 604	
> 	StandardServer.stop() line: 788	
> 	Catalina.stop() line: 662	
> 	Catalina.start() line: 629	
> 	NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
> 	NativeMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	Method.invoke(Object, Object...) line: not available	
> 	Bootstrap.start() line: 289	
> 	Bootstrap.main(String[]) line: 414	
> And the trace requesting serialization :
> Thread [main] (Suspended (breakpoint at line 83 in PersistentPageManager$SessionEntry))	
> 	PersistentPageManager$SessionEntry.getPageStore() line: 83	
> 	PersistentPageManager$SessionEntry.writeObject(ObjectOutputStream) line: 197	
> 	NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
> 	NativeMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	Method.invoke(Object, Object...) line: not available	
> 	ObjectStreamClass.invokeWriteObject(Object, ObjectOutputStream) line: not available	
> 	ObjectOutputStream.writeSerialData(Object, ObjectStreamClass) line: not available	
> 	ObjectOutputStream.writeOrdinaryObject(Object, ObjectStreamClass, boolean) line: not available	
> 	ObjectOutputStream.writeObject0(Object, boolean) line: not available	
> 	ObjectOutputStream.writeObject(Object) line: not available	
> 	StandardSession.writeObject(ObjectOutputStream) line: 1561	
> 	StandardSession.writeObjectData(ObjectOutputStream) line: 1004	
> 	StandardManager.doUnload() line: 528	
> 	StandardManager.unload() line: 469	
> 	StandardManager.stop() line: 678	
> 	StandardContext.stop() line: 4875	
> 	StandardHost(ContainerBase).stop() line: 1106	
> 	StandardEngine(ContainerBase).stop() line: 1106	
> 	StandardEngine.stop() line: 468	
> 	StandardService.stop() line: 604	
> 	StandardServer.stop() line: 788	
> 	Catalina.stop() line: 662	
> 	Catalina.start() line: 629	
> 	NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
> 	NativeMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	Method.invoke(Object, Object...) line: not available	
> 	Bootstrap.start() line: 289	
> 	Bootstrap.main(String[]) line: 414	
> Well at this time, a simple dirty hack is to bypass destroy chain to avoid  removal of app from managers properties of class PersistentPageManager. But I would like to have a real clean solution.

-- 
This message is automatically generated by JIRA.
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

       

[jira] Commented: (WICKET-3470) Can't write session to disk with tomcat : Servlet is destroyed before serialization

Posted by "Pedro Santos (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/WICKET-3470?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13008814#comment-13008814 ] 

Pedro Santos commented on WICKET-3470:
--------------------------------------

I'm working on a test case for this

> Can't write session to disk with tomcat : Servlet is destroyed before serialization
> -----------------------------------------------------------------------------------
>
>                 Key: WICKET-3470
>                 URL: https://issues.apache.org/jira/browse/WICKET-3470
>             Project: Wicket
>          Issue Type: Bug
>          Components: wicket-core
>    Affects Versions: 1.5-RC1
>         Environment: Windows 7 x64
> apache-tomcat-6.0.32-windows-x86
> (Running from Eclipse view, Faceted project)
>            Reporter: SegFault
>            Assignee: Martin Grigorov
>              Labels: persistent, session, storage, tomcat
>             Fix For: 1.5-RC3, 1.5.0
>
>   Original Estimate: 4h
>  Remaining Estimate: 4h
>
> Hi,
> When I stop my tomcat, I have the following error :
> GRAVE: Exception au déchargement des sessions vers le stockage persistant (persistent storage)
> java.lang.IllegalStateException: PageManager for application wicket not registered.
> 	at lm.lbx.application.PersistentPageManager$SessionEntry.getPageStore(PersistentPageManager.java:86)
> 	at lm.lbx.application.PersistentPageManager$SessionEntry.writeObject(PersistentPageManager.java:197)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
> 	at java.lang.reflect.Method.invoke(Unknown Source)
> 	at java.io.ObjectStreamClass.invokeWriteObject(Unknown Source)
> 	at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
> 	at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
> 	at java.io.ObjectOutputStream.writeObject0(Unknown Source)
> 	at java.io.ObjectOutputStream.writeObject(Unknown Source)
> 	at org.apache.catalina.session.StandardSession.writeObject(StandardSession.java:1561)
> 	at org.apache.catalina.session.StandardSession.writeObjectData(StandardSession.java:1004)
> 	at org.apache.catalina.session.StandardManager.doUnload(StandardManager.java:528)
> 	at org.apache.catalina.session.StandardManager.unload(StandardManager.java:469)
> 	at org.apache.catalina.session.StandardManager.stop(StandardManager.java:678)
> 	at org.apache.catalina.core.StandardContext.stop(StandardContext.java:4875)
> 	at org.apache.catalina.core.ContainerBase.stop(ContainerBase.java:1106)
> 	at org.apache.catalina.core.ContainerBase.stop(ContainerBase.java:1106)
> 	at org.apache.catalina.core.StandardEngine.stop(StandardEngine.java:468)
> 	at org.apache.catalina.core.StandardService.stop(StandardService.java:604)
> 	at org.apache.catalina.core.StandardServer.stop(StandardServer.java:788)
> 	at org.apache.catalina.startup.Catalina.stop(Catalina.java:662)
> 	at org.apache.catalina.startup.Catalina.start(Catalina.java:629)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
> 	at java.lang.reflect.Method.invoke(Unknown Source)
> 	at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
> 	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
> After a little digging, it's because tomcat first unload the servlet mapping and destroy the servlet, and then, ask for serialization. I'm not sure it's a wiket bug, tell me if i have to report it against tomcat.
> Here is the trace of the destroy :
> Thread [main] (Suspended (breakpoint at line 357 in PersistentPageManager))	
> 	PersistentPageManager.destroy() line: 357	
> 	PageAccessSynchronizer$1(PageManagerDecorator).destroy() line: 86	
> 	LibellexApplication(Application).internalDestroy() line: 658	
> 	LibellexApplication(WebApplication).internalDestroy() line: 470	
> 	WicketFilter.destroy() line: 456	
> 	ApplicationFilterConfig.release() line: 357	
> 	StandardContext.filterStop() line: 4106	
> 	StandardContext.stop() line: 4869	
> 	StandardHost(ContainerBase).stop() line: 1106	
> 	StandardEngine(ContainerBase).stop() line: 1106	
> 	StandardEngine.stop() line: 468	
> 	StandardService.stop() line: 604	
> 	StandardServer.stop() line: 788	
> 	Catalina.stop() line: 662	
> 	Catalina.start() line: 629	
> 	NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
> 	NativeMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	Method.invoke(Object, Object...) line: not available	
> 	Bootstrap.start() line: 289	
> 	Bootstrap.main(String[]) line: 414	
> And the trace requesting serialization :
> Thread [main] (Suspended (breakpoint at line 83 in PersistentPageManager$SessionEntry))	
> 	PersistentPageManager$SessionEntry.getPageStore() line: 83	
> 	PersistentPageManager$SessionEntry.writeObject(ObjectOutputStream) line: 197	
> 	NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
> 	NativeMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	Method.invoke(Object, Object...) line: not available	
> 	ObjectStreamClass.invokeWriteObject(Object, ObjectOutputStream) line: not available	
> 	ObjectOutputStream.writeSerialData(Object, ObjectStreamClass) line: not available	
> 	ObjectOutputStream.writeOrdinaryObject(Object, ObjectStreamClass, boolean) line: not available	
> 	ObjectOutputStream.writeObject0(Object, boolean) line: not available	
> 	ObjectOutputStream.writeObject(Object) line: not available	
> 	StandardSession.writeObject(ObjectOutputStream) line: 1561	
> 	StandardSession.writeObjectData(ObjectOutputStream) line: 1004	
> 	StandardManager.doUnload() line: 528	
> 	StandardManager.unload() line: 469	
> 	StandardManager.stop() line: 678	
> 	StandardContext.stop() line: 4875	
> 	StandardHost(ContainerBase).stop() line: 1106	
> 	StandardEngine(ContainerBase).stop() line: 1106	
> 	StandardEngine.stop() line: 468	
> 	StandardService.stop() line: 604	
> 	StandardServer.stop() line: 788	
> 	Catalina.stop() line: 662	
> 	Catalina.start() line: 629	
> 	NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
> 	NativeMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: not available	
> 	Method.invoke(Object, Object...) line: not available	
> 	Bootstrap.start() line: 289	
> 	Bootstrap.main(String[]) line: 414	
> Well at this time, a simple dirty hack is to bypass destroy chain to avoid  removal of app from managers properties of class PersistentPageManager. But I would like to have a real clean solution.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira