NullPointerException triggered by ConversationWiperThread
---------------------------------------------------------
Key: ORCHESTRA-34
URL: https://issues.apache.org/jira/browse/ORCHESTRA-34
Project: MyFaces Orchestra
Issue Type: Bug
Components: Conversation
Affects Versions: 1.3
Reporter: Simon Kitching
As reported by Petr Juza, a NullPointerException can be triggered by the
ConversationWiperThread:
Exception in thread
"org.apache.myfaces.orchestra.conversation.ConversationWiperThread"
java.lang.NullPointerException
at
org.apache.myfaces.orchestra.conversation.ConversationManager.findConver
sationContextId(ConversationManager.java:140)
at
org.apache.myfaces.orchestra.conversation.ConversationManager.removeAndI
nvalidateConversationContext(ConversationManager.java:343)
at
org.apache.myfaces.orchestra.conversation.ConversationManager.checkTimeo
uts(ConversationManager.java:626)
at
org.apache.myfaces.orchestra.conversation.ConversationWiperThread._run(C
onversationWiperThread.java:113)
at
org.apache.myfaces.orchestra.conversation.ConversationWiperThread.run(Co
nversationWiperThread.java:90)
After initial investigation, the problem appears to be that the
ConversationWiperThread is detecting a ConversationContext timeout, and so is
trying to delete the ConversationContext. However in the
ConversationManager.removeAndInvalidateConversationContext(ctx) method, a check
is done to see if the context being removed is the "current one", in order to
prevent code within a request from accidentally deleting the context that is
being used to process that request. However this check requires the
FrameworkAdapter - but there is no FrameworkAdapter instance for a background
thread like the ConversationWiperThread:
public void removeAndInvalidateConversationContext(ConversationContext context)
{
.....
if (context.getIdAsLong().equals(findConversationContextId()))
...
where findConversationContextId tries to use FrameworkAdapter to look in the
current HttpRequest object.
Here, we could check whether a FrameworkAdapter exists, and if not then assume
that the context is not the "current" one. Ideally, we would actually block the
wiper thread from deleting a context if it is "locked", but the odds of a
context timing out while actually in use are very low indeed.
I'm a little puzzled why I don't see this exception in the logs for my apps
that use Orchestra...
Note that this exception is fairly harmless: it just disables the
ConversationWiperThread
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.