myfaces-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Simon Kitching (JIRA)" <...@myfaces.apache.org>
Subject [jira] Created: (ORCHESTRA-34) NullPointerException triggered by ConversationWiperThread
Date Wed, 17 Dec 2008 10:12:44 GMT
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.


Mime
View raw message