Plutoの使い方

1.1 は Maven2 になって、まだ、ビルド手順がはっきりしないので、1.0.2 のビルド方法について・・・

まず、チェックアウト・・・

$ svn checkout http://svn.apache.org/repos/asf/portals/pluto/branches/ pluto-1.0.2 pluto-1.0.2
$ cd pluto-1.0.2

そんで、~/build.properties に maven のプロパティをセット。

maven.tomcat.home=/jakarta-tomcat-5.0.30/
maven.tomcat.version.major=5

そして、ビルド・・・

$ maven clean fullDeployment

あとは、Tomcat を動かして、http://localhost:8080/pluto/portal にアクセスすれば、完了だが、自前のポートレットを足さないとつまらないので、http://cvs.sourceforge.jp/cgi-bin/viewcvs.cgi/pal/helloworld/ のソースコードをチェックアウトして、maven war でビルド。そして、それをPlutoへ加える。

$ maven deploy -Ddeploy=/pal/helloworld/target/helloworld.war

ただ、加えただけでは表示されないので、PlutoをfullDeployと上のdeployをしたあとに、$TOMCAT_HOME/webapps/pluto/WEB-INF/data/pageregistry.xmlを編集。以下のものを加える。

<fragment name="helloworld" type="page">
<navigation>
<title>HelloWorld</title>
<description>...</description>
</navigation>
<fragment name="row" type="row">
<fragment name="col1" type="column">
<fragment name="p1" type="portlet">
<property name="portlet" value="helloworld.HelloWorld"/>
</fragment>
</fragment>
</fragment>
</fragment>

あとは、実行すれば、表示される。管理ポートレットみたいなところからも配備できるみたいだけど、未確認。以上。

HttpClientでユーザーエージェントを設定する

HttpClient オブジェクトに対して、以下のようにすると良いらしい。

httpClient.getParams().setParameter(HttpMethodParams.USER_AGENT, "Foo Browser");

Accept-Languageについて、どうやってセットするか探してみたけど、HttpClientにはないような気が。Methodの方で、addRequestHeader(String,String)でやるしかないのかね。

GenericPortletについて

ポートレットフィルタをApacheへ渡すためにいくつか足りない部分について、検討するために、GenericPortletについて、見てみる。GenericPortlet は、Portlet と PortletConfig をインターフェースとして持つ。init では、渡されたPortletConfigをフィールドのprivate PortletConfig config に渡して、init() を呼ぶだけ。init()は各ポートレットの実装で上書きされたものを呼び出す。GenericPortlet は PortletConfig インターフェースを持っているので、そのconfigの各メソッドの代理をする。というわけで、単純に右から左に渡すだけで、PortletConfigインターフェースの対応は完了。そんで、processActionは各実装で上書きされるとして(上書きしないと、PortletException(“processAction method not implemented”)を投げてくる)、renderについては、response.setTitle(getTitle(request))をした後に、doDispatchで、doViewとかに振り分ける。ここでの、getTitle(RenderRequest request)では、portlet.xmlで指定されたリソースバンドルのjavax.portlet.titleから取ってきて渡すだけ。doDispatchについては、request.getWindowState()でポートレットのウィンドウ状態を取得して、WindowState.MINIMIZED以外の時にdoViewなどの各renderを実行する。WindowState.MINIMIZEDのときは、何もせずに終了。各renderの振り分けは、request.getPortletMode()でモードを取得して、PortletMode.VIEW、PortletMode.EDIT、PortletMode.HELPのときに対象のdo???を実行。それ以外のモードでは、PortletException(“unknown portlet mode: ” + mode)を投げてくる(つまり、独自のモードをポータルで実装したときには、doDispatchを上書きして、新たなGenericPortletみたいのを作っておかないと、表示できない感じがする。うーん、JSR 168 にもこの辺のことは書いてあるかと思うが、忘れた・・・)。