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

Reply via email to