You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@myfaces.apache.org by "Mark Fagnani (JIRA)" <de...@myfaces.apache.org> on 2009/05/13 19:27:45 UTC

[jira] Commented: (ORCHESTRA-32) Hot-restart of Tomcat causes NullPointerException while deserializing saved http-session

    [ https://issues.apache.org/jira/browse/ORCHESTRA-32?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12709018#action_12709018 ] 

Mark Fagnani commented on ORCHESTRA-32:
---------------------------------------

This issue needs to be reopened as the following change causes session deserialization failure. The threadlocal used by the framework adaptor is set via by a servlet mechanism and is therefore null on deserialization (see stack trace below). Thanks.

--- myfaces/orchestra/trunk/core/src/main/java/org/apache/myfaces/orchestra/conversation/ConversationManager.java	2009/02/22 12:53:01	746665
+++ myfaces/orchestra/trunk/core/src/main/java/org/apache/myfaces/orchestra/conversation/ConversationManager.java	2009/02/22 14:27:05	746708
@@ -19,13 +19,6 @@
 
 package org.apache.myfaces.orchestra.conversation;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.myfaces.orchestra.FactoryFinder;
-import org.apache.myfaces.orchestra.frameworkAdapter.FrameworkAdapter;
-import org.apache.myfaces.orchestra.lib.OrchestraException;
-import org.apache.myfaces.orchestra.requestParameterProvider.RequestParameterProviderManager;
-
 import java.io.IOException;
 import java.io.ObjectStreamException;
 import java.io.Serializable;
@@ -34,6 +27,13 @@
 import java.util.Iterator;
 import java.util.Map;
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.myfaces.orchestra.FactoryFinder;
+import org.apache.myfaces.orchestra.frameworkAdapter.FrameworkAdapter;
+import org.apache.myfaces.orchestra.lib.OrchestraException;
+import org.apache.myfaces.orchestra.requestParameterProvider.RequestParameterProviderManager;
+
 /**
  * Deals with the various conversation contexts in the current session.
  * <p>
@@ -125,9 +125,7 @@
                 CONVERSATION_MANAGER_KEY);
         if (conversationManager == null && create)
         {
-            // TODO: do not call new directly here, as it makes it impossible to configure
-            // an alternative ConversationManager instance. This is IOC and test unfriendly.
-            conversationManager = new ConversationManager();
+            conversationManager = FactoryFinder.getConversationManagerFactory().createConversationManager();
 
             // initialize environmental systems
             RequestParameterProviderManager.getInstance().register(new ConversationRequestParameterProvider());
@@ -659,6 +657,6 @@
         // not permitted within an HttpSession; calling HttpSession.setAttribute(name, null) is defined as
         // removing the attribute. So returning null here when deserializing an object from the session
         // can cause problems.
-        return new ConversationManager();
+        return FactoryFinder.getConversationManagerFactory().createConversationManager();
     }
 }

ERROR Thread-1 org.apache.catalina.session.ManagerBase - Exception loading sessions from persistent storage
java.lang.NullPointerException
	at org.apache.myfaces.orchestra.FactoryFinder.getConversationManagerFactory(FactoryFinder.java:66)
	at org.apache.myfaces.orchestra.conversation.ConversationManager.readResolve(ConversationManager.java:660)
	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.invokeReadResolve(Unknown Source)
	at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
	at java.io.ObjectInputStream.readObject0(Unknown Source)
	at java.io.ObjectInputStream.readObject(Unknown Source)
	at org.apache.catalina.session.StandardSession.readObject(StandardSession.java:1441)
	at org.apache.catalina.session.StandardSession.readObjectData(StandardSession.java:942)
	at org.apache.catalina.session.StandardManager.doLoad(StandardManager.java:394)
	at org.apache.catalina.session.StandardManager.load(StandardManager.java:321)
	at org.apache.catalina.session.StandardManager.start(StandardManager.java:637)
	at org.apache.catalina.core.ContainerBase.setManager(ContainerBase.java:438)
	at org.apache.catalina.core.StandardContext.start(StandardContext.java:4271)
	at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
	at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
	at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)
	at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:830)
	at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:719)
	at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:490)
	at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1149)
	at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
	at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
	at org.apache.catalina.core.StandardHost.start(StandardHost.java:719)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
	at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
	at org.apache.catalina.core.StandardService.start(StandardService.java:516)
	at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
	at org.apache.catalina.startup.Catalina.start(Catalina.java:578)
	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:288)
	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)

> Hot-restart of Tomcat causes NullPointerException while deserializing saved http-session
> ----------------------------------------------------------------------------------------
>
>                 Key: ORCHESTRA-32
>                 URL: https://issues.apache.org/jira/browse/ORCHESTRA-32
>             Project: MyFaces Orchestra
>          Issue Type: Bug
>          Components: Conversation
>    Affects Versions: 1.2
>            Reporter: Simon Kitching
>            Assignee: Simon Kitching
>             Fix For: 1.4
>
>
> Tomcat displays this message on restart:
> SCHWERWIEGEND: Exception loading sessions from persistent storage
> java.lang.NullPointerException
> 	at java.util.concurrent.ConcurrentHashMap.put(ConcurrentHashMap.java:881)
> 	at org.apache.catalina.session.StandardSession.readObject(StandardSession.java:1445)
> The problem is that the orchestra ConversationManager class has a readResolve method that returns null, intending that the object just gets created "on demand" later. However Tomcat tries to put the deserialized object into its session - and null objects are not permitted in an HttpSession.

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