WebProxyポートレット

J2にも入っていて、ありがちなポートレットなのだけど、実装した。やりたいことを、そこいらのウェブページをポートレット上に表示するということ。つまり、ポートレットが、たとえば、Yahooのページを取ってきて、ポートレットで不要なタグを削除して、そのコンテンツをポートレット上に表示する。表示する際にはリンクを書き換えておいて、クリックしたら、またポートレットがウェブページを取ってきて、ポートレット内に表示する。まぁ、ありがちなポートレットなのだけど、S2 で実装して、タグに関する処理を変えられるようにしておいた(J2に入っているrewriterもカスタマイズがいまいち分かりにくいからいやだったのだよね・・・)。なので、結構、HTMLの書き換えのカスタマイズ性は高いと思う。まぁ、現状はPOSTをサポートしてなかったりするので、あとあと考えていきたいと思う。というような感じの品物です(ありがちなものだけど、結構、使用頻度は高いような気がするけどね)。

JSR 286 Portlet Specification 2.0 (PLT.3 – PLT.5.3.2)

PLT.3 Relationship with the Servlet Specification

EventやResource関連が追加されたので、その影響による文の変更かね。ポートレットはserveResourceを通して、リソースを描画するときにレスポンスをフルコントロールできるといっている(何となくイメージは分かるが、詳細を見ないと何とも言えないな。たぶん、ResourceURLで返すリソースのレスポンスの話の気がするけど)。

PLT.4.3 Portlets and Web Frameworks

2.0 からprocessAction、processEvent、render、serveResourceと処理でよばれるのが増えているので、個人的には、他のフレームワークでどうするのかが気になっている(Teedaをどう対応させていくかとか・・・)。この節では、2.0ではフレームワークへのブリッジを簡単に実装する追加手段を用意すると書いてあるけど、何を意味するのだろうか・・・(後述なの??)。

PLT. 5The Portlet Interface and Additional Life Cycle Interfaces

Eventを受け取ったり送ったりするインターフェースとしてEventPortlet、リソースを供給するインターフェースとしてResourceServingPortletが追加されたといっている。これに伴い、GenericPortletは、Portlet、EventPortlet、ResourceServingPortletのインターフェースを実装したとのこと。

PLT.5.2 Portlet Life Cycle

EventPortletとResourceServingPortletが追加の省略可能なライフサイクルだといっている。

PLT.5.2.2.1 Error Conditions on Initialization

これは従来どおりの話なのだけど、initでUnavailabeExceptionを投げるときに時間を指定しておけば、再度、initを呼びにいってもいいのね。前に呼んだときは、気にも留めなかったけど、近頃、initでPortletExceptionを投げるコードもよく書くので、気になっただけ。

PLT.5.2.3 End of Service

destroyメソッドを呼ぶ話。destoryを呼ぶ前にポートレットオブジェクトのリクエスト処理を完了させるとか、リクエスト処理完了を永久に待ち続けると困るから、タイムアウトを設定可能とか、destoryでRuntimeExceptionが発生しても、destoryは完了したとみなすとかかな。まぁ、その他に書いてあることは、その名の通り、destory ですということ。あ、でも、よく見たら、この節は1.0にもあった。

PLT.5.3.1 Portlet Definition and Portlet Entity

別に新しい話ではない気がする。単にPortletPreferencesについて、改めて、言っているだけかな。まぁ、管理ツールなどをポータルが提供してもいいよ、という感じのことを言っているだけかな。

PLT.5.3.2 Portlet Window

ポートレットのウィンドウIDは、PortletRequest.getWindowId()で取得可能といっている。ポートレットスコープのセッションとかは、こいつがキーとして使われる(実際には、キーにウィンドウIDが付加される形だと思うけど)。あとは、ウィンドウIDは?を含まないと書いてある(PLT.17.3を見ろとかいてある)。

とりあえず、ここまで・・・。まだ先は長し・・・。

JSR 286 Portlet Specification 2.0 (PLT.1 – PLT.2)

JSR 168 から何が変わるのか、変更点をメインに確認していこう。

PLT.1.4 Other Java™ Platform Specifications

  • Java 2 Platform, Enterprise Edition, v1.4 (J2EE™)
  • Java Servlet™, v2.4
  • JavaServer Pages™, v2.0 (JSP™)
  • The Java™ Architecture for XML Binding (JAXB) 2.0

JAXB は変わらないけど、そのほかが以上のバージョンを利用するようになる。

PLT.2.5 Compatibility

JSR 168 のポートレットも動くよ、っといっている。つまり、バイナリコンパチ。

PLT.2.6 Major changes introduced with V 2.0

新機能についてはまとめてある。

  • Events – enabling a portlet to send and receive events and perform state changes or send further events as a result of processing an event.
  • Public render parameters – allowing portlets to share render parameters with other portlets.
  • Resource serving – provides the ability for a portlet to serve a resource.
  • Portlet filter – allowing on the fly transformations of information in both the request to and the response from a portlet

前からいわれていたことだね。Shared session attributes とかもあったけど、なくなっているな・・・。Public render parameters でカバーできるということなのだろうか。まぁ、そのほかは、Event は他とやりとりするイベント処理メカニズムだし、Public render parameter は他とrender parameter の共有(ウェブアプリケーションの範囲を越えられるのだろうか?)、Resource serving は、現状では、ウェブアプリ経由で画像とかにアクセスしていたのをポータル経由にする(ことだった気がする)、ポートレットフィルタはサーブレットフィルタみたいなフィルタのことね。

PLT.2.6.1 Clearifications that may make V1.0 Portlets Noncompliant

まず、ポートレットURLが 2.0 では、XMLエスケープされるとある。それに伴い、javax.portlet.escapeXml というものがあるらしい(PLT.26.7を見ろとある)。

ポートレットのparamタグで、同じ名前のparamタグを複数使った場合、配列になるとある。1.0 のときは、最後のやつが有効になるのを想定していたので、異なる動きになるようだ。

1.0 では getProtocolでnullが返ってきたけど、2.0 からは GenericServet で値を返してくるらしい。HTTP/1.1 とか。

ポートレットURLにあるパラメーターとPOSTの本文内のパラメーターがマージして取得できるようだ。(ということは、URLにパラメータを書けば得られるのだろうか・・・J2だと、jetspeed-portlet.xmlで設定すれば取得可能だけど)

PLT.2.6.3 Changes to the Programming Model

portlet.xml にxml:langでローカライズされていたものを書けていたけど、リソースバンドルにいろいろと記述できるようにしたといっている。まぁ、私的にはportlet.xmlに書けて楽だったけど、全部、リソースバンドルに移したら、移したで面倒なんだよね・・・。英語圏の人からすると、portlet.xml にごみがちらかって、嫌だったんだろうな・・・。

  • PLT.2.7 Relationship with Java 2 Platform, Standard and Enterprise Edition

Java SE 5 だといっている。まぁ、予定通り。Java SE 1.4 でも利用はできるけど、次のものができないといっている。

  • enum P3PUserInfos
  • annotations ProcessAction, ProcessEvent, RenderMode
  • generics for collections

とりあえず、今日はここまで・・・