Wiki の方で書いたものをバックアップを兼ねて、ここにも書いておこ・・・。
はじめに
Teeda は、サーブレット以外にもポートレットして動作することをサポートしています。 これは、JSF がポートレットをサポートしているためです(しかし、現状、ポートレットをきちんとサポートしている JSF 実装は数少ないです。Teeda はきちんとサポートする実装の一つといえます!)。 ですので、Teeda Core がポートレットをサポートしているのはもちろんですが、さらに、Teeda の拡張である Teeda Extension についてもポートレットをサポートしているので、サーブレット環境での開発と変わることがなく、ポートレットアプリケーションの開発が行えます。
ポートレットについて
まず、ポートレットについて、簡単に説明します。 Java ベースのポートレットは、JSR 168 Portlet Specification にて、ポートレット API が定義されています。 そこでは、ポートレットとは、リクエストを処理して、動的にコンテンツを生成するポートレットコンテナによって管理される、Java ベースのウェブコンポーネントで、プレゼンテーション層を情報システムに提供する交換可能なユーザーインターフェースコンポーネントとして、ポータルによって使用される(PLT.2.2)と定義されています。 また、ポータルとはウェブベースアプリケーションで、表示、シングルサインオン、異なる発信元からのコンテンツ集約を提供して、情報システムのプレゼンテーション層を提供する(PLT.2.1)と定義されています。
仕様的な定義は以上のような感じですが、簡単にまとめると、ポートレットはポータル(サーバー)上の小窓(フラグメント)で、リクエストを処理して、コンテンツをその小窓の中に表示するものです。 JSR 168 では、そのための仕様を定義しています。
ポートレットとJSF
ポートレットで JSF を使うメリットは何でしょうか? JSF をプレゼンテーション層のフレームワークとして利用しない場合、ポートレット API を習得する必要があります。 しかし、JSF をポートレットで利用した場合、JSF にラップされるので、ポートレット API を意識する必要はありません(PortletPreferencesなどポートレット固有の API を使う場合は別ですが)。 ですので、JSF を利用することでウェブアプリケーションを作成する感覚で、ポートレットを作成できてしまうわけです。
ウェブアプリケーションからポートレットへの拡張
前置きが長くなりましたが、今まではポートレットの開発するために、学習などのコストがあったかもしれませんが、Teeda での開発を知っていれば、その知識をそのまま利用して、ポートレットの開発も行えます(ポータル固有の機能を利用する場合以外は、別途、ポートレットの開発方法を学習する必要はありません!)。Teeda で作成されたウェブアプリケーションをポートレットにするためには、以下のことを行うだけでポートレットになります。
- web.xmlを変更
- portlet.xmlを追加
- ポートレットフィルタとS2Portletのjarを追加
- jspやhtmlからhtml,head,bodyタグを削除する
web.xml の編集
まず、web.xml については、Teeda をサーブレットで初期化しているのであれば TeedaServlet、リスナーで初期化しているのであればTeedaConfigureListener を利用していると思います。 ポートレット環境で利用するためには、TeedaServlet であれば TeedaPortletExtendedServlet に、TeedaConfigureListener であれば TeedaPortletExtendedConfigureListener に書き換えてください。 それらに置き換えることで、S2 および Teeda でポートレットがサポートされます。 web.xml の変更はこれだけで OK です。
portlet.xml の追加
次に、portlet.xml ですが、これは JSR 168 で定義されているポートレット配備子です。 ポータルサーバー上に表示するポートレットの情報を記述します。 たとえば、以下のような内容をこのファイルに記述します。
<?xml version="1.0" encoding="UTF-8"?> <portlet-app version="1.0"> <portlet> <portlet-name>TeedaHtmlExample</portlet-name> <display-name>Teeda HTML Example</display-name> <description>This is an example portlet for Teeda.</description> <portlet-class>org.apache.portals.bridges.portletfilter.FilterPortlet</portlet-class> <init-param> <name>portlet-class</name> <value>org.seasar.teeda.core.portlet.FacesPortlet</value> </init-param> <init-param> <name>portlet-filters</name> <value>org.seasar.portlet.filter.S2PortletFilter,org.seasar.portlet.filter.HotdeployPortletFilter</value> </init-param> <init-param> <name>view-page</name> <value>/view/start/index.html</value> </init-param> <!-- <init-param> <name>edit-page</name> <value></value> </init-param> --> <supports> <mime-type>text/html</mime-type> <portlet-mode>VIEW</portlet-mode> <!-- <portlet-mode>EDIT</portlet-mode> --> </supports> <supported-locale>en</supported-locale> <supported-locale>ja</supported-locale> <!-- resource-bundle></resource-bundle --> <portlet-info> <title>Teeda HTML Example</title> <short-title>Example</short-title> <keywords>Teeda HTML Example</keywords> </portlet-info> </portlet> </portlet-app>
まず、portlet-name 要素の値には、ポータルにより利用される一意なポートレット名が入ります。
display-name 要素の値はポータルにより表示される(たとえば、ユーザーがポートレット一覧からポートレットを選択するときなど)ポートレットの名前で、次の description 要素の値がその説明になります。
portlet-class 要素と init-param 要素にある portlet-class および portlet-filters は変更する必要はありません。
init-param 要素の view-page の値は、表示モードでアクセスされたときにデフォルトで表示されるページのパスを記述します(編集モードで表示するページは、edit-page で指定します)。 ポートレットで表示されるポートレットには、表示モードや編集モードなどいくつかのモードがあり、たとえば、ポートレットの小窓の右上にある編集ボタンを押すと、編集モードが呼ばれます。 サポートされるポートレットモードは、supports 要素の portlet-mode 要素としてサポートするモードを指定できます。
あとは、potlet-info 要素の title、short-title、keywords 要素を変更してください。 title 要素はポートレットの小窓のバーなどに表示されるタイトルで、short-title はその短いタイトルで、ポータルがモバイル環境で表示されるときに短いタイトルが必要なときに表示されます。 keywords 要素は、そのポートレットのキーワードで , 区切りで複数指定できます。 ポータルのポートレット一覧で検索するときなどに利用されます。
必要な場所を変更して、portlet.xml として、WEB-INF の下に保存してください(他にもいろいろな要素がありますが、必要に応じて、追加してください)。
必要な jar ファイルの追加
web.xml と portlet.xml を編集したら、必要な jar ファイルを追加します。 追加するものは、Apache Portals Bridges より提供されるポートレットフィルタと、Seasar Project より提供される S2Portlet です。 それぞれ以下のところから入手できます。
- S2Portlet: http://s2portlet.sandbox.seasar.org/
- Portlet Filter: http://portals.apache.org/bridges/
(ポートレットフィルタについては、1.0.1 以降がリリースされるまでは http://people.apache.org/~shinsuke/maven2/org/apache/portals/bridges/portals-bridges-portletfilter/1.0.1-20061109/portals-bridges-portletfilter-1.0.1-20061109.jar を利用することを推奨します)
不要なタグの削除
最後に、サーブレット環境用に作ると出力される HTML ページは、html、head、body タグなどが含まれます。 しかし、ポートレット環境においては、それらのタグはポータルが出力するため、ポートレットは、body タグより下の部分しか表示する必要はありません。 それらのタグがあったも、無視してくれるブラウザもあるかと思いますが、きちんとしたポートレットを作成したい場合には、削除してください(PAL プロジェクトでは不要なタグを削除するポートレット出力オプティマイザーを提供しています: http://sourceforge.jp/projects/pal/ )。
ポートレットアプリケーションの war ファイルの作成
以上の編集をしたら、ウェブアプリケーションを作成するのと同様に、war ファイルを作成してください。 そして、その作成された war ファイルは、ポートレットアプリケーションです。
以上で、ポートレットアプリケーションが完成しましたので、その war ファイルを各ポータルの配備手順に従って、配備してください。