<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	>
<channel>
	<title>Comments on: Is the Portlet Programming Model Broken?</title>
	<atom:link href="http://www.subbu.org/blog/2006/06/is-the-portlet-programming-model-broken/feed" rel="self" type="application/rss+xml" />
	<link>http://www.subbu.org/blog/2006/06/is-the-portlet-programming-model-broken</link>
	<description>HTTP, REST and some Cycling</description>
	<pubDate>Wed, 07 Jan 2009 00:17:53 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Matt</title>
		<link>http://www.subbu.org/blog/2006/06/is-the-portlet-programming-model-broken/comment-page-1#comment-114</link>
		<dc:creator>Matt</dc:creator>
		<pubDate>Mon, 19 Mar 2007 21:03:28 +0000</pubDate>
		<guid isPermaLink="false">http://wp.subbu.org/2006/06/is-the-portlet-programming-model-broken/#comment-114</guid>
		<description>Subbu, thank you very much for this nice overview of post-redirect-get in portlets. I assume that this is within one portlet, and that the ActionResponse.sendRedirect() in the processAction is redirecting to a render url of that same portlet. I can see this being a valid implementation of the PRG pattern.

However I do see a potential issue with cooperative portlets. Let's say portletA has a "POST" form, and in its action phase it uses the property broker to call portletB. portletB could do a redirect to its own render URL, but wouldn't the back-button in this scenario ultimately re-run portletA's POST, and get the "Warning: Page Expired" experience?

I'm curious enough now that I'll have to try it for myself, assuming you don't know off-hand.

