Here's a followup to my previous post.

Looking at com.opensymphony.xwork.DefaultActionProxy
public String execute() throws Exception {
        ActionContext   oldContext = ActionContext.getContext();
        ActionContext.setContext(invocation.getInvocationContext());
        String retCode = null;
        try {
            retCode = invocation.invoke();
        } finally {
            ActionContext.setContext(oldContext);
        }
        return retCode;
}

Why not just pass the actionCtx into invoke (change of signature)
        retCode = invocation.invoke(actionCtx);
instead of relying on thread-based singleton data (thread local storage)

Am I missing something?

Regards / jens


-----Original Message-----
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] Behalf Of
Jens Riboe
Sent: Wednesday, January 07, 2004 11:56 PM
To: [EMAIL PROTECTED]
Subject: RE: [OS-webwork] Xwork/WebWork2 under extreme load


Thanks, 
I found it in com.opensymphony.xwork.ActionContext
  static ThreadLocal actionContext = new ActionContextThreadLocal();
  ...
  public static void setContext(ActionContext aContext) {
    actionContext.set(aContext);
  }
  public static ActionContext getContext() {
    ActionContext context = (ActionContext) actionContext.get();
    return context;
  }
  ...

What was the design rationale for putting it in thread local storage?

This works for servlets, but it may cause mysterious bugs in Swing
applications, every time one uses a worker thread for a time consuming
UI event.

How about putting state info, like actionCtx, config, etc into
a single XWork object and then let the impl choose to store it 
appropriately. The ctx can then be created from that object.

For a servlet one can use thread-based singleton, like above
or put it into the servletCtx, and the actionCtx can be created and stored
into the request.

For a Swing app, it generally suffice to go for a classloader singleton,
aka static variable, for both config and actionCtx.

Kind regards / jens


-----Original Message-----
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] Behalf Of
Jason Carreira
Sent: Wednesday, January 07, 2004 9:40 PM
To: [EMAIL PROTECTED]
Subject: RE: [OS-webwork] Xwork/WebWork2 under extreme load


Yes, The ActionContext is stored in a ThreadLocal

ActionContext.getContext() gets the instance associated with this
thread.

ServletActionContext.getRequest() is just a utility helper method for
(HttpServletRequest)ActionContext.getContext().get(HTTP_REQUEST)

Jason

