At first glance that seems like a *great* catch.
--- Jeromy Evans <[EMAIL PROTECTED]> wrote:
> I'm investigating some of issues related to the s:action tag. This tag
> sets up a new context and ActionInvocation and invokes the action and
> result correctly. The problem is that within that process the
> DefaultActionInvocation replaces the ActionInvocation in the ThreadLocal
> ActionContext with the tag's own invocation:
>
> // Setting this so that other classes, like object factories,
> can use the ActionProxy and other
> // contextual information to operate
> ActionContext actionContext = ActionContext.getContext();
>
> if(actionContext != null) {
> actionContext.setActionInvocation(this);
> }
>
> The effect is that after completion of the tag, the ActionInvocation in
> the ThreadLocal ActionContext still references the tag's temporary
> invocation instead of the "parent" action's invocation. From that
> point, anything can happen, and does (WW-2079, WW-2290, WW-2599 and a
> few more that got me started down this path).
>
> I'm not sure how to fix this. If actions can rely on the ThreadLocal
> ActionContext (they do), the current invocation needs to be there, but
> the invocation has no sensible way to know that it should restore the
> previous state. I don't want to pass more flags in from the action tag.
>
> Has anyone got some suggestions on a tidy way to resolve this? Removing
> the ThreadLocals would be nice.
My naïve reaction would be to put it on a stack, since we're talking nested
contexts, and set the thread local from it. But I can't even find that code
right now :/
Dave
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]