Jetspeed2/PALポータルでは、メインで使っているので、SAStruts なポートレットも動くのは確実なのですけど、Liferayとかであまり試していなかったので、動かしてみました。使ったのは、Liferay 5.1.2 と JBoss Portal 2.7.0 です。
で、まず、Liferayから試したけど、普通にうごきませんね・・・。PAL の英語の ML でも動かんと突っ込まれていたけど、ほんとに動いてないみたい。確認してみると、ActionServlet が見つからんと怒られる。原因は、Liferay が配備後に、web.xml に com.liferay.portal.kernel.servlet.PortletContextListener をリスナーとして追加するのだけど、こいつが org.seasar.struts.portlet.servlet.ActionServlet より先に実行して、ポートレットを初期化するもんだから、ActionServlet が存在しないときにアクセスされて、ActionServlet がないと言われる。というわけで、これについては、ポートレットが init() で ActionServlet にアクセスするのをやめて、render() とかで必要に応じてアクセスするように SAStruts ポートレットを変更した。
あと、うちの社内テストで Liferay にポートレットを配備したときに、何かをサブミットすると動きませんみたいなことも言われていて、試したら、確かにサブミットで文句を言う。これも確認したら、サブミットした後の render あたりの処理で INCLUDE でポートレット内のサーブレットにアクセスするもんだから、PortletRequestFilter が処理してしまって、NPE になっていた。これは SAStruts ポートレットの processAction() と render() の処理時に処理中フラグを立てているのだけど、処理後に削除することで無事に解決。
次に JBoss Portal で試したら、上の問題も修正されていることもあってか、普通に動いていた。良かった。でも、SAStruts とは関係ないけど、JBoss Portal って、何か、前から進歩がないというか、使いにくいというか・・・。ポートレットのインスタンスを作るときに ID にスペースをいれたら、Exception が出て何ともできなくなり、再インストール・・・(結構、致命的な問題な気もするのだけど、これでいいものなのかね)。そんな感じで、個人的な印象は悪くなった。こんな感じのレベルだと、PAL や SAStruts ポートレットのサポート優先度は下げるべきかなっと。
SAStrutsポートレットについては、修正をコミットしたので、もうちょっとテストしたら、1.0.0-rc4 をリリースしておきます。