Thanks again, this is the best source of info I've found on the PRG pattern in portlets.
</description>
		<content:encoded><![CDATA[<p>Subbu, thank you very much for this nice overview of post-redirect-get in portlets. I assume that this is within one portlet, and that the ActionResponse.sendRedirect() in the processAction is redirecting to a render url of that same portlet. I can see this being a valid implementation of the PRG pattern.</p>
<p>However I do see a potential issue with cooperative portlets. Let&#8217;s say portletA has a &#8220;POST&#8221; form, and in its action phase it uses the property broker to call portletB. portletB could do a redirect to its own render URL, but wouldn&#8217;t the back-button in this scenario ultimately re-run portletA&#8217;s POST, and get the &#8220;Warning: Page Expired&#8221; experience?</p>
<p>I&#8217;m curious enough now that I&#8217;ll have to try it for myself, assuming you don&#8217;t know off-hand.</p>
<p>Thanks again, this is the best source of info I&#8217;ve found on the PRG pattern in portlets.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Subbu Allamaraju</title>
		<link>http://www.subbu.org/blog/2006/06/is-the-portlet-programming-model-broken/comment-page-1#comment-113</link>
		<dc:creator>Subbu Allamaraju</dc:creator>
		<pubDate>Fri, 06 Oct 2006 06:50:04 +0000</pubDate>
		<guid isPermaLink="false">http://wp.subbu.org/2006/06/is-the-portlet-programming-model-broken/#comment-113</guid>
		<description>In the case of portlets, it is the responsibility of the portal or more accurately the aggregating app to redirect after POST.
</description>
		<content:encoded><![CDATA[<p>In the case of portlets, it is the responsibility of the portal or more accurately the aggregating app to redirect after POST.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Behi</title>
		<link>http://www.subbu.org/blog/2006/06/is-the-portlet-programming-model-broken/comment-page-1#comment-112</link>
		<dc:creator>Behi</dc:creator>
		<pubDate>Fri, 06 Oct 2006 06:42:46 +0000</pubDate>
		<guid isPermaLink="false">http://wp.subbu.org/2006/06/is-the-portlet-programming-model-broken/#comment-112</guid>
		<description>Hi,

Is it the responsibility of the Portal to handle Redirect-after-Post automatically or it is up to the user to implement this in the processAction!?

Could you please give your opinion about

&lt;a href="http://my.opera.com/behrangsa/blog/show.dml/498527#comments" rel="nofollow"&gt;&lt;a href="http://my.opera.com/behrangsa/blog/show.dml/498527#comments" rel="nofollow"&gt;http://my.opera.com/behrangsa/blog/show.dml/498527#comments&lt;/a&gt;&lt;/a&gt;

and

&lt;a href="http://my.opera.com/behrangsa/blog/show.dml/501538" rel="nofollow"&gt;&lt;a href="http://my.opera.com/behrangsa/blog/show.dml/501538" rel="nofollow"&gt;http://my.opera.com/behrangsa/blog/show.dml/501538&lt;/a&gt;&lt;/a&gt;

?

Best regards,
Behi
</description>
		<content:encoded><![CDATA[<p>Hi,</p>
<p>Is it the responsibility of the Portal to handle Redirect-after-Post automatically or it is up to the user to implement this in the processAction!?</p>
<p>Could you please give your opinion about</p>
<p><a href="http://my.opera.com/behrangsa/blog/show.dml/498527#comments" rel="nofollow"></a><a href="http://my.opera.com/behrangsa/blog/show.dml/498527#comments" rel="nofollow">http://my.opera.com/behrangsa/blog/show.dml/498527#comments</a></p>
<p>and</p>
<p><a href="http://my.opera.com/behrangsa/blog/show.dml/501538" rel="nofollow"></a><a href="http://my.opera.com/behrangsa/blog/show.dml/501538" rel="nofollow">http://my.opera.com/behrangsa/blog/show.dml/501538</a></p>
<p>?</p>
<p>Best regards,<br />
Behi</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Behi</title>
		<link>http://www.subbu.org/blog/2006/06/is-the-portlet-programming-model-broken/comment-page-1#comment-111</link>
		<dc:creator>Behi</dc:creator>
		<pubDate>Tue, 12 Sep 2006 05:41:30 +0000</pubDate>
		<guid isPermaLink="false">http://wp.subbu.org/2006/06/is-the-portlet-programming-model-broken/#comment-111</guid>
		<description>Hi Subbu,

Man, when are you going to write about the fundamental problems of JSF?

-Behi
</description>
		<content:encoded><![CDATA[<p>Hi Subbu,</p>
<p>Man, when are you going to write about the fundamental problems of JSF?</p>
<p>-Behi</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Idempotent</title>
		<link>http://www.subbu.org/blog/2006/06/is-the-portlet-programming-model-broken/comment-page-1#comment-110</link>
		<dc:creator>Idempotent</dc:creator>
		<pubDate>Tue, 20 Jun 2006 09:36:06 +0000</pubDate>
		<guid isPermaLink="false">http://wp.subbu.org/2006/06/is-the-portlet-programming-model-broken/#comment-110</guid>
		<description>Very invaluable blog post! I can't belive that I have been developing Web apps for more than a year without knowing this whole idempotent/non-idempotent thing!

I am badly waiting for your post on the wrong doings of JSF.

Best Wishes,
The Idempotent Guy (?)
</description>
		<content:encoded><![CDATA[<p>Very invaluable blog post! I can&#8217;t belive that I have been developing Web apps for more than a year without knowing this whole idempotent/non-idempotent thing!</p>
<p>I am badly waiting for your post on the wrong doings of JSF.</p>
<p>Best Wishes,<br />
The Idempotent Guy (?)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Kirit</title>
		<link>http://www.subbu.org/blog/2006/06/is-the-portlet-programming-model-broken/comment-page-1#comment-109</link>
		<dc:creator>Kirit</dc:creator>
		<pubDate>Sat, 17 Jun 2006 06:36:29 +0000</pubDate>
		<guid isPermaLink="false">http://wp.subbu.org/2006/06/is-the-portlet-programming-model-broken/#comment-109</guid>
		<description>I've written about this issue myself at &lt;a href="http://www.kirit.com/The%20%E2%80%9CCorrect%E2%80%9D%20way%20to%20process%20forms" rel="nofollow"&gt;&lt;a href="http://www.kirit.com/The%20%E2%80%9CCorrect%E2%80%9D%20way%20to%20process%20forms" rel="nofollow"&gt;&lt;a href="http://www.kirit.com/The%20%E2%80%9CCorrect%E2%80%9D%20way%20to%20process%20forms" rel="nofollow"&gt;http://www.kirit.com/The%20%E2%80%9CCorrect%E2%80%9D%20way%20to%20process%20forms&lt;/a&gt;&lt;/a&gt;&lt;/a&gt;

I go into some details about when NOT to use it as well and which redirets to use for best effect. There are also things about error messages etc. that need some consideration as well as login forms.

I like the diagrams. Wish I'd thought of them too. I'll link to this from my article though.
</description>
		<content:encoded><![CDATA[<p>I&#8217;ve written about this issue myself at <a href="http://www.kirit.com/The%20%E2%80%9CCorrect%E2%80%9D%20way%20to%20process%20forms" rel="nofollow"></a><a href="http://www.kirit.com/The%20%E2%80%9CCorrect%E2%80%9D%20way%20to%20process%20forms" rel="nofollow"></a><a href="http://www.kirit.com/The%20%E2%80%9CCorrect%E2%80%9D%20way%20to%20process%20forms" rel="nofollow">http://www.kirit.com/The%20%E2%80%9CCorrect%E2%80%9D%20way%20to%20process%20forms</a></p>
<p>I go into some details about when NOT to use it as well and which redirets to use for best effect. There are also things about error messages etc. that need some consideration as well as login forms.</p>
<p>I like the diagrams. Wish I&#8217;d thought of them too. I&#8217;ll link to this from my article though.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: David Phipps</title>
		<link>http://www.subbu.org/blog/2006/06/is-the-portlet-programming-model-broken/comment-page-1#comment-108</link>
		<dc:creator>David Phipps</dc:creator>
		<pubDate>Fri, 16 Jun 2006 13:19:48 +0000</pubDate>
		<guid isPermaLink="false">http://wp.subbu.org/2006/06/is-the-portlet-programming-model-broken/#comment-108</guid>
		<description>Interesting - what you describe here is the WSRP model of a portlet, rather than the model used by Plumtree Software (now BEA).

In Plumtree portlets, the portal stores all preferences, and also stores all links to key navigational elements in the portal application (such as preference pages).  Navigation state is maintained by the portlet application itself; trying to stuff that nav data into a WSRP node, and maintain it through careful shepherding of what you send back in URL requests, is inherently a broken design.

The Plumtree model uses the concept of a "transformer" - literally, rewriting all links in the portlet application, including rewriting of javascript in the portlet application that forms links.  This allows all link requests to be mediated by the portal automatically, without having to resort to recoding your application using an API.  This mediation allows for pattern detection, which means you can detect when you've entered a "preference" page and therefore control what information you send to the portlet to use for rendering (i.e., user profile data, locale information, preferences and so on).

It also allows you to specify "gateway spaces", or other URL patterns (read: multiple domains) that get rewritten.  This lets you, for instance, mix content from multiple websites into a single portlet.  Traditional IT views this as a secuirty risk; standard web software development views this as an absolute requirement.  The classic example is that of an imageserver: static images are served from one domain, while dynamic content is served from another domain.

The URL rewriting feature also menas you can click on links in the portlet, but configure the portal to use in-place refresh (AJAX) to update the content, allowing you to update only a single portlet instead of many in a page refresh.

The standard model described by JSR-168 and WSRP 1.0 actually represents a complicated mix of producer and consumer on each end of the conversation.  The correct design would have one end being the one and only producer, responsible for its own content, and the the portal end being a consumer, responsible for accurate rendering of the content, regardless of what button is clicked in the portlet application.
</description>
		<content:encoded><![CDATA[<p>Interesting - what you describe here is the WSRP model of a portlet, rather than the model used by Plumtree Software (now BEA).</p>
<p>In Plumtree portlets, the portal stores all preferences, and also stores all links to key navigational elements in the portal application (such as preference pages).  Navigation state is maintained by the portlet application itself; trying to stuff that nav data into a WSRP node, and maintain it through careful shepherding of what you send back in URL requests, is inherently a broken design.</p>
<p>The Plumtree model uses the concept of a &#8220;transformer&#8221; - literally, rewriting all links in the portlet application, including rewriting of javascript in the portlet application that forms links.  This allows all link requests to be mediated by the portal automatically, without having to resort to recoding your application using an API.  This mediation allows for pattern detection, which means you can detect when you&#8217;ve entered a &#8220;preference&#8221; page and therefore control what information you send to the portlet to use for rendering (i.e., user profile data, locale information, preferences and so on).</p>
<p>It also allows you to specify &#8220;gateway spaces&#8221;, or other URL patterns (read: multiple domains) that get rewritten.  This lets you, for instance, mix content from multiple websites into a single portlet.  Traditional IT views this as a secuirty risk; standard web software development views this as an absolute requirement.  The classic example is that of an imageserver: static images are served from one domain, while dynamic content is served from another domain.</p>
<p>The URL rewriting feature also menas you can click on links in the portlet, but configure the portal to use in-place refresh (AJAX) to update the content, allowing you to update only a single portlet instead of many in a page refresh.</p>
<p>The standard model described by JSR-168 and WSRP 1.0 actually represents a complicated mix of producer and consumer on each end of the conversation.  The correct design would have one end being the one and only producer, responsible for its own content, and the the portal end being a consumer, responsible for accurate rendering of the content, regardless of what button is clicked in the portlet application.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
