[ http://issues.apache.org/jira/browse/MYFACES-101?page=history ]
Stan Silvert updated MYFACES-101:
---------------------------------
Attachment: patch.txt
> Inefficient portlet dependency fix
> ----------------------------------
>
> Key: MYFACES-101
> URL: http://issues.apache.org/jira/browse/MYFACES-101
> Project: MyFaces
> Type: Improvement
> Versions: Nightly Build
> Reporter: Stan Silvert
> Assignee: Stan Silvert
> Priority: Minor
> Attachments: PortletUtil.java, patch.txt, portletpatch.diff
>
> The Portlet Integration Framework created a dependency on the portlet jar.
> Shortly after the code was integrated, someone removed the dependency by
> catching and ignoring the NoClassDefFoundError that results if you don't have
> the portlet jar in your classpath.
> While it is good that we remove the dependency for JSF applications that are
> not running in a portal, the current fix is very inefficient because it
> causes multiple exceptions to be thrown, caught, and ignored with virtually
> every request.
> Example of current fix:
> try{
> if (externalContext.getRequest() instanceof PortletRequest) {
> externalContext.dispatch(viewId);
> return;
> }
> }catch(NoClassDefFoundError exception){
> // Portlet api jar isn't in the classpath.
> }
> What is needed is a better way to determine if the request is coming from a
> portlet. The solution must not rely on the Portlet API and also must never
> generate exceptions.
> My proposed soultion is to put a flag in the portlet session. The flag will
> be set in the MyFacesGenericPortlet. So the new code will look something
> like this instead:
> if
> (externalContext.getSessionMap().get(MyFacesGenericPortlet.PORTLET_REQUEST_FLAG)
> != null)
> if (externalContext.getRequest() instanceof PortletRequest) {
> externalContext.dispatch(viewId);
> return;
> }
> }
> What would be even better is a solution that factors out the if statements
> and solves the problem using polymorphism. However, that would incur a major
> refactoring of many components. At some point this major refactoring should
> be done so that MyFaces could support requests that come from a third source
> (Servlet, Portlet, and something else). But I do not recommend the
> refactoring at this time. For now, the instances where MyFaces needs to
> check for a portlet request or response is confined to two source files. It
> is manageable.
> I'll leave this out for comment for a few days before submitting a patch.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
If you want more information on JIRA, or have a bug to report see:
http://www.atlassian.com/software/jira