Details
-
Bug
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
2.0.2
-
None
Description
Currently Pluto distributes events to all portlets in the portal registered to receive the event whether they are visible/renderable or not. ( I.e. whether they are on the current tab or not). When doEvent() is finished and calls close() the portlet that received the event is encoded (merged) into the render url that pluto redirects to at the end of the (action/event) request. If you have N (where N is greater than 6 or so) portlets all that raise/receive the same event, each on a separate tab then each of these portlets breaks when its action raises the event. Apache throws an ArrayOutOfBounds exception as we seemingly write beyond the 8k response header buffer limit.
So, the fix is that Pluto should only encode the portlet in this url if its in fact currently renderable/visible/on the current tabbed page.
FYI ... my use case is running the 329 Bridge TCK which has many tens of event tests that each uses the same event (name). Each test is on a different tab/page but things still fail because of the above.
In looking at the code this may take a little jiggering to get implemented . Might a I suggest that you add a second close() method to PortletStateAwareResponseImpl that takes a boolean indicating whether the portlet is renderable or not (and hence whether to encode the info in the render url) and then have PortletContainerImpl.doEvent() call this close with the appropriate value. This assumes of course that you can figure out whether the portlet is visible/renderable and the code here can have access to this information.