You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@cocoon.apache.org by "David Crossley (JIRA)" <ji...@apache.org> on 2006/03/01 08:33:19 UTC
[jira] Updated: (COCOON-1329) [PATCH] Fix for cocoon.jar bundled in
ear common for portal.war and portlet.war
[ http://issues.apache.org/jira/browse/COCOON-1329?page=all ]
David Crossley updated COCOON-1329:
-----------------------------------
Bugzilla Id: (was: 32156)
Other Info: [Patch available]
> [PATCH] Fix for cocoon.jar bundled in ear common for portal.war and portlet.war
> -------------------------------------------------------------------------------
>
> Key: COCOON-1329
> URL: http://issues.apache.org/jira/browse/COCOON-1329
> Project: Cocoon
> Type: Bug
> Components: Blocks: Portal
> Versions: 2.1.5
> Environment: Operating System: All
> Platform: Other
> Reporter: Michal Durdina
> Assignee: Ralph Goers
> Attachments: RELEASE_2_1_5_1.patch_2.txt, RELEASE_2_1_6.patch_2.diff
>
> Removal of checkEnvironment() in Cocoon.process() method. Needed for cocoon
> portal-to-portlet communication via RequestDispatcher.include() when portal.war
> and portlet.war are bundled into ear. Cocoon.jar is pulled from wars'/WEB-
> INF/lib to top ear level - as a result common ear classloader is used for its
> classes. Static class fields in cocoon.jar are influenced. Critical: static
> field 'environmentStack'.
> Two use cases:
> A.) WORKING: portal.war and portlet.war use TWO classloaders for cocoon.jar
> - every war has its own cocoon.jar in WEB-INF/lib
> - static class fields are instantiated in each classloader
> - every war sees its own instance of static field
> B.) NOT WORKING: portal.war and portlet.war use ONE classloader for cocoon.jar
> - every war uses cocoon.jar from ear
> - static class fields are instantiated only ONCE in ear classloader
> - all war sees same instance of static field
> This patch fixes getting/setting PortalServiceInfo from/to session. When
> portlet constructs its url's, it calls portal service DefaultLinkService.
> DefaultLinkService tries to get PortalServiceInfo from session and session is
> retrieved from Environment object that is currently at the top of
> environmentStack.
> Case A: Calling sequence of portal processing:
> portal.war#Cocoon.process() ->
> portletInfo -> portal.session
> // cl1, cl2 stands for classloader1, classloader2
> cl1.envStack.top:=portal.session
> portlet.war#Cocoon.process() ->
> cl2.envStack.top:=portlet.session
> portal.war#DefaultLinkService.getInfo() ->
> session := cl1.envStack.top
> portletInfo <- session(portal.session) // portletInfo != NULL
> portal.war#DefaultLinkService.getInfo() <-
> portlet.war#Cocoon.process() <-
> portal.war#Cocoon.process() <-
> Case B: Calling sequence of portal processing:
> portal.war#Cocoon.process() ->
> portletInfo -> portal.session
> // cl1 stands for common classloader
> cl1.envStack.top:=portal.session
> portlet.war#Cocoon.process() ->
> cl1.envStack.top:=portlet.session
> portal.war#DefaultLinkService.getInfo() ->
> session := cl1.envStack.top
> portletInfo <- session(portlet.session) // NPE: portletInfo == NULL
> portal.war#DefaultLinkService.getInfo() <-
> portlet.war#Cocoon.process() <-
> portal.war#Cocoon.process() <-
--
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