You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@cocoon.apache.org by "Ralph Goers (JIRA)" <ji...@apache.org> on 2014/05/23 06:44:02 UTC

[jira] [Assigned] (COCOON-1329) [PATCH] Fix for cocoon.jar bundled in ear common for portal.war and portlet.war

     [ https://issues.apache.org/jira/browse/COCOON-1329?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Ralph Goers reassigned COCOON-1329:
-----------------------------------

    Assignee:     (was: Ralph Goers)

> [PATCH] Fix for cocoon.jar bundled in ear common for portal.war and portlet.war
> -------------------------------------------------------------------------------
>
>                 Key: COCOON-1329
>                 URL: https://issues.apache.org/jira/browse/COCOON-1329
>             Project: Cocoon
>          Issue Type: Bug
>          Components: Blocks: Portal
>    Affects Versions: 2.1.5
>         Environment: Operating System: All
> Platform: Other
>            Reporter: Michal Durdina
>         Attachments: ASF.LICENSE.NOT.GRANTED--RELEASE_2_1_5_1.patch_2.txt, ASF.LICENSE.NOT.GRANTED--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 was sent by Atlassian JIRA
(v6.2#6252)