struts-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Ali Akhtar <ali.rac...@gmail.com>
Subject Re: Struts seems to reset the action instance while its still in interceptor
Date Sun, 03 Nov 2013 23:26:17 GMT
To be clear, this is what's happening:

1) Request is made to /foobar/foo, which triggers FooAction.foo().

2) The interceptor begins to process this request.

3) Another request is made concurently to /foobar/bar, which triggers
FooAction.bar().

4) The interceptor from step 2 does ai.invokeActionOnly(). Now, when it
compares action.toString() to ai.getAction().toString(), the results are
different.

Is this the expected behavior?


On Mon, Nov 4, 2013 at 4:14 AM, Martin Gainty <mgainty@hotmail.com> wrote:

>
>
>
>
>
> > Date: Mon, 4 Nov 2013 02:49:12 +0500
> > Subject: Re: Struts seems to reset the action instance while its still
> in interceptor
> > From: ali.rac200@gmail.com
> > To: user@struts.apache.org
> >
> > Hopefully I am incorrect, however the following lines in my interceptor's
> > intercept method:
> >
> > action = ai.getAction();
> > String result = ai.invoke();
> > logger.debug("Orig action : " + action.toString() +" , now : " +
> > ai.getAction().toString() );
> >
> > Do produce two different toString() codes for the original action and the
> > new ai.getAction(). Is there any scenario in which this could happen?
> >
> > I'm serving two actions from the same class, i.e mysite/foo is being
> served
> > by FooAction.foo(),
> MG>action.class //1st instance
>
> and mysite/bar is being served by FooAction.bar().
> MG>action.class //2nd instance
>
> MG>Unless you coded FooAction to be a singleton each request will produce
> a unique Instance Signature
> MG>action.toString().equalsIgnoreCase(ai.getAction().toString()) would
> always return false
>
>  So
> > in both cases, the same class is serving two actions.
> MF>JVM references the unique class instance produced by the request
> MG>(not the class)
>
> Could this have any
> > bearing on why action.toString() and ai.getAction.toString() are
> producing
> > different codes?
> MG>2 difference requests..2 different action class signatures
> >
> >
> > On Mon, Nov 4, 2013 at 2:18 AM, Dave Newton <davelnewton@gmail.com>
> wrote:
> >
> > > You are incorrect. Actions are instantiated per-request. Other than
> that,
> > > you will need to provide a working example that exhibits the incorrect
> > > behavior.
> > > On Nov 3, 2013 12:57 PM, "Ali Akhtar" <ali.rac200@gmail.com> wrote:
> > >
> > > > Hello,
> > > >
> > > > It seems that if I have two concurrent requests being made to the
> same
> > > > action, e.g mysite.com/fooAction, then struts resets the first
> action's
> > > > instance while that instance may still be in the interceptor.
> > > >
> > > > E.g, if I have the following code in my interceptor:
> > > >
> > > > action = ai.getAction();
> > > > String result = ai.invoke();
> > > > logger.debug("Orig action : " + action.toString() +" , now : " +
> > > > ai.getAction().toString() );
> > > >
> > > > And if I make two concurrent requests to the same action (e.g using
> > > > javascript), then the line:
> > > >
> > > > logger.debug("Orig action : " + action.toString() +" , now : " +
> > > > ai.getAction().toString() );
> > > >
> > > > will sometimes produce two different `toString()` codes, showing
> that the
> > > > original action was in a different instance than the last action.
> > > >
> > > > This is a big problem, because now, if I had any code in the
> interceptor,
> > > > which was setting certain things on my action, e.g doing the
> following:
> > > >
> > > > MyAction action = (MyAction) ai.getAction();
> > > > Auth auth = new Auth ( action.getSession() );
> > > > action.setAuth(auth);
> > > > action.setCookiesMap( Util.getAllCookies() );
> > > > String result = ai.invoke();
> > > >
> > > > then there is no guarantee that all those things which I've set on my
> > > > action are in fact going to be passed to the correct instance. I.e,
> when
> > > > `ai.invoke()` is called, it may in fact call a completely different
> > > > instance of the action, which has different cookies or other data
> set on
> > > > it. This could result in different users being given access to each
> > > other's
> > > > data.
> > > >
> > > > Am I correct in all of this? If so, is there a solution to this
> problem?
> > > > Because this seems to completely defeat the purpose of interceptors.
> > > >
> > > > Thanks in advance.
> > > >
> > >
>
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message