Looks great Jason! Can't wait to see it!

-Pat

----- Original Message -----
From: "Jason Carreira" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Thursday, January 09, 2003 7:43 AM
Subject: RE: [OS-webwork] XWork Interceptors


> Patrick, as we discussed on IRC, I've been working on this. I've
> basically got the Interceptor framework built, I think, although I
> haven't tested it :-)
>
> I'm not sure what you were thinking, but mine does not plug in at the
> ActionFactoryProxy level. Basically what mine does is to mimic the way
> the javax.servlet.Filter works. Basically, you register all of your
> interceptors at the top of your xwork.xml like so:
>
>     <interceptors>
>         <interceptor name="timer"
> class="com.opensymphony.xwork.interceptor.TimerInterceptor"/>
>         <interceptor name="logger"
> class="com.opensymphony.xwork.interceptor.LoggingInterceptor"/>
>     </interceptors>
>
> The DefaultConfiguration builds a Map of the names to instances of these
> classes (my thought here being that interceptors should be stateless, so
> we only need one instance of each and we can just push invocations
> through it), then, in your action declaration, like there are result
> references, you have something like this:
>
>         <action name="Foo"
> class="com.opensymphony.xwork.action.SimpleAction">
>
>             <action-params>
>
>                 <param name="foo">17</param>
>
>             </action-params>
>
>             <results>
>
>                 <result name="success" type="chain">
>
>                     <result-params>
>
>                         <param name="actionName">Bar</param>
>
>                     </result-params>
>
>                 </result>
>
>             </results>
>
>             <interceptor-ref name="timer"/>
>             <interceptor-ref name="logger"/>
>
>         </action>
>
> DefaultConfiguration then builds an InterceptorChain with the list of
> Interceptors and the Action. The interceptor chain has a method,
> doInterceptor() which does this:
>
>    public String doInterceptor() throws Exception {
>         if (interceptors.hasNext()) {
>             Interceptor interceptor = (Interceptor) interceptors.next();
>             result = interceptor.intercept(this);
>         } else {
>             result = action.execute();
>         }
>
>         return result;
>     }
>
> The sub interceptors can choose to pass the call through by using the
> InterceptorChain passed in by doing interceptor.doInterceptor() again.
> My base Interceptor implementation does this:
>
>     public String intercept(InterceptorChain chain) throws Exception {
>         before(chain);
>
>         String result = chain.doInterceptor();
>         after(chain);
>
>         return result;
>     }
>
> Which allows subclasses to put code before and after the rest of the
> processing.
>
> What happens in GenericDispatcher is this (replacing the direct
> execute() of the action):
>
>     List interceptors = actionConfig.getInterceptors();
>     InterceptorChain interceptorChain = new InterceptorChain(action,
> interceptors);
>     result = interceptorChain.doInterceptor();
>
>
> Anyway, that's what I've been working on... Thoughts?
>
> Jason
>
> > -----Original Message-----
> > From: Patrick Lightbody [mailto:[EMAIL PROTECTED]]
> > Sent: Thursday, January 09, 2003 10:24 AM
> > To: os-ww
> > Subject: [OS-webwork] XWork Interceptors
> >
> >
> > So anyway, I'm just going to disregard the "Documentation"
> > thread and start a thread that is actually useful :)
> >
> > (Though, Ken, we're still hoping your willing to do some Doc work!)
> >
> > So besides Action Chaining, Rickard made a good point that
> > interceptors is very important as well. I'd like to talk
> > about the actual implementation now -- using the transaction
> > scenario as an example.
> >
> > How will the interceptor know when to rollback or commit? Of
> > course on an Exception it should, but what about on ERROR or
> > INPUT? What if the action, to signify it's is complete, used
> > COMPLETE instead of SUCCESS? Do you see my point? How can we
> > make interceptors work for all cases? I'm guessing some sort
> > of configuration is needed for each interceptor on each
> > action, so we could do something like:
> >
> > <interceptor class="...">
> >     <param name="commit.values">success, complete</param>
> > </interceptor>
> >
> > And then the interceptot could know to rollback if the return
> > value isn't one of those two.
> >
> > Rickard, is this what you had in mind?
> >
> > Also, Interceptors would fit in to the GenericDispatcher
> > area. I think that they would replace ActionFactoryProxies
> > entirely, correct? Also, maybe Rickard you can provide some
> > sample psuedo code for an Interceptor as well as how it would
> > go about being invoked in GenericDispatcher?
> >
> > -Pat
> >
> >
> >
> >
> > -------------------------------------------------------
> > This SF.NET email is sponsored by:
> > SourceForge Enterprise Edition + IBM + LinuxWorld = Something
> > 2 See! http://www.vasoftware.com
> > _______________________________________________
> > Opensymphony-webwork mailing list
> > [EMAIL PROTECTED]
> > https://lists.sourceforge.net/lists/listinfo/opensymphony-webwork
> >
>
>
> -------------------------------------------------------
> This SF.NET email is sponsored by:
> SourceForge Enterprise Edition + IBM + LinuxWorld
http://www.vasoftware.com
> _______________________________________________
> Opensymphony-webwork mailing list
> [EMAIL PROTECTED]
> https://lists.sourceforge.net/lists/listinfo/opensymphony-webwork



-------------------------------------------------------
This SF.NET email is sponsored by:
SourceForge Enterprise Edition + IBM + LinuxWorld = Something 2 See!
http://www.vasoftware.com
_______________________________________________
Opensymphony-webwork mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/opensymphony-webwork

Reply via email to