2 Replies Latest reply on Oct 5, 2007 7:39 AM by suckerd

    seam in a portal

    cwash

      I haven't had the opportunity to test this, but I imagine anyone with a pretty good understanding of how conversations are implemented could answer, so I pose it here first...

      In developing a BEA Portal application for a client, I've come across this idea of a "refreshAction" for a portlet - specifically it refers to a Java Page Flow action (old BEA/now Apache Beehive Pageflow, and possibly could be a Struts action I suppose) that gets called when a page that contains the portlet in question is refreshed.

      The problem comes down to when you have a JPF, which is somewhat analogous to a Conversation (except it's seemingly a single object stored under an "active pageflow" key in the HttpSession I believe), if you have it wrapped in a portlet and refresh the page containing your JPF portlet your Pageflow state is lost.

      Presumably it's due to the fact that the portal doesn't know the state of your portlet and by default it won't re-execute the processAction step of the portlet lifecycle. So the portal assumes the portlet is in the proper state and just does the render phase for the portlet, which makes any state lower than session scope disappear.

      I haven't tried this with a JSF portlet, but am wondering if the way Seam has implemented conversations totally averts the problem...

      Sorry for over-explaining the issue - this has all been a long winded way of asking, are conversations stored in a map structure under the Session?

      If so - when wrapping a Seam app in a portlet, has this problem been addressed? In particular, it has to do with the portal framework thinking that the portlet is in a processAction state prematurely. BEA's solution for this is to set a property on the portlet called "refreshAction" that will get called in this scenario - if the page is refreshed your you switch to another page can come back. The right way to solve it would be to have the Pageflow state available and restore it. In the context of a Seam app, this would be having the current long running conversation stored along with the rest of the portlet state, and put into the Portal's context before re-rendering the portlet.

      As an aside, I haven't looked at JBoss Portal, but I imagine that they take an approach that isn't as asinine as BEA's to solve this problem. :-) Portals would make much more sense if only WSRP were really feasible.

      FYI - I'm desperately pushing the need for JavaEE 5 (and Seam) adoption mainly on the simple fact that completely counter-intuitive hacks like this pervade any new Java web development that doesn't adopt it (ahem... SPRING... and WLP 10...)

      Any input on this is appreciated - sorry if I didn't do a good job of explaining the problem. Have a look at the following link if you can bare a little more info:

      http://forums.bea.com/thread.jspa?threadID=200019490