[ http://issues.apache.org/jira/browse/MYFACES-101?page=all ] sean schofield closed MYFACES-101: ----------------------------------
> 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 > Fix For: 1.0.9 beta > 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 - For more information on JIRA, see: http://www.atlassian.com/software/jira