> -----Original Message-----
> From: Jens Riboe [mailto:[EMAIL PROTECTED] 
> Sent: Wednesday, January 07, 2004 3:40 PM
> To: [EMAIL PROTECTED]
> Subject: RE: [OS-webwork] Xwork/WebWork2 under extreme load
> 
> 
> I'm complete new to webwork(2) and is browsing the code of 
> WW2 and XWork to get some kind of understanding of what is 
> going on under the hood.
> 
> Something I don't understand is the usage of static methods 
> for accessing request information.
> 
> The follwing snippet comes from 
> com.opensymphony.webwork.interceptor.ServletConfigInterceptor
> protected void   before(ActionInvocation invocation) throws 
> Exception {
>   Action         action = invocation.getAction();
>   if (action instanceof ServletRequestAware) {
>     HttpServletRequest request = 
> (HttpServletRequest)ActionContext.getContext().get(HTTP_REQUEST);
>     ((ServletRequestAware) action).setServletRequest(request);
>   }
>   ...
> 
> And this snippet from 
> com.opensymphony.webwork.interceptor.TokenInterceptor
> public String    intercept(ActionInvocation invocation) 
> throws Exception {
>   HttpServletRequest request = ServletActionContext.getRequest();
>   synchronized (request.getSession()) {
>     if (!TokenHelper.validToken(request)) { return 
> handleInvalidToken(invocation); }
>     return handleValidToken(invocation);
>   }
> }
> 
> Both are getting the HttpServletRequest object from a static method.
> 
> I haven't traced it further, but is the context data located 
> in thread local storage? Else, I don't understand how it is 
> supposed to work.
> 
> > How is the valuestack handled? Is there one for each incoming 
> > request/thread? I'll post some stack traces from JProfiler 
> indicating 
> > thread deadlock tomorrow.
> Is the deadlock above and the static context data related in any way?
> 
> Any light on this would help.
> 
> Kind regards / jens
> 
> 
> -----Original Message-----
> From: [EMAIL PROTECTED]
> [mailto:[EMAIL PROTECTED] 
> Behalf Of Jason Carreira
> Sent: Wednesday, January 07, 2004 9:12 PM
> To: [EMAIL PROTECTED]
> Subject: RE: [OS-webwork] Xwork/WebWork2 under extreme load
> 
> 
> Yes, the ValueStack is created for each request and put into 
> the ActionContext
> 
> > -----Original Message-----
> > From: Mathias Bogaert [mailto:[EMAIL PROTECTED]
> > Sent: Wednesday, January 07, 2004 3:14 PM
> > To: [EMAIL PROTECTED]
> > Subject: Re: [OS-webwork] Xwork/WebWork2 under extreme load
> >
> >
> > All from CVS, as usual ;-)
> >
> > How is the valuestack handled? Is there one for each incoming 
> > request/thread? I'll post some stack traces from JProfiler 
> indicating 
> > thread deadlock tomorrow.
> >
> > Mathias
> >
> > ----- Original Message -----
> > From: "Patrick Lightbody" <[EMAIL PROTECTED]>
> > To: <[EMAIL PROTECTED]>
> > Sent: Wednesday, January 07, 2004 9:03 PM
> > Subject: RE: [OS-webwork] Xwork/WebWork2 under extreme load
> >
> >
> > > Mathias,
> > > I haven't seen anything like this. Are you using the latest
> > from CVS
> > > (or at least beta 2)? I did a lot of stress testing while doing 
> > > performance tuning for WW and I didn't hit anything like this. 
> > > However, that doesn't mean it isn't a problem.
> > >
> > > -Pat
> > >
> > > -----Original Message-----
> > > From: [EMAIL PROTECTED]
> > > [mailto:[EMAIL PROTECTED]
> > On Behalf Of
> > > BOGAERT Mathias
> > > Sent: Wednesday, January 07, 2004 9:44 AM
> > > To: [EMAIL PROTECTED]
> > > Subject: [OS-webwork] Xwork/WebWork2 under extreme load
> > >
> > > Hi,
> > >
> > > I'm currently stress testing my application on WebLogic 8.1 under 
> > > extreme load. It seems Xwork has some blocking issues,
> > especially in
> > > regard to OGNL
> > > (getting/setting values on the stack).
> > >
> > > Before I go further to investigate deeply, did anyone see
> > this before?
> > > And are there any best practices concerning threads and the
> > way a web
> > > application should be written?
> > >
> > > Thanks,
> > > Mathias Bogaert
> > >
> > >
> > > -------------------------------------------------------
> > > This SF.net email is sponsored by: Perforce Software.
> > Perforce is the
> > > Fast Software Configuration Management System offering advanced 
> > > branching capabilities and atomic changes on 50+ platforms.
> > Free Eval!
> > > http://www.perforce.com/perforce/loadprog.html
> > > _______________________________________________
> > > Opensymphony-webwork mailing list 
> > > [EMAIL PROTECTED]
> > > https://lists.sourceforge.net/lists/listinfo/opensymphony-webwork
> > >
> > >
> > > -------------------------------------------------------
> > > This SF.net email is sponsored by: Perforce Software.
> > Perforce is the
> > > Fast Software Configuration Management System offering advanced 
> > > branching capabilities and atomic changes on 50+ platforms.
> > Free Eval!
> > > http://www.perforce.com/perforce/loadprog.html
> > > _______________________________________________
> > > Opensymphony-webwork mailing list 
> > > [EMAIL PROTECTED]
> > > https://lists.sourceforge.net/lists/listinfo/opensymphony-webwork
> > >
> > >
> >
> >
> >
> > -------------------------------------------------------
> > This SF.net email is sponsored by: Perforce Software. 
> Perforce is the 
> > Fast Software Configuration Management System offering advanced 
> > branching capabilities and atomic changes on 50+ platforms. 
> Free Eval!
> > http://www.perforce.com/perforce/loadprog.html
> >
> > _______________________________________________
> > Opensymphony-webwork mailing list 
> > [EMAIL PROTECTED]
> > https://lists.sourceforge.net/lists/listinfo/opensymphony-webwork
> >
> 
> 
> -------------------------------------------------------
> This SF.net email is sponsored by: Perforce Software.
> Perforce is the Fast Software Configuration Management System 
> offering advanced branching capabilities and atomic changes 
> on 50+ platforms. Free Eval! 
> http://www.perforce.com/perforce/loadprog.html
> 
> _______________________________________________
> Opensymphony-webwork mailing list 
> [EMAIL PROTECTED]
> https://lists.sourceforge.net/lists/listinfo/opensymphony-webwork
> 
> 
> 
> 
> -------------------------------------------------------
> This SF.net email is sponsored by: Perforce Software.
> Perforce is the Fast Software Configuration Management System 
> offering advanced branching capabilities and atomic changes 
> on 50+ platforms. Free Eval! 
> http://www.perforce.com/perforce/loadprog.html
> 
> _______________________________________________
> Opensymphony-webwork mailing list 
> [EMAIL PROTECTED]
> https://lists.sourceforge.net/lists/listinfo/opensymphony-webwork
> 


-------------------------------------------------------
This SF.net email is sponsored by: Perforce Software.
Perforce is the Fast Software Configuration Management System offering
advanced branching capabilities and atomic changes on 50+ platforms.
Free Eval! http://www.perforce.com/perforce/loadprog.html
_______________________________________________
Opensymphony-webwork mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/opensymphony-webwork



-------------------------------------------------------
This SF.net email is sponsored by: Perforce Software.
Perforce is the Fast Software Configuration Management System offering
advanced branching capabilities and atomic changes on 50+ platforms.
Free Eval! http://www.perforce.com/perforce/loadprog.html
_______________________________________________
Opensymphony-webwork mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/opensymphony-webwork



-------------------------------------------------------
This SF.net email is sponsored by: Perforce Software.
Perforce is the Fast Software Configuration Management System offering
advanced branching capabilities and atomic changes on 50+ platforms.
Free Eval! http://www.perforce.com/perforce/loadprog.html
_______________________________________________
Opensymphony-webwork mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/opensymphony-webwork

Reply via email to