コンテンツのサブスクライブ(投稿)やプレゼンテーション(表現)管理の標準的なやり方が求められて
いた事は早いうちから明らかでした。
ポートレットの目指すところ:
- 複数に亘る(がしかし)小さいウェブアプリケーションをユーザに利用可能にさせる。
- ユーザが背景色・タイトルバーの色・アイコンなどを選択可能となるよう、これらのウェブアプリケーションを"skin"する。
- キャッシュ・サブシステムを使う事で、複数ポートレットであってもパフォーマンスを維持させる。
- 利用可能な全てのウェブアプリケーションを絶えず監視し、ユーザにその情報を提供する。
- 独自ページの生成を非常に容易にする為に、ユーザの選択を簡単にする。それらはTurbine画面にとても似ているが、与えられたいかなる画面内でも複数のポートレットを持つことが出来るということだけが違う。
- キャッシュ・サブシステムを速くする。其の事で、データベースを使う複合的ポートレットであってもHTMLを速く生成する事が出来る。
- 開発を容易にし、開発者が自分のポートレットが動いているJetspeedエンジンの詳細の実装を知らなくても済むようにする。
- 別のタイプのコンテンツの生成をポートレットが出来るようにする。ポートレットは、JDBCを通じたデータベース機能あるいは、Cocoonか何かを通じたXML -> XSL -> HTMLの複合的生成機能を使える。
- 背景色・ポートレットの幅・タイトルバーの色をユーザが変更できるよう、ポートレットが自身を"skin"するようにする。
- ポートレットは、PortletControllerで管理されている。このコントローラが明確な実装であり、独自の生成機能を提供する為に開発者がこのコントローラを変更可能となるようにする。
- ポートレットはPortletControlによって生成され保持される。PortletControlがポートレットにスキンを加え、コンテンツを戻すようにする。
- カテゴリベースのサブスクリプションを提供する。Jetspeed内のXMLサブスクリプションフレームワークが、ポートレットを(Portlet Markup Language を通じて)カテゴリに分類する事のできるようにする。これにより、容易なポートレットの管理が可能となる。
- URLやパラメタのハッシュテーブルを含むPortletConfigオブジェクトが、ポートレットに渡されるようにする。このやり方により、PortletConfigを監視することで、ポートレットが稼動中に設定を柔軟に合わせる事ができる。
- AbstractPortletが殆どの場面に措ける殆どの振る舞いを定義するよう、容易に書けるようにする。
ポートレットの例としては、ウェブページ内で動き、LDAPサーバに電話番号のセットを問い合わせる、小さいコントロールがあるでしょう。
Jetspeedの外で開発され、XMLファイルを修正し正しい場所を指すようにする事でフレームワーク内に組み込まれるでしょう。
独自ポートレットの開発は簡単であり、Portletメソッドの独自の実装による"Portlet"インターフェースの実装の問題でしかありません。
ポートレットは、自身がウェブアプリケーションとなるようセットアップされることもあるでしょう。
アプリケーションとして設定(getApplication() == true)されたポートレットは、全画面でのみ動きます。
"Portlications"(ポートレット・アプリケーション)を画面に一度に複数持つことは出来ません。
Jetspeedのナビゲーション機能を通じてなら、ユーザからいつでもアクセスされます。
ポートレットにはPortletConfigがあります。動作時の設定情報を決定する為、ポートレット内でPortletConfigが使われます。
ポートレットは、振る舞いを変更するために与えられるパラメタを取得する事ができます。
そのパラメタとは、普通のサーブレットパラメタ(ServletRequest・ServletResponse・Turbine RunData)です。
Jetspeed は、2・3のポートレット実装と共に世に送り出されています:
- RSSPortlet
RDFサイトサマリ形式でレンダリングし、HTML形式でユーザに表現します。
FileServerPortlet
ユーザにHTML文書をURLから出します。
CocoonPortlet
スタイルシートとURLをパラメタとして取り、Cocoonによって変換し、コンテンツをユーザに戻します。
PortletViewerPortlet
ユーザがポートレットの追加情報(設定オプション・URL・プロパティを含む)を得る為の方法を与えます。第三者のリソースの複製(現在はAvantgo)といった追加オプションをここに含める事も出来ます。