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.