Hi!

It used to be a render parameter, but was changed due to this:
https://issues.apache.org/jira/browse/WW-2052

Nils-H

On Sun, May 22, 2011 at 8:02 PM, huang.mi...@gmail.com
<huang.mi...@gmail.com> wrote:
> Hi Pyerson,
>   I'm also using portlet2 plugin, which seems derived from struts portlet
> plugin, brings same method to handle directRender from action phase. Thus it
> has same problems :). But since the source is from struts bundled portlet
> plugin, I'd better discuss this issue here.
>   First let me clear the ACTION word. It's both used in struts and portlet
> specification, referencing totally different things. I'll use "portlet
> action phase" and "struts action" here to avoid confusing, although it's
> cumbersome.
>   First some background information about this issue:
>   A portlet action phase request is mapped to a struts action request by the
> struts portlet plugin. Due to the portlet JSR definition, in action phase
> process no output is rendered. Instead a follow on render phase request is
> used to take the actual render responsible. However the struts action can
> define a JSP render result. In this case, the struts action's result process
> actually not do render process, but save the render JSP location to the
> session map and finished the result process immediately. The actual JSP
> render process is taken place by the follow on portlet render phase request,
> which is mapping to the struts portlet plugin internal defined
> "directRender" action. The directRender action load the previously saved JSP
> location and do the actual JSP render as it's result. Thus the portlet
> render phase response get JSP render output AS IF it is rendered out by the
> result defined in the struts action. See the in question source code  which
> is doing the process described here:
>
> org.apache.struts2.portlet.result.PortletResult.executeActionResult(String,
> ActionInvocation)
>     org.apache.struts2.portlet.dispatcher.DirectRenderFromEventAction,
>
>   The problem is:
>   The session is shared by all requests in the same session, in a
> multi-threaded concurrent executing environment. This may cause
> indeterminable problems on a heavy load site.
>   Suppose 2 request(Request A and Request B) from same session come to the
> portal at nearly same time. The process sequence of the 2 request may like
> this:
>   1. Request A get action phase process, and its struts action (action A)
> result process stored  the JSP location (a.jsp) to the session map.
>   2. Request B get action phase process, and its struts action (action B)
> result process stored the JSP location (b.jsp) to the session map, which
> overwrites JSP location (a.jsp) set by action A.
>   3. Request A get render phase process, and the renderDirect action get
> incorrect JSP location b.jsp. Request A will render the wrong JSP result.
>   4. Request B get render phase process, and the renderDirect action get
> correct JSP location b.jsp, and render the JSP result correctly.
>   This problem may not easy to reproduce during the development lifecycle,
> except you use an automatic load testing tool to test it. But when the
> system is deployed to the production environment and the site load get
> heavy, the possibility to run into the issue case get higher.
>   Hope I have described the issue clearly and feel free to place a note on
> what I have missing.
>
> Best Regards,
> Miles.
>
>
> 在 2011-05-21Sat的 20:54 -0400,Jason Pyeron写道:
>
> I am having a little trouble following what you are saying. Do you have an
> example that might better say the issue.
>
> I am currently using the portlet2 plugin as well.
>
> ________________________________
>
>       From: Miles Huang [mailto:miles.hu...@surwing.com]
>       Sent: Saturday, May 21, 2011 11:52
>       To: dev@struts.apache.org
>       Subject: Portlet plugin renderDirect location transfer via session may
> has concurrent issue
>       
>       
>       Hi,
>         I'm using struts2 portlet plugin for a portlet project recently.
>         In some case, I have to use renderDirect action to render JSP result
> directly from an portlet action phase request.
>         When I'm examining the PortletResult source code, surprisingly I found
> the result location is transfer to the renderDirect action via session map
> instead of render parameter.
>         Is there any special reason to do this? I think current via session
> method may result current issue: Suppose multiple client in same session
> (normally multiple opened browser windows) send action phase request to the
> portlet concurrently, the result location of a action phase request may
> override
> by another request.
>         Any one can confirm on this?
>       
>       Thanks,
>       Miles.
>
> --
> -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
> -                                                               -
> - Jason Pyeron                      PD Inc. http://www.pdinc.us -
> - Principal Consultant              10 West 24th Street #100    -
> - +1 (443) 269-1555 x333            Baltimore, Maryland 21218   -
> -                                                               -
> -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
> This message is copyright PD Inc, subject to license 20080407P00.
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@struts.apache.org
> For additional commands, e-mail: dev-h...@struts.apache.org
>
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@struts.apache.org
For additional commands, e-mail: dev-h...@struts.apache.org

Reply via email to