ヘッダーをスキップ
Oracle® Fusion Middleware Oracle WebCenter PortalおよびOracle JDeveloperでのポータルの開発
11gリリース1 (11.1.1.8.3)
E49666-03
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次

前
 
次
 

59 JSR 286を使用した標準ベースのJavaポートレットの作成

この章では、Javaポートレット仕様JSR 286を使用して、標準ベースのJavaポートレットを作成する方法について説明します。

この章の内容は、次のとおりです。

59.1 標準ベースのJavaポートレットの概要

WebCenter Portalでは、JSR 286標準を使用した標準ベースのJavaポートレットの作成をサポートしています。

JSR 286は、ポートレットとポータル間の相互運用を可能にし、集約、パーソナライズ、表示形式およびセキュリティの各領域に対処する一連のAPIを定義する仕様です。JSR 286では、次の機能を提供するコンテナ・サービスを定義しています。

詳細は、次の場所にあるJSR 286の仕様を参照してください。

http://jcp.org/en/jsr/detail?id=286

WSRPは、Webサービスの標準です。この標準によって、ポータルまたは他の中間Webアプリケーションを使用するユーザー対象のWebサービスで視覚的なプラグ・アンド・プレイが可能になります。WSRPは標準であるため、標準コンテナとあらゆるWSRPポータル間の相互運用が実現されます。WSRPでは、次の項目を定義しています。

WSRPは、ポートレット・クライアント(たとえば、WebCenter Portal Frameworkアプリケーション)と、リモート・サーバーで実行するポートレット・コンテナとの間の通信を可能にします。JSR 286には、ポートレット・プロデューサ・アプリケーションを実行するためのJavaポートレットAPIについての記述があります。これらの標準を組み合せることで、開発者は、内部または外部のソースからのアプリケーションをポートレットとしてWSRPポータルに統合できます。ページの作成は、JDeveloperの「リソース・パレット」またはアプリケーション・ナビゲータの「アプリケーション・リソース」ペインからのポートレットの選択と同じように簡単になります。

図59-1に、JSR 286ポートレットを使用するWSRP仕様のアーキテクチャを示します。

図59-1 WSRP仕様のアーキテクチャ

図59-1の説明が続きます
「図59-1 WSRP仕様のアーキテクチャ」の説明

JSR 286セキュリティの概念をWSRPで公開する方法は、第74.17項「WS-Securityを使用したWSRPプロデューサを介するアイデンティティ伝播の保護」を参照してください。

59.2 JSR 286 Javaポートレットの作成

WebCenter Portalには、JDeveloperで使用できるウィザードが用意されています。このウィザードを使用すると、JSR 286標準ベースのJavaポートレットの初期フレームワークを短時間で簡単に作成できます。

この項の内容は、次のとおりです。

59.2.1 JSR 286 Javaポートレットの作成方法

JSR 286 Javaポートレットの作成ウィザードでは、実装するポートレット・モードと、各モードに使用する実装メソッド(JSP、HTTPサーブレット、JavaクラスまたはHTML)を選択できます。さらに、ウィザードによって、選択したモードごとに簡単な実装を作成します。

JDeveloperのウィザードを使用して、JSR 286 Javaポートレットを作成するには:

  1. JDeveloperで、ポートレットの作成先であるポートレット・プロデューサ・アプリケーションを開くか、新規ポートレット・プロデューサ・アプリケーションを作成します。

    ポートレット・プロデューサ・アプリケーションの作成方法の詳細は、第57.4.1項「ポートレット・プロデューサ・アプリケーション」を参照してください。


    注意:

    WebCenter Portal - ポートレット・プロデューサ・アプリケーション・テンプレートを使用せずに、ポートレット・プロデューサ・アプリケーションを作成する場合は、テクノロジ・スコープを構築する適切なポートレットをアプリケーションに手動で追加する必要があります。

    WebCenter Portal - Frameworkアプリケーション・テンプレートを使用して構築されたアプリケーションは、ポートレット作成用にスコープ設定されていません


  2. ポートレットを作成するプロジェクト(たとえば、「ポートレット」)を右クリックして、「新規」を選択します。

  3. 「新規ギャラリ」(図59-2)で「Web層」を開き、「ポートレット」「規格に基づいたJavaポートレット(JSR 286)」の順に選択して、「OK」をクリックします。

    図59-2 「規格に基づいたJavaポートレット(JSR 286)」が選択された「新規ギャラリ」

    図59-2の説明が続きます
    「図59-2 「規格に基づいたJavaポートレット(JSR 286)」が選択された「新規ギャラリ」」の説明


    ヒント:

    プロジェクトにJSR 286ポートレットが含まれている場合は、次の方法でも新しいポートレットを作成できます。

    • portlet.xmlを右クリックして、「ポートレットの追加」を選択します。

    • portlet.xmlを開き、「設計」タブをクリックして、「ポートレット」タブの「追加」アイコンをクリックします。


  4. JSR 286 Javaポートレットの作成ウィザードの「一般ポートレット情報」ページで、「名前」フィールドに入力されているデフォルト名を変更して、ポートレットの用途を適切に表すようにします。

  5. 「クラス」フィールドに、ポートレットのクラスの名前を入力します。表示されているデフォルト名を受け入れることも、独自の名前を指定することもできます。新しい名前を入力する場合は、有効なJava名を使用する必要があります。

  6. 「パッケージ」ドロップダウン・リストから、クラスを作成するパッケージを選択するか、パッケージの名前を入力します。

    必要に応じて、「参照」ボタンをクリックして、プロジェクト内のパッケージを検索します。特定のパッケージを選択しないと、ウィザードではプロジェクトのデフォルト・パッケージが使用されます。

  7. 「デフォルト言語」ドロップダウン・リストから、ポートレットでサポートするデフォルト言語を選択します。ウィザードでは、デフォルトで英語が使用されます。

  8. ポートレットで「編集」モードをサポートするには、「ユーザーがポートレット・コンテンツを編集できるようにします」を選択します。ウィザードでは、このオプションがデフォルトで選択されています。

    編集モードを使用すると、ユーザーは実行時にポートレットをパーソナライズできるようになります。詳細は、第57.4.2.2項「編集モード」を参照してください。

    このオプションを選択すると、ポートレットの編集モードについて実装の詳細を後からウイザードで指定できるようになります。

  9. 「次へ」をクリックします。

  10. 「追加ポートレット情報」ページの「ポートレット・タイトル」フィールドに、ポートレットの説明的なタイトルを入力します。

    ポートレット・タイトルは、「リソース・パレット」または「アプリケーション・リソース」パネルに表示されるため、ポートレットが便利かどうかどうかをユーザーが決定するのに役立つタイトルにしてください。ポートレットのタイトルは、ポートレットがページに表示されるとポートレットのヘッダーにも表示されます。


    ヒント:

    「表示名」「短いタイトル」「説明」、および「キーワード」の各属性は、WebCenter Portalには実装されていません。これらのフィールドに、値を入力する必要はありません。ただし、そのポートレットが別のアプリケーションで利用される可能性がある場合を除きます。

    たとえば、Oracle Portalでは、ポートレット・リポジトリでポートレットの表示名を使用します。


  11. ウィザードのこの時点で、「終了」をクリックし、残りのすべての設定にデフォルト値を使用することで、ポートレットをすぐに作成できます。

    ポートレットにその他の詳細を指定するには、「次へ」をクリックし、残りの手順を実行します。

  12. 「コンテンツ・タイプとポートレット・モード」ページの「コンテンツ・タイプとポートレット・モード」リストで、「表示」を選択します。

  13. 「実装メソッド」セクションで、ポートレットに実装する表示モードを選択します(表示モードの詳細は、第57.4.2.1項「表示モード」を参照)。

    • JSPの生成: そのポートレット・モードに応じたスケルトンJSPファイルを生成する場合に選択します。対応するフィールドにJSPの名前を入力するか、デフォルトを受け入れます。

      ウィザードを完了すると、生成されたJSPがアプリケーション・ナビゲータに表示されます。このJSPは、今後の開発の際にアプリケーション・ナビゲータから選択できます。これは、すべてのポートレット表示モードでのデフォルトの選択です。

    • ADF-Faces JSPXの生成: ADF-Facesコンポーネントの追加が可能なページを生成する場合に選択します。対応するフィールドにJSPXの名前を入力するか、デフォルトを受け入れます。

      このオプションを選択すると、ポートレットの実装クラスは、oracle.portlet.bridge.adf.application.ADFBridgePortletのサブクラスとして作成されます。javax.portlet.GenericPortletのサブクラスとしては作成されません。つまり、このウィザードで、Oracle JSF Portlet Bridgeを使用するポートレット・プロデューサ・アプリケーションを生成することになります。Oracle JSF Portlet Bridgeの詳細は、第58章「Oracle JSF Portlet Bridgeを使用したJSFアプリケーションからのポートレットの作成」を参照してください。

    • パスへのマップ: ポートレット・モードを、ポートレット・プロデューサ・アプリケーションのWebリソース(ページなど)にマップする場合に選択します。このリソースは、このウィザードでは生成されません。対応するフィールドに名前とパスを入力します。このリソースは、ウィザードの完了後に必要に応じて作成できます。

      これを選択すると、ターゲットのリソースまたはファイルを自身で書き込む必要があります。ターゲットとしては、たとえば、JSP、サーブレットあるいはHTMLファイルを指定できます。これを選択すると、生成されるポートレットJavaクラスには、特定のモードに対するリクエストを指定したターゲットにルーティングするコードが入力されます。

    • カスタム・コード: カスタム・コード・オブジェクトでポートレット・モードを実装する場合に選択します。このオブジェクトは、後で作成する必要があります。これを選択すること、生成されるポートレットJavaクラスに、コンテンツをレンダリングするためのスケルトン・メソッド(private void doMODE_NAMECONTENT_TYPE)を生成します。役に立つコンテンツをレンダリングするには、このコードを更新する必要があります。


    ヒント:

    このポートレット・モードで別のコンテンツ・タイプ(text/xmlなど)もサポートする場合は、手順16を参照してください。


  14. ウィザードの最初のページで「ユーザーがポートレット・コンテンツを編集できるようにします」を選択した場合は、「編集」を選択して、手順13で説明したように、編集モードに応じた実装メソッドを選択します(編集モードの詳細は、第57.4.2.2項「編集モード」を参照)。

  15. ポートレットに別のポートレット・モードを実装するには:

    1. 「コンテンツ・タイプとポートレット・モード」リストの該当するコンテンツ・タイプ(たとえば、text/html)で、既存のモード(たとえば、「表示」)を選択します。

    2. 「追加」をクリックします。

    3. 「ポートレット・モード」ダイアログで、「選択済」リストに必要なモードを1つ以上移動して、「OK」をクリックします。

      「ポートレット・モード」ダイアログには、JSR 286でサポートされる標準のモードと、WebCenter Portalでサポートされる拡張モードが一覧表示されます。

      詳細は、第57.4.2項「ポートレット・モード」を参照してください。

    4. ポータル・モードをそれぞれ選択して、コンテンツのレンダリングに使用する実装メソッドを指定します。手順13を参照してください。

    図59-3 JSR 286 Javaポートレットへのポートレット・モードの追加

    図59-3の説明が続きます
    「図59-3 JSR 286 Javaポートレットへのポートレット・モードの追加」の説明

  16. コンテンツ・タイプによって、ポートレットでサポートされるコンテンツのタイプが識別されます。ポートレットでは、複数のコンテンツ・タイプをサポートできます。JSR 286 Javaポートレットの作成ウィザードを使用して作成されたポートレットでは、text/htmlコンテンツ・タイプがデフォルトでサポートされます。

    異なるコンテンツ・タイプを追加するには:

    1. 「コンテンツ・タイプとポートレット・モード」リストで、既存のコンテンツ・タイプ(たとえば、text/html)を選択します。

    2. 「追加」をクリックします。

    3. 「コンテンツ・タイプ」ダイアログで、「選択済」リストに必要なコンテンツ・タイプを移動して、「OK」をクリックします。

      • text/html: テキストのHTMLエンコードをサポートします。これはデフォルト選択です。

      • text/xml: テキストのXMLエンコードをサポートします。

      • text/plain: エンコードされていないプレーン・テキストをサポートします。

      • text/vnd.oracle.mobilexml: テキストのOracle Mobile XMLエンコードをサポートします。ただし、WebCenter PortalではOracle Mobile XMLはサポートされません。

      • application/xhtml+xml: テキストのXHTMLエンコードをサポートします。

      • application/xml: XHTMLを含むXMLコンテンツをサポートします。

    図59-4 JSR 286 Javaポートレットへのコンテンツ・タイプの追加

    図59-4の説明が続きます
    「図59-4 JSR 286 Javaポートレットへのコンテンツ・タイプの追加」の説明

  17. 「次へ」をクリックします。

    ウィザードの前のほうの「一般ポートレット情報」ページで、「ユーザーがポートレット・コンテンツを編集できるようにします」を選択した場合は、ポートレット・プリファレンスを作成できます。これにより、ポートレットのユーザーは、実行時にポートレットの値を指定できるようになります。手順18に進みます。

    このオプションを選択していない場合は、手順24に進みます。

  18. 「カスタマイズ・プリファレンス」ページで、「追加」をクリックして、新しいポートレット・プリファレンスをポートレットに追加します。

    このウィザードは、デフォルトで、ユーザーがポートレット・タイトルをカスタマイズできるようにするポートレット・プリファレンスを組み込みます。

  19. 「新規プリファレンスの追加」ダイアログの「名前」フィールドに、新しいプリファレンスの名前を入力します。

    この名前はポートレット内で一意である必要があり、空白を含めることはできません。

  20. 「デフォルト値」フィールドに、新しいプリファレンスの1つ以上のデフォルト値を入力します。複数の値はカンマで区切ります。

  21. 様々な言語でプリファレンスを使用できるようにする場合は、「プリファレンスの翻訳」チェック・ボックスを選択します。

    たとえば、ポートレットが多言語ポータルで利用される可能性がある場合は、適切な言語でプリファレンスを表示する必要があります。

    このオプションを有効にすると、プリファレンスのエントリは、そのポートレット用にJDeveloperが生成するリソース・バンドル・クラスに追加されます。


    ヒント:

    このリソース・バンドルを編集して、プリファレンスの名前とデフォルト値の翻訳を指定します。ほとんどの場合、名前の翻訳は必要になりますが、デフォルト値の翻訳が必要になることはありません(その値が整数の場合など)。


  22. 「OK」をクリックします。

  23. さらに別のプリファレンスを追加する場合は、前の手順を繰り返します。完了したら、「次へ」をクリックします。

  24. 「セキュリティ・ロール」ページで、既存のセキュリティ・ロールをポートレットに追加するには、セキュリティ・ロールを選択して、「選択済」リストに移動します。

    セキュリティ・ロールを使用すると、ポートレットに階層レベルのアクセスを設定できます。たとえば、「表示」ユーザーはポートレットを表示できますが編集はできません。「カスタマイズ」ユーザーは、ポートレットをカスタマイズできます。「管理」ユーザーは、ポートレット関連の使用可能なすべての機能を実行できます。

    「使用可能」リストには、ポートレットを作成するアプリケーションに定義されたセキュリティ・ロールが表示されます。セキュリティ・ロールを「選択済」リストに移動することで、アプリケーションのポートレット・デプロイメント・ファイル(portlet.xml)にセキュリティ・ロールの参照を作成します。この参照は、アプリケーションのWebデプロイメント・ファイル(web.xml)のセキュリティ・ロールを参照します。

    アプリケーションの新しいセキュリティ・ロールは、web.xmlを編集することで作成できます。詳細は、JDeveloperオンライン・ヘルプを参照してください。

  25. 「次へ」をクリックします。

  26. 「キャッシュ・オプション」ページで、「キャッシュ・ポートレット」を選択して、ポータルの有効期限ベースのキャッシュを有効にします。

    有効期限ベースのキャッシュの詳細は、第57.4.5項「ポートレット・パフォーマンス」および第59.3.9.1項「JSR 286ポートレットの有効期限ベースのキャッシュの実装」を参照してください。

    このオプションを選択することにより、ポートレット・キャッシュがポートレット・コンテナによって管理されることを指定します。ポートレット自体で、指定のレスポンスのコンテンツをキャッシュすることもできます。このページで指定する設定は、レスポンスに対するキャッシュ条件がポートレットで指定されていない場合にのみ適用されます。

    このポートレットにデフォルト・キャッシュが必要ない場合は、「デフォルトでキャッシュしない」を選択します。この場合、ウィザードではキャッシュ有効期限が0秒に設定されます。前述したとおり、このキャッシュ設定が有効となるのは、レスポンスに対するキャッシュ条件がポートレットで指定されていない場合のみです。

    ここでキャッシュしない設定を選択していても、ポートレットのデフォルト・キャッシュは後から実装できます。デフォルト・キャッシュを実装する場合は、このウィザードで生成したportlet.xmlファイルで、キャッシュ有効期限の値を0より大きい数値に変更します。

    検証ベースのキャッシュを実装する方法の詳細は、第59.3.9.2項「JSR 286ポートレットでの検証ベースのキャッシュの実装」を参照してください。

  27. ポートレットをキャッシュすることにした場合、「デフォルト失効条件」セクションで、次のオプションを選択します。

    • 「キャッシュ・コンテンツ有効期限 [] 秒」: キャッシュされているポートレット・コンテンツを一定時間の経過後に有効期限切れにします。対応するフィールドに、制限時間を指定します。

    • 「キャッシュ・コンテンツ無期限」: キャッシュされたポートレット・コンテンツに有効期限を設定しません。ポートレットに変更する見込みのない静的コンテンツが含まれている場合、このオプションを選択できます。

  28. 「次へ」をクリックします。

  29. 「初期化パラメータ」ページでは、ポートレットの初期化パラメータを追加できます。

    WARファイルの内容を決定するアプリケーション開発者は、アプリケーションの各種コンポーネント(サーブレットやポートレットなど)のすべての動作を構成するためのJNDI変数のかわりに、互換性のある方法で初期化パラメータを使用できます。これらの初期化パラメータは、portlet.xmlファイルに追加されます。

    たとえば、ポートレットに対してなんらかのデバッグ・モードをオンにしたり、環境に応じて異なるメニュー・オプションを表示することが必要になる場合があります。

    1. 「新規」をクリックして、新しい初期化パラメータをポートレットに追加します。

    2. 新しく追加された行で、各フィールドをダブルクリックして、そのパラメータの「名前」、デフォルトの「値」、および「説明」を指定します。

    3. ここに示した手順を繰り返して、さらに初期化パラメータを追加します。

    4. 完了したら、「終了」をクリックしてポートレットを作成します。

59.2.2 JDeveloperのウィザードを使用したJSR 286ポートレット作成時の処理

JSR 286 Javaポートレットの作成ウィザードを使用すると、次に示すポートレットのデフォルトの実装がJDeveloperで生成されます。具体的には、次のファイルが作成されます。

  • Javaクラス

    • portletName.javaは、ポートレット・コンテナから呼び出されます。このクラスには、ポートレット標準に必要なすべてのメソッドが含まれています。

    • portletNameBundle.javaには、ポートレットのすべての翻訳文字列が含まれています。

    • portletNameBacking.javaには、ポートレット・モードを実装するJSPXページのJSFバッキングBeanが含まれています。このクラスは、ポートレット・モードをADF-Faces JSPXページとして実装した場合に作成されます。

  • portlet.xmlは、アプリケーション用のポートレット・デプロイメント・ディスクリプタ・ファイルです。

  • web.xml: アプリケーションのWebデプロイメント・ディスクリプタ・ファイルです。

  • ポートレットに選択した各ポートレット・モード用のファイル:

    • ポートレット・モードに「JSPの生成」を選択した場合は、そのモードに応じたJSPページ(たとえば、view.jsp.)が作成されます。

    • 「ADF-Faces JSPXの生成」を選択した場合は、そのモードに応じたJSPXページ(たとえば、view.jspx)が作成されます。このページには、Facesコンポーネントを追加できます。

    • 「パスへのマップ」を選択した場合は、追加のファイルは作成されません。ポートレット・モードに応じたコードは、既存のリソース内にあります。ポートレットのJavaクラスにコードが追加され、指定したターゲットにリクエストがルーティングされるようになります。

    • 「カスタム・コード」選択した場合は、追加のファイルは作成されません。ただし、ポートレット・モードに応じたコードは、ポートレットのJavaクラス内にあります。

  • faces-config.xmlは、カスタム・バリデータやマネージドBeanといったアプリケーションのリソースを登録したり、アプリケーションのページ・フローを示す構成ファイルです。このファイルは、ポートレット・モードをADF-Faces JSPXページとして実装した場合に作成されます。

  • trinidad-config.xmlは、アプリケーション・スキン・ファミリに関する情報を含む構成ファイルです。このファイルは、ポートレット・モードをADF-Faces JSPXページとして実装した場合に作成されます。

これらすべてのファイルは、アプリケーション・ナビゲータで確認できます。図59-5を参照してください。

図59-5 JSR 286 Javaポートレット用に生成されたファイル

図59-5の説明が続きます
「図59-5 JSR 286 Javaポートレット用に生成されたファイル」の説明

59.3 JSR 286 Javaポートレットの開発

JSR 286 Javaポートレットの作成ウィザードを使用してポートレットの初期実装を作成したときには、その次の段階でポートレット・コンテンツと動作を制御するコードを作成します。JSR 286ポートレットはJava標準に準拠しているため、このポートレットの拡張に関する十分な情報が、サード・パーティの書籍やWebページなどの各種情報源から入手できます。

http://jcp.org/en/jsr/detail?id=286

この項の内容は、次のとおりです。

59.3.1 ポートレット・デプロイメント・ディスクリプタ・ファイルの編集方法

アプリケーション用のポートレット・デプロイメント・ディスクリプタ・ファイルportlet.xmlでは、アプリケーション内でのポートレット・リソースを指定します。例59-1に、ポートレット・デプロイメント・ディスクリプタ・ファイルの例を示します。

例59-1 ポートレット・デプロイメント・ディスクリプタ・ファイルの例

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<portlet-app version="2.0"
       xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd
                           http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd"
       xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <portlet id="1328624289503">
    <portlet-name>myPortlet</portlet-name>
    <display-name xml:lang="en-US">Portlet1</display-name>
    <display-name xml:lang="en">English Display Name</display-name>
    <portlet-class>portlet.Portlet1</portlet-class>
    <expiration-cache>300</expiration-cache>
    <supports>
      <mime-type>text/html</mime-type>
      <portlet-mode>edit</portlet-mode>
    </supports>
    <supported-locale>en-US</supported-locale>
    <resource-bundle>portlet.resource.Portlet1Bundle</resource-bundle>
    <portlet-info>
      <title>This Is My Portlet</title>
      <short-title>My Portlet</short-title>
      <keywords/>
    </portlet-info>
    <portlet-preferences>
      <preference>
        <name>portletTitle</name>
      </preference>
    </portlet-preferences>
  </portlet>
  <custom-portlet-mode>
    <portlet-mode>about</portlet-mode>
  </custom-portlet-mode>
  <custom-portlet-mode>
    <portlet-mode>config</portlet-mode>
  </custom-portlet-mode>
  <custom-portlet-mode>
    <portlet-mode>edit_defaults</portlet-mode>
  </custom-portlet-mode>
  <custom-portlet-mode>
    <portlet-mode>preview</portlet-mode>
  </custom-portlet-mode>
  <custom-portlet-mode>
    <portlet-mode>print</portlet-mode>
  </custom-portlet-mode>
</portlet-app>

ウィザードを使用してJSR 286ポートレットの作成を完了したら、portlet.xmlファイルを編集することでポートレット・リソースを編集します。

JDeveloperでportlet.xmlファイルを開くと、ソース・コードを編集できます。また、概要エディタをポータル・リソースの編集に使用すると、このファイルを「ソース」ビューで手動で変更する必要がなくなります。

ポートレット・デプロイメント・ディスクリプタ・ファイルを編集するには:

  1. アプリケーション・ナビゲータで、ポートレット・プロデューサ・アプリケーションを開きます。

  2. ポートレット・プロジェクト(「ポートレット」など)を開きます。

  3. 「Webコンテンツ」ノード、「WEB-INF」ノードの順に開きます。

  4. 「portlet.xml」を右クリックして、「開く」を選択します。

  5. 「設計」タブをクリックして、portlet.xmlの概要エディタを開きます。


    ヒント:

    ソース・コードを直接編集する場合は、「ソース」タブをクリックします。


  6. portlet.xmlの概要エディタには、次のタブがあります。

59.3.2 JSR 286ポートレットへのカスタム・ポートレット・モードの追加方法

JSR 286 Javaポートレットの作成ウィザードでポートレット・モードを追加するには、「コンテンツ・タイプとポートレット・モード」ページのリストにポートレット・モードを追加します。ウィザードの使用方法の詳細は、第59.2項「JSR 286 Javaポートレットの作成」を参照してください。このウィザードを使用すると、JSR 286でサポートされている標準モードと、WebCenter Portalでサポートされている拡張モードを実装できます。

JSR 286でサポートされている標準モードは、次のとおりです。

  • 表示

  • 編集

  • ヘルプ

WebCenter Portalは、JSR 286ポートレットで次の追加カスタム・モードをサポートしています。

  • バージョン情報

  • 構成

  • デフォルトの編集

  • プレビュー

  • 印刷

ポートレットの初期作成後に、独自のカスタム・ポートレット・モードを定義することもできます。

ポートレット・モードの基本的な実装方法は、すべてのモードに共通しています。

カスタム・ポートレット・モードを追加するには:

  1. portlet.xmlファイルの概要エディタを開きます。

    詳細は、第59.3.1項「ポートレット・デプロイメント・ディスクリプタ・ファイルの編集方法」を参照してください。

  2. 「アプリケーション」タブをクリックします(必要な場合)。

  3. 「カスタム・モード」セクションを開きます(必要な場合)。

    このセクションには、アプリケーション内のポートレットに使用できるすべてのカスタム・モードが一覧表示されます。WebCenter Portalの拡張ポートレット・モードも含まれています。

  4. 「カスタム・モードの追加」アイコンをクリックして、ポートレット・モードの新しい行を作成します。

  5. 「ポートレット・モード」フィールドに、ポートレット・モードの名前を入力します。

    名前はアプリケーション内で一意である必要があります。

  6. 「説明」フィールドに、このモードの用途を示す簡単な説明を入力します。

  7. このポートレットを利用するアプリケーションでポートレット・モードを認識する必要がない場合は、「ポータル管理」チェック・ボックスを選択解除します。つまり、このモードがポートレットで内部的に使用される場合には、このチェック・ボックスを選択解除します。

  8. portlet.xmlファイルを保存します。

  9. カスタム・ポートレット・モードをアプリケーションに追加した後で、そのモードのコードをポートレット実装ファイルで作成する必要があります。

59.3.3 JSR 286ポートレットでのユーザー情報へのアクセス方法

ポートレット・プロデューサ・アプリケーションにユーザー属性を作成することで、一般的なユーザー情報(user.login.iduser.name.familyなど)にアクセスできるようになります。これらのユーザー属性は、実行時に、現在のユーザーの実際の属性にマップされます。ポートレットでは、この情報を使用して、現在のユーザーについての情報を取得します。

ユーザー情報にアクセスするには:

  1. portlet.xmlファイルの概要エディタを開きます。

    詳細は、第59.3.1項「ポートレット・デプロイメント・ディスクリプタ・ファイルの編集方法」を参照してください。

  2. 「アプリケーション」タブをクリックします(必要な場合)。

  3. 「ユーザー属性」セクションを開きます(必要な場合)。

  4. 「ユーザー属性の追加」アイコンをクリックして、属性の新しい行を作成します。

  5. 「名前」フィールドに、ユーザー属性の名前を入力します(例: user.login.id)。

    属性名の一覧は、Javaポートレット仕様の付録「User Information Attribute Names」を参照してください。


    ヒント:

    WebCenter Portalでサポートされているユーザー情報属性の一覧は、『Oracle Fusion Middlewareアプリケーション・セキュリティ・ガイド』のユーザー属性をLDAPディレクトリにマップする方法に関する項を参照してください。


  6. 「説明」フィールドに、ユーザー属性の説明を入力します。

  7. portlet.xmlファイルを保存します。

    定義したユーザー属性は、実行時に、ポートレット・コンテナで適切な値にマップされます。たとえば、現在のユーザーがJohn Doeだとすると、user.name.familyユーザー属性にDoeがマップされます。ポートレットでは、ユーザー属性を格納するMapオブジェクトを、PortletRequestインタフェースから取得します。

59.3.4 JSR 286ポートレット用のランタイム環境のカスタマイズ方法

ポートレットの実行時には、ポートレット・コンテナがランタイム環境を提供します。さらに、ポートレット・プロデューサ・アプリケーションとポートレットとの間のインタフェースも提供します。

コンテナ・ランタイム・オプションを使用すると、ポートレット・コンテナの動作をカスタマイズできます。このオプションで、ランタイム環境をカスタマイズします。

この項の内容は、次のとおりです。

59.3.4.1 サポートされるコンテナ・ランタイム・オプション

表59-1に、WebCenter Portalのポートレット・コンテナでサポートされるコンテナ・ランタイム・オプションの一覧を示します。

JSR 286のコンテナ・ランタイム・オプションの詳細は、次の場所にあるJSR 286の仕様を参照してください。

http://jcp.org/en/jsr/detail?id=286

表59-1 サポートされるコンテナ・ランタイム・オプション

コンテナ・ランタイム・オプション サポート元 JSR 286標準

javax.portlet.actionScopedRequestAttributes


アプリケーション

ポートレット

はい

javax.portlet.escapeXml


アプリケーション

ポートレット

はい

java.portlet.renderHeaders

サポートされません

はい

javax.portlet.servletDefaultSessionScope


アプリケーション

ポートレット

はい

com.oracle.portlet.allowEventPayloadsWithoutJAXBBinding


アプリケーション

いいえ

com.oracle.portlet.allowWsrpExport


アプリケーション

いいえ

com.oracle.portlet.compatibilityMode


アプリケーション

ポートレット

いいえ

com.oracle.portlet.defaultProxiedResourceRequiresWsrpRewrite


アプリケーション

ポートレット

いいえ

com.oracle.portlet.defaultServedResourceRequiesWsrpRewrite


アプリケーション

ポートレット

いいえ

com.oracle.portlet.disallowResourceServing


アプリケーション

ポートレット

いいえ

com.oracle.portlet.escapeXmlEncodeUrls


アプリケーション

ポートレット

いいえ

com.oracle.portlet.eventPayloadsXmlType


アプリケーション

いいえ

com.oracle.portlet.excludedActionScopeRequestAttributes


アプリケーション

ポートレット

いいえ

com.oracle.portlet.externalScopeRequestAttributes


アプリケーション

ポートレット

いいえ

com.oracle.portlet.importCssToIFrame


アプリケーション

ポートレット

いいえ

com.oracle.portlet.minimumWsrpVersion


アプリケーション

ポートレット

いいえ

com.oracle.portlet.offerPortletOverWsrp


アプリケーション

ポートレット

いいえ

com.oracle.portlet.portalInfoProvider


アプリケーション

ポートレット

いいえ

com.oracle.portlet.redirectAfterAction


アプリケーション

ポートレット

いいえ

com.oracle.portlet.renderHeaders

アプリケーション

ポートレット

いいえ

com.oracle.portlet.requireIFrame


アプリケーション

ポートレット

いいえ

com.oracle.portlet.streamingOptimized


アプリケーション

ポートレット

いいえ

com.oracle.portlet.suppressWsrpOptimisticRender


アプリケーション

ポートレット

いいえ

com.oracle.portlet.trapWsrpRenderExceptions


アプリケーション

ポートレット

いいえ

com.oracle.portlet.trimEncodeUrls


アプリケーション

ポートレット

いいえ

com.oracle.portlet.useWsrpUserContextForUserAuthentication


アプリケーション

いいえ

com.oracle.portlet.wsrpHeaderMode


アプリケーション

ポートレット

いいえ

com.oracle.portlet.wsrpLegacyPortletHandle


ポートレット

いいえ

com.oracle.portlet.wsrpPortletHandle


ポートレット

いいえ

oracle.portlet.bridge.adf.raiseUndeclaredContextualEvents


ポートレット

いいえ


javax.portlet.actionScopedRequestAttributes

アクション・スコープ指定型リクエスト属性を保存して、新しいアクションが発生するまで、その属性を使用できるようにするかどうかを指定します。

WebCenter Portal固有のexcludedActionScopeRequestAttributesコンテナ・ランタイム・オプションを使用すると、スコープで保存するリクエスト属性を制限できます。

有効な値は、次のとおりです。

  • true - リクエスト属性をprocessActionから、その次のprocessActionまで保存します。numberOfCachedScopesの2番目の値と、ポートレット・コンテナによりキャッシュされるスコープの数を示す3番目の値を指定できます。

  • false - リクエスト属性を保存しません。

javax.portlet.escapeXml

JSR 286タグ・ライブラリのタグactionUrlrenderUrl、およびresourceUrlから返されたURLをXMLエンコードするかどうかを指定します。

このオプションは、encodeXml属性を使用することで、タグごとにオーバーライドできます。

有効な値は、次のとおりです。

  • true - (デフォルト) actionUrlタグ、renderUrlタグ、およびresourceUrlタグで返されたURLがXMLエンコードされます(パラメータの区切りには、アンパサンドのエンティティが使用されます)。

  • false - actionUrlタグ、renderUrlタグ、およびresourceUrlタグから返されたURLは、XMLエンコードされません(また、アンパサンド文字は、そのまま使用されます)。


注意:

このオプションは、PortletURL.toString()またはResourceURL.toString()の戻り値には一切影響しません。どちらの場合も、JSR 286では、出力にアンパサンド文字のみを使用します。生成するURLがタグ・ライブラリを使用しないときに、アンパサンド・エンティティを使用する場合や、使用するXMLエンコーディングを指定する場合は、BaseURL.write()メソッドを参照してください。


javax.portlet.servletDefaultSessionScope

Javaポートレットに含まれている、またはJavaポートレットから転送されるサーブレットまたはJSPに提供するセッション・オブジェクトのスコープを指定します。

有効な値は、次のとおりです。

  • APPLICATION_SCOPE - (デフォルト)ポートレット・セッションをアプリケーション・スコープにマップします。

  • PORTLET_SCOPE - ポートレット・セッションをポートレット・スコープにマップします。

com.oracle.portlet.allowEventPayloadsWithoutJAXBBinding

portlet.xmlで宣言されたイベント・ペイロードのタイプと、JSR 286ポートレットから送信されるイベント・ペイロードが、JSR 286の仕様(これらのタイプには、有効なJAXBバインディングが必要という要件)をバイパスできるようにします。

有効な値は、次のとおりです。

  • true - 有効なJAXBバインディングがないイベント・ペイロードが許可されます。

  • false - 有効なJAXBバインディングがないイベント・ペイロードは許可されず、JSR 286仕様に従います。

com.oracle.portlet.allowWsrpExport

Webアプリケーションに対してWSRPのexport-portlets操作をサポートするべきかどうかを指定します。

このオプションは主に後方互換性のために使用されます。export-portlets操作はwsrp-producer-config.xml設定を使用して制御することをお薦めします。

有効な値は、次のとおりです。

  • true - (デフォルト)ポートレットのエクスポートが許可されます。

  • false - ポートレットのエクスポートは許可されません。これにより、WEB-INF/wsrp-producer-config.xmlの設定がオーバーライドされます。

com.oracle.portlet.compatibilityMode

owc168に設定すると、WebCenter PortalのJSR 286コンテナをJSR 168互換モードで呼び出します。

さらに、disallowResourceServingランタイム・オプションが、自動的にtrueに設定されます(別の値が指定されていない場合)。

com.oracle.portlet.defaultProxiedResourceRequiresWsrpRewrite

ポートレットが提供しないリソースのURLエンコードするときに使用する、デフォルトのWSRP requiresRewriteフラグを指定します。PortletResponse.encodeURL()メソッドの呼出し時にoracle.portlet.server.resourceRequiresRewritingリクエスト属性でオーバーライドしないかぎり、この設定はPortletResponse.encodeURL()メソッドで戻されたすべてのURLに使用されます。

有効な値は、次のとおりです。

  • true - (デフォルト) requiresRewriteフラグにtrueが設定されます。これは、コンシューマがリソースを書き換える必要があることを示します。

  • false - requiresRewriteフラグがfalseに設定されます。これは、コンシューマがリソースを必ずしも書き換える必要がないことを示します。

com.oracle.portlet.defaultServedResourceRequiesWsrpRewrite

ポートレットが提供するリソースのリソースURLを生成するときに使用する、デフォルトのWSRP requiresRewriteフラグを指定します。

この設定はポートレットで作成されたすべてのリソースURLに使用されます。ただし、リソースURLのメソッドwrite()またはtoString()の呼出し時にresourceRequiresRewritingリクエスト属性の有無でオーバーライドされます。この設定は、提供されたリソースのレスポンスにWSRP requiresRewritingフラグを指定するためにも使用されます。ただし、ポートレットのserveResource()メソッドの復帰時にresourceRequiresRewritingリクエスト属性の有無でオーバーライドされることがあります。

有効な値は、次のとおりです。

  • true - requiresRewrite URLフラグおよびrequiresRewritingレスポンス・フラグがtrueに設定されます。これは、コンシューマがリソースを書き換える必要があることを示します。

  • false - requiresRewrite URLフラグおよびrequiresRewritingレスポンス・フラグがfalseに設定されます。これは、コンシューマがリソースを必ずしも書き込む必要がないことを示します。ただし、コンシューマがURLを書き換える可能性はあります。

これを指定していない場合、requiresRewrite URLフラグに値が指定されなくなり、serveResource操作のrequiresRewritingレスポンス・フラグはレスポンスのMIMEタイプに基づいて設定されます。

com.oracle.portlet.disallowResourceServing

ポートレットによるリソースの提供を許可するかどうかを指定します。これは、JSR 168ポートレットを286コンテナで実行する場合に役立ちます。javax.portlet.GenericPortletを拡張しているJSR 168ポートレットは、自動的にJSR 286の機能を継承するため、リソースIDに関連する名前の付いたWebアプリケーション内のファイルにリソース・リクエストを自動的に転送します。このことが、潜在的なセキュリティ問題になります。同様のセキュリティ上の理由から、リソースを提供しないJSR 286ポートレットは、リソースの提供を禁止することで最も安全になります。

有効な値は、次のとおりです。

  • true - ポートレットにリソースの提供を許可しません。

  • false - ポートレットにリソースの提供を許可します。

com.oracle.portlet.escapeXmlEncodeUrls

JSR 286コンテナのPortletResponse.encodeURL()メソッドで生成されるURLを、XMLエンコードするかどうかを指定します。

有効な値は、次のとおりです。

  • true - PortletResponse.encodeURL()メソッドで生成されるURLは、XMLエンコードされます。

  • false - (デフォルト) PortletResponse.encodeURL()メソッドで生成されるURLは、XMLエンコードされません。

com.oracle.portlet.eventPayloadsXmlType

イベントがWSRPを通じて送信されたされたときに、JAXBバインディング可能なJavaオブジェクトのイベント・ペイロードに対して、オプションのXMLスキーマ・タイプを指定します。これは、複数値のランタイム・オプションです。各値は、Javaクラス名とQNameのペアで構成し、コロン(:)で区切ります。QNameには、QNameの標準Java文字列表現({namespace}localpart)を使用する必要があります。指定した各値に対して、XMLスキーマ・タイプとしてQNameが使用され、オブジェクトがXMLにマーシャリングされた後で、指定したJavaオブジェクト・タイプのWSRPイベント・ペイロードに注釈を付けます。これは、複数のプロデューサにあるポートレット間で通信するイベントを使用するときに役立ちます。

com.oracle.portlet.excludedActionScopeRequestAttributes

これは、各値が正規表現の複数値プロパティです。com.oracle.portlet.externalScopeRequestAttributesコンテナ・ランタイム・オプションに定義された正規表現と一致する値を含むリクエスト・パラメータに加えて、正規表現と一致するリクエスト属性は、javax.portlet.actionScopedRequestAttributesコンテナ・ランタイム・オプションが使用されている場合、アクション・スコープ指定リクエスト属性としては保存されません。

com.oracle.portlet.externalScopeRequestAttributes

これは、各値が正規表現の複数値プロパティです。正規表現のいずれかと一致するリクエスト属性は、ポートレット・スコープの外側にあるとみなされ、その基になるポータル・リクエストで共有されます。

javax.portlet.actionScopedRequestAttributesオプションを使用すると、externalScopeRequestAttributesで宣言された正規表現と一致するリクエスト属性は、アクション・スコープのリクエスト属性に保存されなくなります。

com.oracle.portlet.importCssToIFrame

ポータル・コンシューマに対して、IFRAMEポートレットにCSSファイルをインポートする必要があるかどうかを指定します。

有効な値は、次のとおりです。

  • false: (デフォルト)何も実行されません。

  • true: コンシューマからのCSSファイルがIFRAMEポートレットに適用されます。

com.oracle.portlet.minimumWsrpVersion

ポートレットの動作に必要なWSRPの最小バージョンを指定します。指定した値よりも小さいWSRPバージョンが使用されている場合、WSRP GetServiceDescriptionGetPortletDescriptionGetMarkupなどのWSRPレスポンスにポートレットが含まれなくなります。

有効な値は、次のとおりです。

  • 1

  • 2

com.oracle.portlet.offerPortletOverWsrp

WSRPプロデューサのサービスの説明にポートレットを提示するかどうかを指定します。

JSR 168/286ポートレットを参照する.portletファイルのofferRemote設定は、このコンテナ・ランタイム・オプションをオーバライドします。

有効な値は、次のとおりです。

  • true - (デフォルト)ポートレットは、WSRPプロデューサのサービスの説明に提示されます。

  • false - ポートレットは、サービスの説明に含まれません。

すべての指定を省略すると、WEB-INF/producer-config.xmlで指定されたデフォルト値が使用されます。

com.oracle.portlet.portalInfoProvider

com.bea.portlet.container.IPortalInfoインタフェースのオプション実装のクラス名を指定します。この実装では、JSR 286コンテナのrequest.getPortalContext().getPortalInfo()から返される値を定義します。デフォルトの実装は、プロデューサ/ローカル・サーバーの名前とバージョンを返しますが、カスタムの実装はWSRPシナリオでコンシューマ・サーバー情報とプロデューサ・サーバー情報の両方を渡すことがあります

com.oracle.portlet.redirectAfterAction

JSR 286コンテナは、processActionが実行された後で(また、イベントが処理された後で)、ブラウザにポータルのレンダラURLへのリダイレクトを送信して、結果のページをリロードしても別のprocessActionにならないようにします。

有効な値は、次のとおりです。

  • true - ポートレット・アクションの終了ごとに、リダイレクトが発行されます。

  • false - ポートレット・アクションの後に、リダイレクトが自動的には発行されません。

com.oracle.portlet.requireIFrame

IFRAME内でポートレットをレンダリングする必要があるかどうかを指定します。

有効な値は、次のとおりです。

  • true - ポートレットをIFRAME内でレンダリングします。

  • false - ポートレットをIFRAME内でレンダリングすることを強制しません。

com.oracle.portlet.streamingOptimized

ポートレットがストリーミング・モードでの実行に最適化されていることを示します。これにより、パフォーマンスが向上することがあります。

有効な値は、次のとおりです。

  • true - ストリーミング・モードでの実行に向けてポートレットが最適化されています。

  • false - ストリーミング・モードでの実行に向けてポートレットは最適化されていません。

com.oracle.portlet.suppressWsrpOptimisticRender

ポートレットがWSRPで実行されている場合、アクションとイベント(または、そのどちらか)のライフサイクル終了後に、ポートレットのオプティミスティック・レンダリングを抑制します。

有効な値は、次のとおりです。

  • true - オプティミスティック・レンダリングが常に抑制されます。

  • false - オプティミスティック・レンダリングが実行される場合があります。

com.oracle.portlet.trapWsrpRenderExceptions

レンダリング時にJSR 286コンテナがWSRP SOAP障害として例外を送信する必要があるのか、そのかわりにポートレット・マークアップの例外メッセージをレンダリングする必要があるのかを指定します。

有効な値は、次のとおりです。

  • true - (デフォルト)例外はSOAP障害として送信されません。そのかわりにレンダリングされた例外スタック・トレースとして送信されます。

  • false - レンダリング時にポートレットが生成した例外は、SOAP障害として扱われます。

com.oracle.portlet.trimEncodeUrls

JSR 286コンテナでPortletResponse.encodeURL()メソッドに渡すURLから空白をトリミングする必要があるかどうかを指定します。

有効な値は、次のとおりです。

  • true - (デフォルト) PortletResponse.encodeURL()に渡されるURLから先頭と末尾の空白がトリミングされます。

  • false - PortletResponse.encodeURL()に渡されるURLから空白はトリミングされません。

com.oracle.portlet.useWsrpUserContextForUserAuthentication

PortletRequestのメソッドgetRemoteUser()getUserPrincipal()およびisUserInRole()がWSRPユーザー・コンテキスト情報と標準J2EEセキュリティのどちらに基づくかを指定します。

有効な値は、次のとおりです。

  • true - ポートレットがWSRPで実行される場合、ユーザー情報はWSRPユーザー・コンテキストに基づきます。これはセキュリティ上の問題になることがあるため、このオプションの使用には十分な注意が必要です。

  • false - (または、ポートレットがWSRPで実行されていない場合)ユーザー情報は、J2EE認証済ユーザーに基づきます。

com.oracle.portlet.wsrpHeaderMode

ポートレットがWSRPリモート・ポートレットとしてレンダリングされている場合にのみ使用します。ヘッダーまたはCookieの目的の最終宛先についてのWSRPコンシューマへのヒントとして、CookieとヘッダーがWSRP SOAPレスポンスのどこに含まれているかを示します。

ポートレットがローカルに(WSRPを経由しないで)実行されている場合、ポートレットで設定するヘッダーとCookieは、常にクライアントに向けられていると仮定されます。このコンテナ・ランタイム・オプションを設定することで、PortletRequest属性のcom.oracle.portlet.wsrpHeaderModeにデフォルト値を設定することになります。この値は、実行時にヘッダーごとにポートレットによりオーバーライドされる可能性があります。

有効な値は、次のとおりです。

  • client - ポートレットで設定されたヘッダーとCookieは、クライアント(たとえば、ブラウザ)に向けてリダイレクトされます。

  • consumer - ポートレットで設定されるヘッダーとCookieは、コンシューマに向けてリダイレクトされ、クライアントには渡されません。

  • both - ポートレットで設定されるヘッダーとCookieは、クライアントとコンシューマに向けてリダイレクトされます。

設定されていない場合、ポートレット・コンテナは、WEB-INF/wsrp-producer-config.xmlファイルで指定されている、プロデューサのデフォルト値を仮定します。

com.oracle.portlet.wsrpLegacyPortletHandle

レガシーWSRPポートレット・ハンドルの仕様をポートレットで使用できるようにします。このハンドルは、Webアプリケーション内で一意にする必要があります。これは、従来のポートレットの位置ベースのWSRPポートレット・ハンドルを使用するWebCenter Portalコンシューマとの後方互換性を維持するために役立ちます。

指定されていると、レガシー・ポートレット・ハンドルがポートレットのレガシー・ハンドル拡張としてWSRP serviceDescriptionで公開され、コンシューマはレガシー・ポートレット・ハンドルを使用してポートレットにアクセスできるようになります。ただし、そのポートレットが、レガシー・ポートレット・ハンドルでWSRP serviceDescriptionに公開されることはありません。

com.oracle.portlet.wsrpPortletHandle

WSRPポートレット・ハンドルの仕様をポートレットで使用できるようにします。このハンドルは、Webアプリケーション内で一意にする必要があります。

oracle.portlet.bridge.adf.raiseUndeclaredContextualEvents

Oracle JSF Portlet Bridgeで、portlet.xmlファイル内で対応するポートレット・イベントが宣言されていないADFmイベントを発生できるようにします。

有効な値は、次のとおりです。

  • true - 発生したADFmイベントは、ポートレット・イベントとして転送されます。

  • false - ポートレット・イベントの宣言に対応するイベントのみが転送されます。

59.3.4.2 アプリケーション内のすべてのポートレットに対するコンテナ・ランタイム・オプションの設定

コンテナ・ランタイム・オプションをアプリケーション・レベルで設定すると、その設定はアプリケーション内のすべてのポートレットに作用します。

アプリケーションレベルのコンテナ・ランタイム・オプションを設定するには:

  1. portlet.xmlファイルの概要エディタを開きます。

    詳細は、第59.3.1項「ポートレット・デプロイメント・ディスクリプタ・ファイルの編集方法」を参照してください。

  2. 「アプリケーション」タブをクリックします(必要な場合)。

  3. 「コンテナ・ランタイム・オプション」セクションを開きます(必要な場合)。

  4. 「コンテナ・ランタイム・オプションの追加」アイコンをクリックして、選択可能なオプションのリストを表示します。

    このリストには、WebCenter Portalのポートレット・コンテナ(表59-1を参照)でサポートされているすべてのコンテナ・ランタイム・オプションが含まれています。

    リストにない追加のコンテナ・ランタイム・オプションをサポートする別のポートレット・コンテナを使用する場合は、「<カスタマイズ>」を選択して、「名前」フィールドにオプションの名前を入力します。

    ポートレット・コンテナでサポートされていないコンテナ・ランタイム・オプションを指定すると、そのオプションは無視されます。

  5. 「値」フィールドに、コンテナ・ランタイム・オプションの値を入力します。

    コンテナ・ランタイム・オプションは、portlet.xmlコードに追加されます。次に例を示します。

    <container-runtime-option>
       <name>com.oracle.portlet.requireIFrame</name>
       <value>true</value>
    </containter-runtime-option>
    
  6. portlet.xmlファイルを保存します。

59.3.4.3 個々のポートレットに対するコンテナ・ランタイム・オプションの設定

個別のポートレット・レベルでコンテナ・ランタイム・オプションを設定すると、アプリケーション全体の設定をオーバーライドできます。

ポートレットレベルのコンテナ・ランタイム・オプションを設定するには:

  1. portlet.xmlファイルの概要エディタを開きます。

    詳細は、第59.3.1項「ポートレット・デプロイメント・ディスクリプタ・ファイルの編集方法」を参照してください。

  2. 「ポートレット」タブをクリックします(必要な場合)。

  3. 「詳細」タブをクリックします。

  4. 「コンテナ・ランタイム・オプションの追加」アイコンをクリックして、選択可能なオプションのリストを表示します。

    このリストには、WebCenter Portalのポートレット・コンテナ(表59-1を参照)でサポートされているすべてのコンテナ・ランタイム・オプションが含まれています。

    リストにない追加のコンテナ・ランタイム・オプションをサポートする別のポートレット・コンテナを使用する場合は、「<カスタマイズ>」を選択して、「名前」フィールドにオプションの名前を入力します。

    ポートレット・コンテナでサポートされていないコンテナ・ランタイム・オプションを指定すると、そのオプションは無視されます。

  5. 「値」フィールドに、コンテナ・ランタイム・オプションの値を入力します。

    コンテナ・ランタイム・オプションは、portlet.xmlコードに追加されます。次に例を示します。

    <container-runtime-option>
       <name>com.oracle.portlet.requireIFrame</name>
       <value>false</value>
    </containter-runtime-option>
    
  6. portlet.xmlファイルを保存します。

59.3.5 JSR 286ポートレットでのパブリック・レンダラ・パラメータの使用方法

パブリック・レンダラ・パラメータを使用すると、複数のポートレットでパラメータ値を共有できるようになり、ポートレット間通信が可能になります。

たとえば、地図ポートレットと天気概況ポートレットが、どちらもZipcodeパブリック・レンダラ・パラメータを使用するように構成されていると、地図ポートレットに郵便番号を入力することで、天気概況ポートレットの同じパラメータの値も更新されます。

ポートレットでサポートされるパブリック・レンダラ・パラメータは、ポートレット・デプロイメント・ディスクリプタ・ファイル(portlet.xml)のアプリケーション・セクションで宣言する必要があります。このように、アプリケーション・レベルで定義したパブリック・レンダラ・パラメータは、アプリケーション内のすべてのポートレットで使用できるようになります。

その後で、アプリケーション内の個別のポートレットでは、それらのパブリック・レンダラ・パラメータから使用する必要のあるものを指定できます。

パブリック・レンダラ・パラメータを後述するように宣言して定義すると、自動的にポートレット間通信が始まります。そのためのコーディングは必要ありません。詳細は、第63.5.3項「ポートレット間通信に関する必知事項」を参照してください。

この項の内容は、次のとおりです。

パブリック・レンダラ・パラメータの詳細と実装方法は、次の場所にあるJSR 286の仕様を参照してください。

http://jcp.org/en/jsr/detail?id=286

59.3.5.1 アプリケーション・レベルでのパブリック・レンダラ・パラメータの宣言

パブリック・レンダラ・パラメータをポートレットで使用できるようにするには、最初に、ポートレット・デプロイメント・ディスクリプタ・ファイル(portlet.xml)のアプリケーション・セクションで、このパラメータを宣言する必要があります。

アプリケーション・レベルでパブリック・レンダラ・パラメータを定義するには:

  1. portlet.xmlファイルの概要エディタを開きます。

    詳細は、第59.3.1項「ポートレット・デプロイメント・ディスクリプタ・ファイルの編集方法」を参照してください。

  2. 「パラメータ」タブをクリックします。

  3. 「追加」アイコンをクリックして、新しいパブリック・レンダラ・パラメータを作成します。

  4. ドロップダウン・リストから、パラメータに完全修飾名(QName)を指定するか、名前のローカル・パートのみを指定するかを選択します。

    • 修飾名 - パラメータのネームスペースとローカル名を指定することで、QNameは、パブリック・レンダラ・パラメータをアプリケーション間で一意に特定します。ポートレット・コード内では、識別子でパブリック・レンダラ・パラメータにアクセスします。この識別子により、アプリケーション内でパラメータを一意に識別します。ただし、一般に、ページには複数のポートレットが収容されていて、それらが異なるアプリケーションから取得されている可能性があります。QNamesを使用することで、あるポートレットのパブリック・レンダラ・パラメータが、ページ上の別のポートレットに意図せず干渉することがなくなります。これらのポートレットの取得先は問題になりません。

    • 未修飾名 - パラメータのネームスペースが、アプリケーションのデフォルト・ネームスペースと同じ場合は、パラメータの定義時に未修飾名を指定することで、ネームスペースを省略できます。アプリケーションのデフォルト・ネームスペースが定義されていない場合、未修飾名のパラメータにはXMLのデフォルト・ネームスペースが使用されます。


      ヒント:

      アプリケーションのデフォルト・ネームスペースが定義されているかどうかを確認するには、「アプリケーション」タブをクリックして、「デフォルト・ネームスペース」フィールドに値が入力されているかどうかを調べます。


  5. パラメータの名前を入力します。

    • 「修飾名」を選択した場合 - 「ネームスペース」フィールドにパラメータのネームスペースを入力し、「名前」フィールドにパラメータ名のローカル・パートを入力します。

    • 「未修飾名」を選択した場合 - 「名前」フィールドに、パラメータ名のローカル・パートを入力します。このパラメータには、パラメータのネームスペースとしてアプリケーションのデフォルト・ネームスペースが使用されます(アプリケーションにデフォルト・ネームスペースが定義されていない場合は、XMLのデフォルト・ネームスペースが使用されます)。

  6. 「識別子」フィールドに、パブリック・レンダラ・パラメータをアプリケーション内で識別するための名前を入力します。

    この識別子は、アプリケーション内で一意にする必要があります。また、この識別子は、ポートレットとポートレットのコード内でパラメータにアクセスする際に、パラメータを識別するために使用されます。識別子を使用することで、ポートレット開発者は、パラメータの完全修飾名を認識する必要がなくなります。完全修飾名よりも単純なアプリケーション固有の識別子を知っていればよいことになります。

  7. 「説明」フィールドに、パブリック・レンダラ・パラメータの説明を入力します。説明には、このパラメータをポートレットに使用する開発者が、その使用方法を判断できる情報を指定する必要があります。

  8. (オプション)「別名」パネルでは、別名のリストを指定できます。これらの別名により、異なるQNameが付いていても別のパブリック・レンダラ・パラメータの値を受け取れるようになります。

    1. 「作成」アイコンをクリックして、パラメータの新しい別名を作成します。

    2. 「ネームスペース」フィールドに、この別名に使用するパラメータのネームスペースを入力します。

    3. 「名前」フィールドに、この別名に使用するパラメータのローカル・パートを入力します。


    ヒント:

    パブリック・レンダラ・パラメータの別名を作成するときには、相互互換の別名を設定するようにしてください。つまり、ポートレットAのパラメータがポートレットBのパラメータに対応する別名を持つ場合は、可能であれば、ポートレットBのパラメータにもポートレットAのパラメータに対応する別名を作成するようにします。


  9. パブリック・レンダラ・パラメータは、次に示すように、portlet.xmlファイルのアプリケーション定義セクションに追加されます。

    <portlet-app ...>
      <portlet>...</portlet>
      <portlet>...</portlet>
      ...
      <public-render-parameter>
         <description>Parameter for zip code</description>
         <identifier>Zip</identifier>
         <qname xmlns:x="http://example.com/params">x:Zip</qname>
         <alias xmlns:x="http://example.com/params">x:ZipCode</alias>
      </public-render-parameter>
      ...
    </portlet-app>
    
  10. portlet.xmlファイルを保存します。

59.3.5.2 ポートレットごとのパブリック・レンダラ・パラメータの定義

あるポートレットでパブリック・レンダラ・パラメータをサポートする必要がある場合は、そのポートレットにパラメータを追加します。

ポートレットにパブリック・レンダラ・パラメータを追加するには:

  1. portlet.xmlファイルの概要エディタを開きます。

    詳細は、第59.3.1項「ポートレット・デプロイメント・ディスクリプタ・ファイルの編集方法」を参照してください。

  2. ポートレット・プロデューサ・アプリケーション内でパブリック・レンダラ・パラメータを定義していない場合は、この定義を先に実行しておく必要があります。

    詳細は、第59.3.5.1項「アプリケーション・レベルでのパブリック・レンダラ・パラメータの宣言」を参照してください。

  3. 「ポートレット」タブをクリックして、パブリック・レンダラ・パラメータを使用するポートレットを選択します。

  4. 「パラメータ」タブをクリックします。

    「イベントの公開中」パネルの「使用可能」リストに、アプリケーションに定義されているすべてのポートレット・イベントが示されます。

  5. 「パラメータ」タブをクリックします。

    「パブリック・レンダラ・パラメータ」パネルの「使用可能」リストには、アプリケーションに定義されているすべてのパブリック・レンダラ・パラメータが示されます。

  6. ポートレットで使用するパブリック・レンダラ・パラメータを選択し、「追加」アイコンをクリックして、そのパラメータを「選択済」リストに移動します。

    これにより、次に示すように、パブリック・レンダラ・パラメータがportlet.xmlのポートレット定義に追加されます。

    <portlet-app ...>
      <portlet id="1234567890">
        ...
        <supported-public-render-parameter>Zip</supported-public-render-parameter>
        ...
      </portlet>
      ...
      <public-render-parameter>
        <identifier>Zip</identifier>
        <name>Zip</name>
      </public-render-parameter>
      ...
    </portlet-app>
    
  7. portlet.xmlファイルを保存します。

  8. この時点で、このパブリック・レンダラ・パラメータはポートレットのコード内で使用できるようになります。

59.3.5.3 例: パブリック・レンダラ・パラメータ

次の例では、パブリック・レンダラ・パラメータを使用して、異なる名前のパラメータを使用している2つのポートレットの動作をリンクする方法を示しています。この例では、パブリック・レンダラ・パラメータの更新を可能にする汎用パラメータ・フォーム・ポートレットを取り上げて、どのようにして株価をレンダリングする株価ポートレットにそれをリンクして、パブリック・レンダラ・パラメータから株式記号を取得できるかを示します。パラメータ・フォーム・ポートレットのパラメータの一般名(parameter1)は、株価ポートレットのパラメータ名(stocksymbol)と一致しないため、株価ポートレットの開発者は、この2つのパラメータ間をリンクする別名を使用することになります。

例59-2は、パラメータ・フォーム・ポートレットを含むポートレット・プロデューサ・アプリケーションのportlet.xmlファイルの抜粋部分を示しています。ポートレット・プロデューサ・アプリケーションでは、パラメータ・フォーム・ポートレットでサポートするパブリック・レンダラ・パラメータ(parameter1)を定義します。

例59-2 パラメータ・フォーム・ポートレットのパラメータ定義

<portlet-app ...>
  <portlet id="1234567890">
    ...
    <supported-public-render-parameter>
      parameter1
    </supported-public-render-parameter>
    ...
  </portlet>
  ...
  <public-render-parameter>
    <description xml:lang="en">First parameter set by portlet</description>
    <identifier>parameter1</identifier>
    <qname xmlns:op="http://xmlns.oracle.com/portlet/oracle-portlet-app">
      op:parameter1
    </qname>
  </public-render-parameter>
  ...
</portlet-app>

パラメータ・フォーム・ポートレットのコードでは、このポートレットに値が入力されたときに、parameter1ポートレットの値を設定します(例59-3)。

例59-3 パラメータ・フォーム・ポートレットのパラメータ処理

public void processAction(ActionRequest request,
                          ActionResponse actionResponse)
            throws PortletException, IOException
{
  //
  //  Read the new parameter value posted in the portlet form
  //
  String param1 = actionResponse.getParameter("form_param1");

  //
  // Set the new parameter values. These will be intepreted by the
  // container as public render parameters as the names match the names
  // of the declared parameters.
  //
  actionResponse.setRenderParameter("parameter1", param1);
}

例59-4は、株価ポートレットを含むポートレット・プロデューサ・アプリケーションのportlet.xmlファイルの抜粋部分を示しています。このポートレット・プロデューサ・アプリケーションでは、株価ポートレットでサポートされているパブリック・レンダラ・パラメータ(stocksymbol)も定義しています。パラメータ・フォーム・ポートレットのパラメータとリンクするように、stocksymbolパラメータに、parameter1という別名を追加します。

例59-4 株価ポートレットのパラメータ定義

<portlet-app ...>
  <portlet>
    ...
    <supported-public-render-parameter>
      stocksymbol
    </supported-public-render-parameter>
    ...
  </portlet>
  ...
  <public-render-parameter>
    <description xml:lang="en">The stock symbol</description>
    <identifier>stocksymbol</identifier>
    <qname xmlns:s="http://www.oracle.com/stocks">s:stocksymbol</qname>
    <!-- Alias matches the Parameter Form portlet's first parameter name -->
    <alias xmlns:op="http://xmlns.oracle.com/portlet/oracle-portlet-app">
      op:parameter1
    </alias>
  </public-render-parameter>
  ...
</portlet-app>

株価ポートレットのコードでは、パラメータ・フォーム・ポートレットでポストされたパブリック・レンダラ・パラメータの値を読み取ります(例59-5)。

例59-5 株価ポートレットのパラメータ処理

public void doView(RenderRequest request, RenderResponse response)
            throws PortletException, IOException
{
  response.setContentType("text/html; charset=UTF-8");
  PrintWriter out = response.getWriter();
 
  // Retrieve any values for the public render parameter.
  // The parameter is looked up in the request using its identifier in portlet.xml
  // (not it's name or alias).
  String symbol = request.getParameter("stocksymbol");
  ...
}

これらの2つのポートレットが同じページにドロップされると、相互に自動的にリンクされます。パラメータ・フォーム・ポートレットの最初のパラメータ・フィールドに値を入力すると、その新しい値で株価ポートレットが更新されるようになります。

59.3.6 JSR 286ポートレットでのポートレット・イベントの使用方法

ポートレット・イベントとは、ポートレットの外部で行われたアクション(たとえば、そのポートレットを含むページで実行されたアクションや同じページ上の別のポートレットで実行されたアクション)に反応できるようにすることで、ポートレットのポートレット間通信を可能にするJSR 286の機能です。ポートレット・イベントは、ポートレットがそれ自体のイベントをトリガーすることでイベントに応答し、それがそのページ上の他のポートレットに影響を与えるようにカスケードできます。

ポートレットでサポートするポートレット・イベントは、ポートレット・デプロイメント・ディスクリプタ・ファイル(portlet.xml)のアプリケーション・セクションで宣言する必要があります。このように、アプリケーション・レベルで定義したポートレット・イベントは、アプリケーション内のすべてのポートレットで使用できるようになります。

その後で、アプリケーション内の個別のポートレットで、それらのポートレット・イベントから使用する必要のあるものを指定できます。ポートレットでは、受信を目的とする処理イベントというイベントと、ポートレットがトリガーする公開イベントというイベントを宣言できます。

ポートレット・イベントを後述するように宣言して定義すると、自動的にポートレット間通信が始まります。そのためのコーディングは必要ありません。詳細は、第63.5.3項「ポートレット間通信に関する必知事項」を参照してください。

この項の内容は、次のとおりです。

ポートレット・イベントの詳細と実装方法は、次の場所にあるJSR 286の仕様を参照してください。

http://jcp.org/en/jsr/detail?id=286

59.3.6.1 アプリケーション・レベルでのポートレット・イベントの宣言

ポートレット・イベントをポートレットで使用できるようにするには、最初に、ポートレット・デプロイメント・ディスクリプタ・ファイル(portlet.xml)のアプリケーション・セクションで、ポートレット・イベントを宣言する必要があります。

アプリケーション・レベルでポートレット・イベントを定義するには:

  1. portlet.xmlファイルの概要エディタを開きます。

    詳細は、第59.3.1項「ポートレット・デプロイメント・ディスクリプタ・ファイルの編集方法」を参照してください。

  2. 「イベント」タブをクリックします。

  3. 「追加」アイコンをクリックして、新しいポートレット・イベントを作成します。

  4. ドロップダウン・リストから、ポートレット・イベントに完全修飾名(QName)を指定するか、名前のローカル・パートのみを指定するかを選択します。

    • 修飾名 - イベントのネームスペースとローカル名を指定することで、QNameは、ポートレット・イベントをアプリケーション間で一意に特定します。一般に、ページには複数のポートレットが収容されていて、それらが異なるアプリケーションに属していることがあります。QNamesを使用することで、あるポートレットのポートレット・イベントが、ページ上の別のポートレットに意図せず干渉することがなくなります。これらのポートレットの取得先は問題になりません。

    • 未修飾名 - ポートレット・イベントのネームスペースが、アプリケーションのデフォルト・ネームスペースと同じ場合は、このイベントの定義時に未修飾名を指定することで、ネームスペースを省略できます。アプリケーションのデフォルト・ネームスペースが定義されていない場合、未修飾名のポートレット・イベントにはXMLのデフォルト・ネームスペースが使用されます。


      ヒント:

      アプリケーションのデフォルト・ネームスペースが定義されているかどうかを確認するには、「アプリケーション」タブをクリックして、「デフォルト・ネームスペース」フィールドに値が入力されているかどうかを調べます。


  5. ポートレット・イベントの名前を入力します。

    • 「修飾名」を選択した場合 - 「ネームスペース」フィールドにポータル・イベントのネームスペースを入力し、「名前」フィールドにイベント名のローカル・パートを入力します。

    • 「未修飾名」を選択した場合 - 「名前」フィールドに、ポータル・イベント名のローカル・パートを入力します。このイベントには、イベントのネームスペースとしてアプリケーションのデフォルト・ネームスペースが使用されます(アプリケーションにデフォルト・ネームスペースが定義されていない場合は、XMLのデフォルト・ネームスペースが使用されます)。

  6. 「ペイロード・タイプ」フィールドに、ポートレット・イベントでサポートするペイロードのデータ・タイプを入力します。または、そのデータ・タイプを参照します。

  7. 「説明」フィールドに、ポートレット・イベントの説明を入力します。

  8. (オプション)「別名」パネルでは、別名のリストを指定できます。これらの別名により、ポートレットで定義されたものと異なるQNameが付いていてもポートレット・イベントを認識できるようになります。

    1. 「作成」アイコンをクリックして、ポートレット・イベントの新しい別名を作成します。

    2. 「ネームスペース」フィールドに、この別名に使用するポートレット・イベントのネームスペースを入力します。

    3. 「名前」フィールドに、この別名に使用するポートレット・イベントのローカル・パートを入力します。

  9. ポートレット・イベントは、次に示すように、portlet.xmlファイルのアプリケーション定義セクションに追加されます。

    <portlet-app ...>
      <portlet>...</portlet>
      <portlet>...</portlet>
      ...
      <event-definition id="latLong">
        <qname xmlns:x="http://xmlns.oracle.com/portlet/EventSample">
          x:latLong
        </qname>
        <value-type>portlet.LatLong</value-type>
      </event-definition>
      ...
    </portlet-app>
    
  10. portlet.xmlファイルを保存します。

59.3.6.2 ポートレットごとの処理イベントの定義

あるポートレットで特定のポートレット・イベントをリスニングする必要がある場合、そのイベントは処理イベントとして定義します。

ポートレットに処理イベントを追加するには:

  1. portlet.xmlファイルの概要エディタを開きます。

    詳細は、第59.3.1項「ポートレット・デプロイメント・ディスクリプタ・ファイルの編集方法」を参照してください。

  2. ポートレット・プロデューサ・アプリケーション内でポートレット・イベントを定義していない場合は、この定義を先に実行しておく必要があります。

    詳細は、第59.3.6.1項「アプリケーション・レベルでのポートレット・イベントの宣言」を参照してください。

  3. 「ポートレット」タブをクリックして、ポートレット・イベントを使用するポートレットを選択します。

  4. 「イベント」タブをクリックします。

    「イベントの処理中」パネルの「使用可能」リストには、アプリケーションに定義されているすべてのポートレット・イベントが示されます。

  5. ポートレットで使用するポートレット・イベントを選択し、「追加」アイコンをクリックして、そのイベントを「選択済」リストに移動します。

    これにより、次に示すように、ポータル・イベントが処理イベントとしてportlet.xmlのポートレット定義に追加されます。

    <portlet-app ...>
      <portlet id="map">
        ...
        <supported-processing-event id="latLong">
          <qname xmlns:x="http://xmlns.oracle.com/portlet/EventSample">
            x:latLong
          </qname>
        </supported-processing-event>
        ...
      </portlet>
      ...
      <event-definition id="latLong">
        <qname xmlns:x="http://xmlns.oracle.com/portlet/EventSample">
          x:latLong
        </qname>
        <value-type>portlet.LatLong</value-type>
      </event-definition>
      ...
     </portlet-app>
    
  6. portlet.xmlファイルを保存します。

    この時点で、このポートレット・イベントは、ポートレットのコード内で使用できるようになります。

59.3.6.3 ポートレットごとの公開イベントの定義

あるポートレットで特定のポートレット・イベントをトリガーする必要がある場合、そのイベントは公開イベントとして定義します。

ポートレットに公開イベントを追加するには:

  1. portlet.xmlファイルの概要エディタを開きます。

    詳細は、第59.3.1項「ポートレット・デプロイメント・ディスクリプタ・ファイルの編集方法」を参照してください。

  2. ポートレット・プロデューサ・アプリケーション内でポートレット・イベントを定義していない場合は、この定義を先に実行しておく必要があります。

    詳細は、第59.3.6.3項「ポートレットごとの公開イベントの定義」を参照してください。

  3. 「ポートレット」タブをクリックして、ポートレット・イベントを使用するポートレットを選択します。

  4. 「イベント」タブをクリックします。

    「イベントの公開中」パネルの「使用可能」リストに、アプリケーションに定義されているすべてのポートレット・イベントが示されます。

  5. ポートレットで使用するポートレット・イベントを選択し、「追加」アイコンをクリックして、そのイベントを「選択済」リストに移動します。

    これにより、次に示すように、ポータル・イベントが公開イベントとしてportlet.xmlのポートレット定義に追加されます。

    <portlet-app ...>
      <portlet id="locations">
        ...
        <supported-publishing-event>
          <qname xmlns:x="http://xmlns.oracle.com/portlet/EventSample">
            x:latLong
          <qname>
        </supported-publishing-event>
        ...
      </portlet>
      ...
      <event-definition id="latLong">
        <qname xmlns:x="http://xmlns.oracle.com/portlet/EventSample">
          x:latLong
        </qname>
        <value-type>portlet.LatLong</value-type>
      </event-definition>
      ...
     </portlet-app>
    
  6. portlet.xmlファイルを保存します。

    この時点で、このポートレット・イベントは、ポートレットのコード内で使用できるようになります。

59.3.6.4 例: ポートレット・イベント

次の例では、あるポートレットのアクションが同じページ上の別のポートレットに作用するために使用するポートレット・イベントの使用方法について説明しています。この例では、ある企業の様々なオフィスの地理的な場所を一覧表示する、部署の所在地ポートレットというポートレットを使用します。この例では、そのポートレットを別のポートレット(地図ポートレット)とリンクする方法を示します。地図ポートレットは、部署の所在地ポートレットで選択した場所のGoogleマップを表示します。

例59-6は、これら2つのポートレットを含むポートレット・プロデューサ・アプリケーションのportlet.xmlファイルの抜粋部分を示しています。ポートレット・プロデューサ・アプリケーションでは、これら2つのポートレットでサポートするポートレット・イベント(latLong)を定義します。イベントのペイロードは、1つの場所の緯度と経度をカプセル化するオブジェクトです。

例59-6 ポートレット・イベント定義

<event-definition id="latLong">
  <qname xmlns:x="http://xmlns.oracle.com/portlet/EventSample">x:latLong</qname>
  <value-type>portlet.LatLong</value-type>
</event-definition>

例59-7に、latLongイベントを公開イベントとして使用する部署の所在地ポートレットを示します。これは、特定の状況下でイベントを発生します。

例59-7 所在地ポートレットの公開イベント定義

<portlet id="locations">
  ...
  <supported-publishing-event>
    <qname xmlns:x="http://xmlns.oracle.com/portlet/EventSample">x:latLong<qname>
    </supported-publishing-event>
    ...
</portlet>

部署の所在地ポートレットでは、このポートレット内で場所が選択されたときに、processActionメソッドでlatLongイベントを発生します(例59-8)。さらに、そのイベントのペイロードに、選択された場所の緯度と経度を設定します。

例59-8 部署の所在地ポートレットのイベント処理

public void processAction(ActionRequest request, ActionResponse response)
    throws PortletException
  {
    String locationId = request.getParameter("locationId");
    Location location = getLocation(Integer.parseInt(locationId));

    if (location != null)
    {
      // QName matches the event declared as a supported-publishing-event in
      // portlet.xml for this portlet.

      // LatLong event used by the Map portlet.
      response.setEvent(new QName("http://xmlns.oracle.com/portlet/EventSample", "latLong"),
                        new LatLong(location.getLatitude(), location.getLongitude()));

    }
 }

例59-9に、もう一方のポートレット(地図ポートレット)を示します。このポートレットもlatLongイベントを使用しますが、こちらは処理イベントとして使用します。そのため、イベントをリスニングして、ページ上の別の場所でイベントが発生したときには特定のアクションを実行することになります。

図59-9 地図ポートレットの処理イベント定義

<portlet id="map">
  ...
  <supported-processing-event id="latLong">
    <qname xmlns:x="http://xmlns.oracle.com/portlet/EventSample">x:latLong</qname>
  </supported-processing-event>
  ...
</portlet>

地図ポートレットのprocessEventメソッドは、latLongイベントを受信し、このイベントのペイロードを使用してLAT_LONG_PARAMETERレンダリング・パラメータを設定します。このパラメータは、レンダリング時にGoogleマップに表示する場所を決定するために、ポートレットで使用されます(例59-10)。

例59-10 地図ポートレットのイベント処理

@Override
  public void processEvent(EventRequest request,
                           EventResponse response)
    throws PortletException, IOException
  {
    response.setRenderParameters(request);
 
    Event event = request.getEvent();
    if (event.getName().equals("latLong"))
    {
      response.setRenderParameter(LAT_LONG_PARAMETER, event.getValue().toString());
    }
  }

ヒント:

ここでは、部署の所在地ポートレットと地図ポートレットで使用されるイベントには同じ名前(latLong)が付けられています。地図ポートレットが別の名前(たとえば、geolocation)を使用してイベントをリスニングしている場合でも、次に示すように、portlet.xmlファイルでgeolocationイベントに別名を定義することで、これら2つのポートレットは自動的にリンクされるようになります。

<event-definition id="geolocation">  <qname xmlns:x="http://xmlns.oracle.com/portlet/Map">
    x:geolocation
  </qname>  <alias xmlns:x="http://xmlns.oracle.com/portlet/EventSample">
    x:latLong
  </alias>
  <value-type>portlet.LatLong</value-type>
</event-definition>

ただし、自動的なリンクが機能するには、この2つのイベントのペイロード・タイプを同じにする必要があることに注意してください。



注意:

ポートレット間でイベント・ペイロードを受け渡しするには、そのイベント・ペイロードからXMLペイロードに形式変換できる必要があります。これを可能にするには、次のいずれかの条件を満たしている必要があります。

  • ペイロードには、JAXBバインディングが必要です。たとえば、次に示すように、ポートレット・クラスにXmlRootElementアノテーションを追加します。

    package portlet;
    
    import java.io.Serializable;
    import javax.xml.bind.annotation.XmlRootElement;
    
    @XmlRootElement(namespace="http://xmlns.oracle.com/portlet/EventSample")
    public class LatLong implements Serializable
    {
      private final double _latitude;
      private final double _longitude;
    ...
    
  • allowEventPayloadsWithoutJAXBBindingsコンテナ・ランタイム・オプションは、portlet.xmltrueに設定する必要があります。

    詳細は、第59.3.4項「JSR 286ポートレットのランタイム環境をカスタマイズする方法」を参照してください。


59.3.7 JSR 286ポートレットへのポートレット・プリファレンスの追加方法

ポートレット・プリファレンスを使用すると、エンド・ユーザーは、実行時にポートレットをパーソナライズまたはカスタマイズできるようになります。パーソナライズはこれらを実行するユーザーのみに表示され、他のユーザーには表示されません。カスタマイズは、ポートレットをパーソナライズしていないすべてのユーザーに表示されます。

デフォルトでは、JDeveloperのウィザードを使用してJSR 286ポートレットを作成すると、実行時にユーザーがポートレットのタイトルを変更できるポートレット・プリファレンスが作成されます。実行時にエンド・ユーザーがこれとは別の変更をポートレットに加えられるようにすために、追加のポートレット・プリファレンスを作成できます。追加のポートレット・リファレンスは、ポートレットの作成時に作成することも、ポートレットの作成後にportlet.xmlファイルを編集して作成することもできます。

次の手順では、ポートレットの作成後に、portlet.xmlファイルにポートレット・プリファレンスを追加する方法を説明します。ポートレットの作成時にポートレット・プリファレンスを追加する方法の詳細は、第59.2.1項「JSR 286 Javaポートレットの作成方法」を参照してください。

この項の内容は、次のとおりです。

59.3.7.1 JSR 286ポートレットへのポートレット・プリファレンスの追加

ポートレットの動作またはコンテンツを、実行時にユーザーが変更できるようにするには、ユーザーが変更できるようにするポートレットの属性に応じたポートレット・プリファレンスを作成する必要があります。

ポートレット・プリファレンスをポートレットに追加するには:

  1. portlet.xmlファイルの概要エディタを開きます。

    詳細は、第59.3.1項「ポートレット・デプロイメント・ディスクリプタ・ファイルの編集方法」を参照してください。

  2. 「ポートレット」タブをクリックして、ポートレット・プリファレンスを追加するポートレットを選択します。

  3. 「詳細」タブをクリックします。

    「プリファレンス」パネルには、そのポートレットに存在する既存のポートレット・プリファレンス(たとえば、portletTitleプリファレンス)がリストされます。

  4. 「追加」アイコンをクリックして、新しいポートレット・プリファレンスを作成します。

  5. 「名前」フィールドに、プリファレンスの名前を入力します。

    この名前は、ポートレット内で一意である必要があります。

  6. 「値」フィールドに、プリファレンスの1つ以上のデフォルト値を入力します。

    複数入力するときはカンマで区切ります。

  7. 「読取り専用」を選択すると、そのプリファレンス値はユーザーが変更できなくなります。

    ポートレット・プリファレンスは、次に示すように、portlet.xmlファイルのアプリケーション定義セクションに追加されます。

    <portlet-app ...>
      <portlet>...</portlet>
      <portlet>...</portlet>
      ...
      <portlet-preference>
        <name>portletTitle</name>
      </portlet-preference>
      <portlet-preference>
        <name>myPreference</name>
        <value>7</value>
      </portlet-preference>
      ...
    </portlet-app>
    
  8. portlet.xmlファイルを保存します。

    この時点で、このプリファレンスは、getPreferenceメソッドを使用することで、ポートレットのコード内で使用できるようになります。


    ヒント:

    プリファレンスを翻訳可能にするには、リソース・バンドル・クラスに適切なキーと値のペアを追加する必要があります。


59.3.7.2 例: ポートレットの単純なパーソナライズ

次の例では、ポートレットでの単純なパーソナライズを有効にする方法の手順を示します。

単純なパーソナライズをポートレットに追加するには:

  1. JDeveloperで、ポートレット・プロデューサ・アプリケーションを作成します。このとき、デフォルト値をそのまま使用します。

  2. JSR 286ポートレットを作成します。このとき、デフォルト値をそのまま使用します。

  3. アプリケーション・ナビゲータで、「ポートレット」プロジェクトを開きます。

  4. portlet.xmlを右クリックして、「開く」を選択します。

  5. 「ポートレット」タブをクリックして、portlet1を選択します。

  6. 「詳細」タブをクリックします。

  7. 「追加」アイコンをクリックして、新しいポートレット・プリファレンスを作成します。

  8. 「名前」フィールドに、portletContentと入力します。

  9. アプリケーション・ナビゲータで、view.jspを右クリックして、「開く」を選択します。

  10. ビジュアル・エディタで、「ソース」タブをクリックして、例59-11の太字で示したコードを追加して、portletContentポートレット・プリファレンスが表示されるようにします。

    例59-11 view.jspのサンプル・コード

    <%@ page contentType="text/html"
        import="javax.portlet.*,java.util.*,Portlets.Portlet1,
        Portlets.resource.Portlet1Bundle"%>
    <%@ taglib uri="http://java.sun.com/portlet" prefix="portlet"%>
    
    <portlet:defineObjects/>
    <%
    String[] str = {"Portlet Content"};
    PortletPreferences prefs = renderRequest.getPreferences();
    str = prefs.getValues("portletContent",str);
    for (int i=0; i<str.length; i++)
    {
    %><%=(i<str.length-1)?str[i]+", ":str[i]%><%}%> 
    
  11. アプリケーション・ナビゲータで、edit.jspを右クリックして、「開く」を選択します。

    このJSPは、フォーム・フィールド、フォーム入力フィールドおよび2つのフォーム・ボタン・フィールドで構成されています。

  12. ビジュアル・エディタで、「ソース」タブをクリックして、例59-12の太字で示したコードを追加して、ユーザーがportletContentカスタマイズ・プリファレンスの値を入力するフォーム・フィールドを実装します。

    例59-12 edit.jspのサンプル・コード

    <%@ page contentType = "text/html; charset=windows-1252"
             pageEncoding = "windows-1252"
             import = "javax.portlet.*, java.util.*,
    Portletenhance.Portletenhance,
    Portletenhance.resource.PortletenhanceBundle"%>
    @ <%@ taglib uri = "http://java.sun.com/portlet" prefix="portlet"%>
    <portlet:defineObjects/>
    <%
        PortletPreferences prefs = renderRequest.getPreferences();
        ResourceBundle res =
            portletConfig.getResourceBundle(renderRequest.getLocale());
    %>
    <form action="<portlet:actionURL/>" method="POST">
      <table border="0">
        <tr>
          <td width="20%">
            <p class="portlet-form-field" align="right">
              <%=  res.getString(PortletenhanceBundle.PORTLETCONTENT) %>
            </p>
          </td>
          <td width="80%">
            <input class="portlet-form-input-field"
                   type="TEXT"
                   name="<%= Portletenhance.PORTLETCONTENT_KEY %>"
                   value="<%= Portletenhance.buildValue(prefs,
    Portletenhance.PORTLETCONTENT_KEY) %>"
                   size="20">
          </td>
        </tr>    <tr>
          <td width="20%">
            <p class="portlet-form-field" align="right">
              <%=  res.getString(PortletenhanceBundle.PORTLETTITLE) %>
            </p>
          </td>
          <td width="80%">
            <input class="portlet-form-input-field"
                   type="TEXT"
                   name="<%= Portletenhance.PORTLETTITLE_KEY %>"
                   value="<%= prefs.getValue(Portletenhance.PORTLETTITLE_KEY,
    res.getString("javax.portlet.title")) %>"
                   size="20">
          </td>
        </tr>
        <%
        String[] str = {"Portlet Content"};
        str = prefs.getValues("portletContent",str);
    %>
    <tr><td width="20%">
    <p class="portlet-form-field" align="right">
    Content
    </p>
    </td><td width="80%">
    <textarea rows="10" cols="60" class="portlet-form-input-field"
      name="portletContent"><%
    for (int i=0; i<str.length; i++)
    {%><%= (i<str.length-1) ? str[i]+", " : str[i] %><%}%>
    </textarea>
    </td></tr>
        <tr>
          <td colspan="2" align="center">
            <input class="portlet-form-button" type="submit"
                                                
    name="<%=Portletenhance.OK_ACTION%>"
                                                
    value="<%=res.getString(PortletenhanceBundle.OK_LABEL)%>">
            <input class="portlet-form-button" type="submit"
                                                
    name="<%=Portletenhance.APPLY_ACTION%>"
                                                
    value="<%=res.getString(PortletenhanceBundle.APPLY_LABEL)%>">
          </td>
        </tr>
      </table>
    </form>
    
  13. アプリケーション・ナビゲータで、Portlet1.javaを右クリックして、「開く」を選択します。

  14. ビジュアル・エディタで、「ソース」タブをクリックして、次に示す2行のコード(太字で示しています)をprocessActionメソッドに追加します。

    // Save the preferences.
    PortletPreferences prefs = request.getPreferences();
    String param = request.getParameter(PORTLETTITLE_KEY);
    prefs.setValues(PORTLETTITLE_KEY, buildValueArray(param));
    String contentParam = request.getParameter("portletContent");
    if (contentParam != null)
    {
      prefs.setValues("portletContent", buildValueArray(contentParam));
    }
    prefs.store();
    

    このポートレットをページで使用できるようにすると、ユーザーがパーソナライズできるようなります。編集モードのポートレットには、「Portlet Content」フィールドが表示されます。ユーザーは、このフィールドにテキストを入力できます。入力されたテキストは、ポートレットのコンテンツとして表示されます。

59.3.8 JSR 286ポートレットでのポートレット・フィルタの使用方法

ポートレット・フィルタは、実行時にポートレットのコンテンツを変更できるようにするJSR 286の機能です。ポートレット・フィルタは、ポートレット・リクエストおよびポートレット・レスポンスのコンテンツを変換できる、再利用可能なJavaコンポーネントです。一般に、フィルタはポートレットのように応答を作成したり、リクエストに反応したりすることはありません。そのかわりに、リクエストおよびレスポンスを変更または変換します。

この項の内容は、次のとおりです。

ポートレット・フィルタの詳細と実装方法は、次の場所にあるJSR 286の仕様を参照してください。

http://jcp.org/en/jsr/detail?id=286

59.3.8.1 アプリケーションへのポートレット・フィルタの追加

ポートレットでポートレット・フィルタを使用できるようにするには、最初に、そのフィルタをアプリケーション内で定義しておく必要があります。

ポートレット・フィルタをアプリケーションに追加するには:

  1. portlet.xmlファイルの概要エディタを開きます。

    詳細は、第59.3.1項「ポートレット・デプロイメント・ディスクリプタ・ファイルの編集方法」を参照してください。

  2. 「Filters」タブをクリックします。

  3. 「追加」アイコンをクリックして、新しいポートレット・フィルタを作成します。

  4. 「ポートレット・フィルタの作成」ダイアログでは、新しいポートレット・フィルタを作成することも、以前に作成したポートレット・フィルタを選択することもできます。

    • 新しいポートレット・フィルタを作成するには:

      1. 「新規ポートレット・フィルタ」を選択します。

      2. 「名前」フィールドに、ポートレット・フィルタの名前を入力します。

        この名前はアプリケーション内で一意にする必要があります。また、文字、数字およびアンダースコアのみを使用する必要があります。

      3. 「パッケージ」フィールドに、新しいフィルタ・クラスを格納するパッケージを入力します。または、そのパッケージを参照します。

      4. 1つ以上の「ライフサイクル・フェーズ」チェック・ボックスを選択して、このフィルタ・クラスが実装するjavax.portlet.filterインタフェースを指定します。

        アクション - このフィルタ・クラスはActionFilterインタフェースを実装します

        イベント - このフィルタ・クラスは、EventFilterインタフェースを実装します。

        レンダリング - このフィルタ・クラスは、RenderFilterインタフェースを実装します。

        リソース - このフィルタ・クラスは、ResourceFilterインタフェースを実装します。


        ヒント:

        「ポートレット・フィルタの作成」ダイアログを使用して新しいフィルタ・クラスを作成するときには、そのフィルタ・クラスに実装するフィルタ・インタフェースを指定できます。フィルタ・クラス作成した後では、概要エディタ使用してフィルタ・インタフェースを追加または削除できなくなります。そのかわりに、フィルタ・クラスのソースを直接編集して、インタフェースと、そのインタフェースに定義されたdoFilterメソッドを手動で追加または削除することが必要になります。


    • 既存のポートレット・フィルタを選択するには:

      1. 「既存のクラスから選択」を選択します。

      2. フィルタ・クラスを入力または参照します。

  5. 「OK」をクリックします。

  6. 「表示名」フィールドに、ポートレット・フィルタのわかりやすい名前を入力します。

  7. 「説明」フィールドに、ポートレット・フィルタの説明を入力します。

  8. 「初期化パラメータ」パネルでは、フィルタ・クラスのinit()メソッドに値を渡すための初期化パラメータを指定できます。

    1. 「追加」アイコンをクリックして、ポートレット・フィルタの初期化パラメータを指定します。

    2. 「名前」フィールドに、初期化パラメータの名前を入力します。

    3. 「値」フィールドに、初期化パラメータに渡す値を入力します。

    4. 「説明」フィールドに、初期化パラメータの説明を入力します。

    ポートレット・フィルタは、次に示すように、portlet.xmlファイルのアプリケーション定義セクションに追加されます。

    <portlet-app ...>
      <portlet>...</portlet>
      <portlet>...</portlet>
      ...
      <filter>
        <display-name>Test Filter</display-name>
        <filter-name>filter_1</filter-name>
        <filter-class>javaportlets.MyFilter</filter-class>
        <lifecycle>ACTION_PHASE</lifecycle>
        <lifecycle>RENDER_PHASE</lifecycle>
      </filter>
      ...
    </portlet-app>
    
  9. portlet.xmlファイルを保存します。

59.3.8.2 ポートレットへのポートレット・フィルタの適用

アプリケーションでポートレット・フィルタを定義しておくと、そのフィルタをアプリケーション内の1つ以上のポートレットに適用できるようになります。また、ポートレット・フィルタがポートレットに適用される順序を指定することもできます。

ポートレットにポートレット・フィルタを適用するには:

  1. portlet.xmlファイルの概要エディタを開きます。

    詳細は、第59.3.1項「ポートレット・デプロイメント・ディスクリプタ・ファイルの編集方法」を参照してください。

  2. 「フィルタ・マッピング」タブをクリックします。

  3. 「追加」アイコンをクリックして、フィルタ・マッピング表に新しい行を追加します。

  4. 「フィルタ名」ドロップダウン・リストから、ポートレットに適用するポートレット・フィルタを選択します。

    このドロップダウン・リストには、portlet.xmlファイルで定義したすべてのポートレット・フィルタが移入されています。

  5. 「ポートレット名」ドロップダウン・リストから、ポートレット・フィルタを適用するポートレットを選択します。

    このドロップダウン・リストには、portlet.xmlファイルで定義したすべてのポートレットが移入されています。

    別の方法として、ワイルドカードを使用することで、複数のポートレットにポートレット・フィルタを適用できます。たとえば、*を入力すると、アプリケーション内のすべてのポートレットにポートレット・フィルタを適用できます。

    フィルタ・マッピングは、次に示すように、portlet.xmlファイルのアプリケーション定義セクションに追加されます。

    <portlet-app ...>
      <portlet>...</portlet>
      <portlet>...</portlet>
      ...
      <filter>
        <display-name>My Filter</display-name>
        <filter-name>myFilter</filter-name>
        <filter-class>javaportlets.MyFilter</filter-class>
        <lifecycle>ACTION_PHASE</lifecycle>
        <lifecycle>RENDER_PHASE</lifecycle>
      </filter>
      <filter-mapping>
        <filter-name>myFilter</filter-name>
        <portlet-name>myPortlet</portlet-name>
      </filter-mapping>
      ...
    </portlet-app>
    
  6. 「一番上」「上へ」「下へ」、および「一番下」の各アイコンを使用して、portlet.xmlファイル内のポートレット・フィルタを並べ替えます。ポートレット・フィルタの順序により、ポートレットにフィルタが適用される順序が決定されます。


    注意:

    ポートレット・フィルタは、複数のポートレットにマッピングされている可能性があります。複数のポートレットが1つの(共有)フィルタにマップされているときに、フィルタの順序を不用意に変更すると、不必要な副作用が発生することがあります。たとえば、あるポートレットに適用されているフィルタの順序を変更すると、並べ替えた順序が、そのフィルタを共有する他のすべてのポートレットに適用されるようになります。


  7. portlet.xmlファイルを保存します。

59.3.9 キャッシュを使用してJSR 286ポートレットのパフォーマンスを向上する方法

ポートレットの基本機能の設定が完了した後は、ポートレットのパフォーマンスに注目する必要があります。

キャッシュは、高度な動的コンテンツを含むWebサイトのパフォーマンスの向上に使用される一般的な手法です。JSR 286ポートレットでは、有効期限ベースおよび有効化ベースのキャッシュがサポートされています。

キャッシュの詳細は、第57.4.5項「ポートレット・パフォーマンス」を参照してください。

この項の内容は、次のとおりです。

59.3.9.1 JSR 286ポートレットの有効期限ベースのキャッシュの実装

JSR 286ポートレットの作成ウィザードを使用して、最初にポートレットを作成するときには、有効期限ベースのキャッシュの実装を選択できます。ただし、ポートレットの初期デプロイメント時には、ポートレットのキャッシュをオフにして、デプロイメント・サイクルの後半でポートレット・コンテンツが安定してきたときに、このキャッシュを実装することが望まれることがあります。さらに、有効期間の編集や、キャッシュ・スコープの変更が必要になることもあります。

有効期限ベースのキャッシュを実装するには:

  1. portlet.xmlファイルの概要エディタを開きます。

    詳細は、第59.3.1項「ポートレット・デプロイメント・ディスクリプタ・ファイルの編集方法」を参照してください。

  2. 「ポートレット」タブをクリックして、有効期限ベースのキャッシュを実装するポートレットを選択します。

  3. 「詳細」タブをクリックします。

  4. 「キャッシュ管理」パネルで、「キャッシュ・ポートレット」を選択します。


    注意:

    ポートレットのキャッシュを無効にするには、「キャッシュ・ポートレット」を選択解除します。これにより、キャッシュの有効期間が0に設定されます。これは、キャッシュされたコンテンツが常に有効期限切れになることを意味します。


  5. 「キャッシュ・スコープ」を選択します。

    • 「パブリック」を選択すると、キャッシュされたコンテンツがユーザー全体で共有されます

    • 「プライベート」を選択すると、キャッシュされたコンテンツはユーザー全体では共有されなくなります。

  6. キャッシュの有効期間を指定します。

    • 「キャッシュ・コンテンツ失効なし」を選択すると、キャッシュの有効期間が-1に設定されます。これは、キャッシュされたコンテンツが有効期限切れになることはなく、コンテンツが常にキャッシュから取得されることを意味します。このオプションは、ポートレット・コンテンツが変更される可能性のほとんどない静的コンテンツであると確信できるときに使用してください。このオプションを設定すると、次に示すコードがportlet.xmlファイルに追加されます。

      <portlet>
        ...
        <expiration-cache>-1</expiration-cache>
        ...
      </portlet>
      
    • 「キャッシュ・コンテンツ有効期限」を選択すると、指定した秒数の経過後にキャッシュされたポートレット・コンテンツが有効期限切れになります。その横にあるフィールドに、有効期間(n)を秒単位で入力します。このオプションを設定すると、次に示すコードがportlet.xmlファイルに追加されます。

      <portlet>
        ...
        <expiration-cache>n</expiration-cache>
        ...
      </portlet>
      
  7. portlet.xmlファイルを保存します。

59.3.9.2 JSR 286ポートレットの検証ベースのキャッシュの実装

検証ベースのキャッシュの実装は、初期ポートレットの作成後に、手動でコーディングする必要があります。

例59-13に、コンシューマが検証ベースのキャッシュを使用してマークアップをキャッシュするdoView()メソッドをGenericPortletに実装する一般的な方法を示します。この例では、有効期限ベースのキャッシュをプログラム的に(CacheControl.setExpirationTime()メソッドを使用して)定義する方法と、検証ベースのキャッシュとの併用でプロデューサの負荷をさらに削減する方法についても示しています。これは、serveResource()の場合にも同様に機能します。

例59-13 検証ベースのキャッシュを実装するJSR 286ポートレット

protected void doView (RenderRequest request, RenderResponse response)
  throws PortletException, IOException 
{
  CacheControl cacheControl = response.getCacheControl();
  String eTag = request.getETag();
  if (isMarkupStillValid(eTag)) 
  { 
    // Wait 30 seconds before checking ETag again
    cacheControl.setExpirationTime(30);  
 
    // Tell consumer to use its cached content
    cacheControl.setUseCachedContent(true);
    return;
  }
    
  // ETag not valid so set a new one ...

  // Define a new ETag
  cacheControl.setETag(generateETag(...));

  // Wait 60 seconds before checking ETag again
  cacheControl.setExpirationTime(60);
 
  // ... and generate fresh portlet markup
  createMarkup(request, response);
}
 
private boolean isMarkupStillValid(String eTag)
{
  if (eTag == null)
  {
    return false; // No ETag was supplied
  }
 
  // Perform portlet specific checks for the consumer's cached 
  // copy of the markup still being valid based on the given ETag
  ...
}
 
private String generateETag(...)
{
  // Portlet specific code to generate an ETag, for example, a hash 
  // of the data on which the portlet's markup is based
  ...
  
  return eTag;
}

JSR 286ポートレットの検証ベースのキャッシュの詳細は、次の場所にあるJSR 286の仕様を参照してください。

http://jcp.org/en/jsr/detail?id=286

59.3.10 リソース・プロキシに対して書きなおされたURLの実装

リソース・プロキシは、WSRPでリソースを取得する標準的な方法です。ポートレット内でのURLの問題を回避するには、指定したリソース内のURLをすべて書きなおすためのフラグを設定できます。たとえば、URLを含むHTMLのフラグメントがある場合、WSRPリソース・プロキシを考慮に入れてURLをリライトするために、このフラグを設定できます。

URLのリライトが必要なことを示すには、PortletRequest属性のoracle.portlet.server.resourceRequiresRewritingtrueに設定します。たとえば、例59-14に示すようなコードを含めると、エンコードするURLにリソース・プロキシが使用されるようになります。このコードはメソッド内にカプセル化して、このコードがURLごとに繰り返されないようにします。

例59-14 WSRP用のリソース・プロキシ

request.setAttribute("oracle.portlet.server.resourceRequiresRewriting", 
     Boolean.TRUE); 
String url = response.encodeURL(pathToResourceForRewriting); 
request.removeAttribute("oracle.portlet.server.resourceRequiresRewriting");

oracle.portlet.server.resourceRequiresRewritingを具体的に設定していないと、falseにデフォルト設定され、URLはリライトされなくなります。この属性をtrueに設定することで、この機能を明示的にアクティブにする必要があります。

defaultProxiedResourceRequiresWsrpRewriteコンテナ・ランタイム・オプションを使用すると、デフォルトのWSRP requiresRewriteフラグを使用するように指定できます。このコンテナ・ランタイム・オプションで指定したオプション(デフォルトの設定はtrue)は、リクエスト属性でオーバーライドされていない場合に使用されます。詳細は、「com.oracle.portlet.defaultProxiedResourceRequiresWsrpRewrite」を参照してください。

59.3.11 ステートレス・リソース・プロキシの実装方法

リライトの必要がないプロトコル・リソースがある場合は、ステートレス・リソース・プロキシを使用できます。ステートレス・リソース・プロキシでは、ブラウザに返されるURLに、ポートレットIDなどのコンテキスト情報が必要なくなります。これにより、該当するリソースに対するキャッシュ・ヒット率が向上します。ステートレス・リソース・プロキシは、静的なJavaScriptファイルや静的なイメージなどの機能に有用なことがわかります。

ステートレス・プロキシが必要なことを示すには、PortletRequest属性のoracle.portlet.server.useStatelessProxyingtrueに設定します。たとえば、例59-15に示すようなコードを含めると、エンコードするURLにステートレス・プロキシが使用されるようになります。このコードはメソッド内にカプセル化して、このコードがURLごとに繰り返されないようにします。

例59-15 ステートレス・リソース・プロキシ

request.setAttribute("oracle.portlet.server.useStatelessProxying", Boolean.TRUE);
String url = response.encodeURL(pathToResource);
request.removeAttribute("oracle.portlet.server.useStatelessProxying");

oracle.portlet.server.useStatelessProxyingを具体的に設定していないと、falseにデフォルト設定されます。この属性をtrueに設定することで、この機能を明示的にアクティブにする必要があります。

59.3.12 JSR 286ポートレット用のセキュリティの実装方法

WSRPプロデューサ側とクライアント側でセキュリティを構成することで、WSRPプロデューサにデプロイされたJSR 286ポートレットを保護できます。WSRPプロデューサを使用したJSR 286ポートレットのセキュリティ保護方法の詳細は、第74.17項「WS-Securityを使用したWSRPプロデューサを介するアイデンティティ伝播の保護」を参照してください。

59.3.13 JSR 286ポートレット用の永続ストアの管理方法

ポートレット永続ストアは、コンシューマ登録ハンドルおよびポートレット・プリファレンス・データを永続的に保持するために使用されます。ポートレット・プロデューサは、3種類の永続ストアのうちの1つを使用できます。

  • Consumer - プロデューサのメタデータをコンシューマ・アプリケーションに関連付けます。このオプションをお薦めします。

  • Database - リレーショナル・データベースを使用してデータを永続化します。これは、主に後方互換性を維持することを目的としていますが、大量のカスタマイズが見込まれる場合には有効です。

  • File - ファイル・システムを使用してデータを永続化します。これは後方互換性の目的で提供されています。本番環境ではファイル・ベースの永続ストアは使用しないでください。この永続ストアでは、多層化環境や高可用性環境がサポートされません。ただし、ファイル・ベースの永続ストアを使用しながら、統合WLSを使用してアプリケーションをテストすることが必要になる場合があります。

詳細は、第57.4.4項「ポートレットのパーソナライズとカスタマイズ」を参照してください。

この項の内容は、次のとおりです。

59.3.13.1 WSRPプロデューサ用の永続ストアのセットアップ

WSRPポートレット・プロデューサでは、JNDI変数(persistentStore)を使用して、どのタイプの永続ストアを使用するかを判断します。アプリケーション内で最初のポートレットを作成するときには、この変数はデフォルトでConsumerに設定されています。この変数の値は、ポートレット・プロデューサ・アプリケーションのweb.xmlファイルで変更できます。


注意:

すでに別のポートレットが含まれているアプリケーションにポートレットを作成すると、既存の永続ストアの設定が維持されます。


ファイル永続ストアを使用する場合は、その永続ストアに使用するルート・ディレクトリへのパスを指定するために、JNDI変数のfileStoreRootも使用します。

表59-2に、WSRPプロデューサの永続ストアを指定するために使用するJNDI変数の一覧と説明を示します。

表59-2 WSRPプロデューサ・データベース・プリファレンス・ストア関連のJNDI変数

変数名 変数値 説明

oracle/portal/wsrp/server/persistentStore

Database

File

Consumer

ポートレット・プロデューサ・アプリケーションのコンシューマ登録ハンドルとポートレット・プリファレンスを永続化するために使用する、データ・ストア(ファイル、データベース、またはコンシューマ)を指定します。

oracle/portal/wsrp/server/fileStoreRoot

portletdata

ファイル・プリファレンス・ストアで使用されるルート・ディレクトリのパスを定義します。

絶対パスは、ファイル・システム・ルートを基準として解釈されます。相対パスは、WC_ORACLE_HOME/portalディレクトリを基準として解釈されます。

同じWebLogic Server内で実行されているすべてのプロデューサは、この変数に同じパスを使用する必要があります。このようにしていないと、一部のポートレットでPortlet unavailableエラーが発生します。


WSRPポートレット・プロデューサの永続ストアをセットアップするには:

  1. JDeveloperで、永続ストアをセットアップするポートレット・プロデューサ・アプリケーションを開きます。

  2. ポートレット・プロジェクト(「ポートレット」など)を開きます。

  3. 「Webコンテンツ」ノード、「WEB-INF」ノードの順に開きます。

  4. web.xmlを右クリックして、「開く」を開きます。

  5. 「ソース」タブをクリックします。

  6. データベース永続ストアを指定する場合は、次のコードを追加します。

    <env-entry>
      <env-entry-name>oracle/portal/wsrp/server/persistentStore</env-entry-name>
      <env-entry-type>java.lang.String</env-entry-type>
      <env-entry-value>Database</env-entry-value>
    </env-entry>
    

    ファイルベース永続ストアを指定する場合は、次のコードを追加します。

    <env-entry>
      <env-entry-name>oracle/portal/wsrp/server/persistentStore</env-entry-name>
      <env-entry-type>java.lang.String</env-entry-type>
      <env-entry-value>File</env-entry-value>
    </env-entry>
    <env-entry>
      <env-entry-name>oracle/portal/wsrp/server/fileStoreRoot</env-entry-name>
      <env-entry-type>java.lang.String</env-entry-type>
      <env-entry-value>myPrefStore</env-entry-value>
    </env-entry>
    

    コンシューマ永続ストアを指定する場合は、次のコードを追加します。

    <env-entry>
      <env-entry-name>oracle/portal/wsrp/server/persistentStore</env-entry-name>
      <env-entry-type>java.lang.String</env-entry-type>
      <env-entry-value>Consumer</env-entry-value>
    </env-entry>
    
  7. web.xmlファイルを保存します。

  8. WebLogic Serverを再起動します。

59.3.13.2 WSRPプロデューサの永続ストアの移行

たとえば、テスト環境から本番環境に移動するときに、ポートレット・プロデューサで使用する永続ストアのタイプを変更する必要がある場合は、既存のデータを元の永続ストアから新しい永続ストアに移行できます。

この項の内容は、次のとおりです。

59.3.13.2.1 データベースまたはファイルベースの永続ストアの移行

WSRPポートレット・プロデューサの永続ストア移行ユーティリティ(PersistenceMigrationTool)を使用すると、データベース永続ストアとファイルベース永続ストアとの間で既存のデータを移行できます(たとえば、テストで使用していたファイルベース永続ストアから、本番環境のデータベース永続ストアへの移行)。また、このユーティリティを使用して、アップグレード中のユーザーは、既存のロケール固有のポートレット・プリファレンス・データが最新のJSPリリースと互換性のある名前形式を使用していることを確認できます。さらに、このユーティリティは、移行元と移行先のストアが同じタイプになる移行にも使用できるため、データベース間でのデータの移行も可能です。


注意:

PersistenceMigrationToolユーティリティを実行するときには、クラスパスで次のライブラリを参照する必要があります。

  • wcs-producer-spi.jar

  • portlet-utils.jar

  • portlet-producer-container-common.jar

  • portlet-producer-container-persistence.jar

  • oracle-portlet-api.jar

  • wsrp-container.jar

  • oracle-portlet-tags.jar

  • ojdbc6.jar

クラスパスで参照されるojdbc6.jarライブラリは、データベースで使用されるライブラリと同じにする必要があります。


データベースまたはファイルベースの永続ストアを移行するには:

  1. 次に示すように、適切なライブラリがクラスパスで参照されていることを確認します。

    ./java  -classpath
    ORACLE_COMMON_HOME/webcenter/modules/com.bea.wsrp_10.3.2.0/system/wcs-producer-spi.jar:
    ORACLE_COMMON_HOME/webcenter/modules/oracle.portlet.server_11.1.1/portlet-utils.jar:
    ORACLE_COMMON_HOME/webcenter/modules/oracle.webcenter.framework_11.1.1/portlet-producer-container-common.jar:
    ORACLE_COMMON_HOME/webcenter/modules/oracle.webcenter.framework_11.1.1/portlet-producer-container-persistence.jar:
    WC_ORACLE_HOME/webcenter/modules/oracle.portlet.server_11.1.1/oracle-portlet-api.jar:
    WC_ORACLE_HOME/webcenter/modules/oracle.portlet.server_11.1.1/wsrp-container.jar:
    WC_ORACLE_HOME/webcenter/modules/oracle.portlet.server_11.1.1/oracle-portlet-tags.jar:
    DB_ORACLE_HOME/jdbc/lib/ojdbc6.jar
    
  2. 次の構文を使用して、PersistenceMigrationToolを実行します。

    java oracle.portlet.server.containerimpl.PersistenceMigrationTool
    -sourceType [file | db]
    -destType [file | db]
    {-sourcePath [dir | 
     -sourceUsername username -sourcePassword password -sourceDatabase db
     -sourceDriver srcDriver]}
    {-destPath [dir | destUsername username -destPassword password -destDatabase db
     -destDriver dstDriver]}
    [-debug]
    

    ここで:

    • sourceTypeは、移行元ストアがファイル(file)またはデータベース(db)のどちらにあるかを指定します。ソース・ストアと宛先ストアを同じタイプにすることができます。したがって、1つのデータベースからもう1つのデータベース、あるいは1つのファイル・システムからもう1つのファイル・システムへの移行が可能です。

    • destTypeは、移行先ストアがファイル(file)またはデータベース(db)のどちらにあるかを指定します。ソース・ストアと宛先ストアを同じタイプにすることができます。したがって、1つのデータベースからもう1つのデータベース、あるいは1つのファイル・システムからもう1つのファイル・システムへの移行が可能です。

    • sourcePathは、ファイルベース永続ストアの場所です。この引数は、sourceTypefileの場合に必要です。

    • sourceUsernameは、永続ストア・データベースのデータベース・ユーザー名です。この引数は、sourceTypedbの場合に必要です。

    • sourcePasswordは、永続ストア・データベースのデータベース・パスワードです。この引数は、sourceTypedbの場合に必要です。

    • sourceDatabaseは、永続ストア・データベースの名前です。この引数は、sourceTypedbの場合に必要です。

    • sourceDriverは、使用するデータベース・ドライバの名前です。たとえば、SQL Serverデータベースの場合、データベース・ドライバはcom.microsoft.sqlserver.jdbc.SQLServerDriverになります。この引数の値を省略すると、移行ツールは、sourceDatabase引数から使用する適切なドライバの判断を試みます。

    • destPathは、ファイルベース永続ストアの場所です。この引数は、destTypefileの場合に必要です。

    • destUsernameは、永続ストア・データベースのデータベース・ユーザー名です。この引数は、destTypedbの場合に必要です。

    • destPasswordは、永続ストア・データベースのデータベース・パスワードです。この引数は、destTypedbの場合に必要です。

    • destDatabaseは、永続ストア・データベースの名前です。この引数は、destTypedbの場合に必要です。

    • destDriverは、使用するデータベース・ドライバの名前です。たとえば、SQL Serverデータベースの場合、データベース・ドライバはcom.microsoft.sqlserver.jdbc.SQLServerDriverになります。この引数の値を省略すると、移行ツールは、destDatabase引数から使用する適切なドライバの判断を試みます。

    • debugは、標準出力による完全ロギングをオンにします。これによりユーザーは、ツール実行時に発生する問題を診断できます。

例59-16に、PersistenceMigrationToolユーティリティの実行例を示します。この例では、ファイル・ストアのプリファレンスがデータベース・ストアにコピーされます。

例59-16 PersistenceMigrationToolユーティリティの実行

./java  -classpath
ORACLE_COMMON_HOME/webcenter/modules/com.bea.wsrp_10.3.2.0/system/wcs-producer-spi.jar:
ORACLE_COMMON_HOME/webcenter/modules/oracle.portlet.server_11.1.1/portlet-utils.jar:
ORACLE_COMMON_HOME/webcenter/modules/oracle.webcenter.framework_11.1.1/portlet-producer-container-common.jar:
ORACLE_COMMON_HOME/webcenter/modules/oracle.webcenter.framework_11.1.1/portlet-producer-container-persistence.jar:
WC_ORACLE_HOME/webcenter/modules/oracle.portlet.server_11.1.1/oracle-portlet-api.jar:
WC_ORACLE_HOME/webcenter/modules/oracle.portlet.server_11.1.1/wsrp-container.jar:
WC_ORACLE_HOME/webcenter/modules/oracle.portlet.server_11.1.1/oracle-portlet-tags.jar:
DB_ORACLE_HOME/jdbc/lib/ojdbc6.jar
oracle.portlet.server.containerimpl.PersistenceMigrationTool
-sourceType file \
-sourcePath /data/prefs
-destType db \
-destUsername scott \
-destPassword tiger \
-destDatabase abc.mycompany.com:1521:yourdatabase \

ここで:

  • ORACLE_COMMON_HOMEは、Oracle共通ホームです

  • WC_ORACLE_HOMEは、WebCenter Portal Oracleホームです

  • DB_ORACLE_HOMEは、データベースのOracleホームです(WebCenter Portal Oracleホームと同じマシン上にある場合)。データベースのOracleホームが別のマシンにある場合は、DB_ORACLE_HOME/jdbc/libディレクトリを、WebCenter Portal Oracleホームの一時ディレクトリにコピーします。クラスパスでは、この一時ディレクトリのojdbc6.jarライブラリを参照する必要があります。

59.3.13.2.2 コンシューマ永続ストアの移行

コンシューマ永続ストア間の移行には、永続ストア移行ユーティリティを使用できません。コンシューマ永続ストア間の移行には、データをコンシューマのあるプロデューサからエクスポートして別のプロデューサにインポートする必要があります。

コンシューマ永続ストアを移行するには:

  1. プロデューサ・メタデータをコンシューマ・アプリケーションからEARファイルにエクスポートします。

    これは、カスタマイズ・データなどを取得するために、リモート・プロデューサに接続します。これに使用できるツールは次のとおりです。

  2. プロデューサの接続を別のプロデューサに再マップするか(すべての永続ストア・タイプの使用が可能)、現在のプロデューサのプリファレンス・ストア構成を変更します。

    プロデューサ接続の再マップについては、第63.3.1項「ポートレット・プロデューサ登録設定の編集方法」を参照してください。

  3. エクスポート済のEARファイルから再度コンシューマ・アプリケーションにインポートします。これにより、関連するメタデータがプロデューサに再度送信され、構成済の永続ストアに格納されます。

59.3.13.2.3 WSRPポートレット・プロデューサの移動

ポートレット・プロデューサを別のサーバーに移動したときには、そのプロデューサの永続ストアも移動する必要があります。

新しいプロデューサをインストールした後で、次に示すように永続ストアを移動します。

  • コンシューマ永続ストア - データはコンシューマに保存されるため、永続ストアを移動するための要件はありません。

  • データベース永続ストア: 次のいずれかを実行します。

    • WebLogic Serverのデータ・ソースが元のプロデューサと同じデータベースを参照するように、新しいプロデューサを構成します。

    • 永続ストア移行ユーティリティを使用して、永続ストアを移行します(詳細は、第59.3.13.2項「WSRPプロデューサの永続ストアの移行」を参照)。

  • ファイル永続ストア: 次のいずれかを実行します。

最後に、Enterprise Manager Fusion Middleware ControlまたはWLSTのコマンド(setWSRPProducerRegistrationまたはsetPDKJavaProducerRegistration)を使用して、プロデューサ登録のURLを更新します。

59.3.13.3 データベース永続化ストアに対するJavaオブジェクト・キャッシュのアクセスの有効化

永続ストアのパフォーマンスを向上させるために、永続ストアへのアクセスにJavaオブジェクト・キャッシュを使用できます。これにより、リクエストのたびに永続ストアにアクセスする必要がなくなります。永続ストアに対するJavaオブジェクト・キャッシュを有効にするには、JNDI変数のenableJavaObjectCacheを使用します。

永続ストアのアクセスにJavaオブジェクト・キャッシュを有効化するには:

  1. JDeveloperで、永続ストアをセットアップするポートレット・プロデューサ・アプリケーションを開きます。

  2. ポートレット・プロジェクト(「ポートレット」など)を開きます。

  3. 「Webコンテンツ」ノード、「WEB-INF」ノードの順に開きます。

  4. web.xmlを右クリックして、「開く」を開きます。

  5. 「ソース」タブをクリックします。

  6. 次のコードを追加します。

    <env-entry>
      <env-entry-name>
        oracle/portal/wsrp/server/enableJavaObjectCache
      </env-entry-name>
      <env-entry-type>java.lang.Boolean</env-entry-type>
      <env-entry-value>true</env-entry-value>
    </env-entry>
    
  7. web.xmlファイルを保存します。

59.3.14 設計時にポートレット・プロデューサをエクスポートおよびインポートする方法

設計時にポートレット・プロデューサをエクスポートおよびインポートできます。

この項の内容は、次のとおりです。

59.3.14.1 設計時のポートレット・プロデューサのエクスポート

デプロイメント用にアプリケーションをパッケージ化するときには、プロデューサのデータをMARファイルに含めるために、そのアプリケーションが参照するポートレット・プロデューサに接続します。実行されていないプロデューサがあると、それらのプロデューサに接続できなくなり、そのデータは含まれなくなります。

そのかわりに、設計時にプロデューサ・データのエクスポート・アーカイブを作成すると、プロデューサが実行されていることを確認できるため、すべてのプロデューサ・データ(リモートのカスタマイズやクライアント側のメタデータを含む)を取得できるようになります。このエクスポート・アーカイブは、デプロイメント時にWebCenter Portal Frameworkで使用できるため、リモートのプロデューサに接続する必要がなくなります。

設計時にポートレット・プロデューサをエクスポートするには:

  1. WC_ORACLE_HOME/jdeveloper/jdev/bin/jdev.confファイルを編集して、次のJVMフラグを設定します。

    AddVMOption  -Doracle.webcenter.portlet.dt.disableRemoteExport=true
    

    このフラグを設定することで、デプロイメント用にアプリケーションをパッケージ化するときに、次に示す手順で作成したエクスポート・アーカイブがMARファイルに確実に含まれるようになります。これにより、プロデューサ・データを取得するためにリモートのプロデューサに接続することはなくなります。

  2. JDeveloperを再起動して、新しい設定を適用します。

  3. エクスポートするプロデューサを利用しているアプリケーションを開きます。

  4. メニューから、「アプリケーション」「ポートレット・プロデューサのエクスポート」の順に選択します。

    このメニュー・オプションは、現在のアプリケーションにプロデューサが含まれている場合にのみ表示されます。

  5. 「ポートレット・プロデューサのエクスポート」ダイアログの「エクスポート・アーカイブ・ファイル名(.ear)」フィールドに、エクスポート・セットに使用する絶対パスとファイル名を入力します。

  6. 「OK」をクリックします。

    disableRemoteExportフラグをtrueに設定しているため、デプロイメント用にアプリケーションをパッケージ化するときに、WebCenter Portal Frameworkは、このダイアログで指定した場所にエクスポート・アーカイブが存在しているかどうかを確認します。エクスポート・アーカイブが存在している場合は、プロデューサ・データを取得するためにリモートのプロデューサに接続するかわりに、そのアーカイブのコンテンツをMARファイルに取り込みます。


    注意:

    disableRemoteExportフラグが設定されていているときに、エクスポート・アーカイブが存在しない場合は、リモートのプロデューサ・データを含まないデフォルトのエクスポート・アーカイブが作成され、MARファイルに取り込まれます。


59.3.14.2 設計時のポートレット・プロデューサのインポート

実行時に行ったカスタマイズを含むプロデューサ・データは、デプロイ済のアプリケーションから、設計時のアプリケーションにインポートできます。


注意:

エクスポート・アーカイブ(EARファイル)に含まれるプロデューサは、インポート先のアプリケーションに含まれるプロデューサと同じにする必要があります。


デプロイ済のアプリケーションからプロデューサ・メタデータのエクスポート・アーカイブを作成する方法については、Oracle Fusion Middleware Oracle WebCenter Portalの管理のポートレット・クライアント・メタデータのエクスポート(Frameworkアプリケーション)に関する項を参照してください。

設計時にポートレット・プロデューサをインポートするには:

  1. WC_ORACLE_HOME/jdeveloper/jdev/bin/jdev.confファイルを編集して、次のJVMフラグを設定します。

    AddVMOption  -Doracle.webcenter.portlet.dt.enableImport=true
    
  2. JDeveloperを再起動して、新しい設定を適用します。これにより、「ポートレット・プロデューサのインポート」メニュー・オプションが確実に選択できるようになります。

  3. プロデューサをインポートするアプリケーションを開きます。

  4. メニューから、「アプリケーション」「ポートレット・プロデューサのインポート」の順に選択します。

  5. 「ポートレット・プロデューサのインポート」ダイアログの「インポート・アーカイブ・ファイル名(.ear)」フィールドに、インポートするエクスポート・アーカイブの絶対パスとファイル名を入力します。

  6. 「OK」をクリックします。


注意:

プロデューサをインポートしたアプリケーションがその時点で統合WLSで実行されている場合、更新されたプロデューサを確認するには、アプリケーションを再実行する必要があります。単にページを更新すると、設計時と実行時で異なるMDSインスタンスが使用されるためにエラーが発生することがあります。


59.4 JSR 286ポートレットのテスト

ポートレットを本番環境にデプロイする前に、まず、期待通りに動作することを確認するためにテストすることを強くお薦めします。

この項の内容は、次のとおりです。

59.4.1 統合WebLogic ServerでのWSRPポートレット・プロデューサの実行方法

統合WebLogic Server (統合WLS)には、ポートレットを短時間で簡単にテストする方法が用意されています。このテスト方法では、JDeveloper内でアプリケーションを実行できるように事前に構成されているため、デプロイメント・プロファイルを作成する必要はありません。

統合WLSでJSR 286ポートレットをテストするには:

  1. JDeveloperで、テストするポートレットが属するポートレット・プロデューサ・アプリケーションを開きます。

  2. ポートレット・プロジェクト(「ポートレット」など)を開きます。

  3. 「Webコンテンツ」ノード、「WEB-INF」ノードの順に開きます。

  4. portlet.xmlを右クリックして、「実行」を選択します。

    portlet.xmlを実行すると、ポートレット・プロデューサ・アプリケーションのパッケージ化とデプロイメントが、そのアプリケーションの名前に関連する名前の統合WLSインスタンスで開始されます。

  5. 「IntegratedWebLogicServer - ログ」ウィンドウを確認し、デプロイの進行状況を監視します。ログには、アプリケーション・ページのURLが示されます。WSRPプロデューサのURLには、次の構文が使用されます。

    http://host:port/applicationname-Portlets-context-root/info
    

    ここで:

    • hostは、プロデューザがデプロイされているサーバーです。

    • portはHTTPリスナー・ポートです。通常、7101です。サーバーが起動すると、ポートがコンソールに表示されます。

    • context-rootは、Webアプリケーションのコンテキスト・ルートです。

    ブラウザのウィンドウに、図59-6のようなテスト・ページが表示されます。

    図59-6 WSRPプロデューサ・テスト・ページ

    図59-6の説明が続きます
    「図59-6 WSRPプロデューサ・テスト・ページ」の説明

  6. アプリケーションの実行中に、JDeveloperとブラウザを切り替え、アプリケーションを設計時に変更してその変更を保存し、ブラウザでテスト・ページをリフレッシュできます。

  7. プロデューサが正常に実行している場合、プロデューサをアプリケーションに登録し、1つ以上のポートレットをページに追加して、それが正常に動作していることを確認する必要があります。プロデューサを登録することにより、そのプロデューサを探し、通信するために必要な情報をアプリケーションに提供します。プロデューサを登録すると、接続として表示され、プロデューサとそのポートレットは「アプリケーション・リソース」パネルの「接続」ノードまたは「リソース」パレットで使用できるようになります。

    JSR 286ポートレットのプロデューサを登録する場合は、第63.2.1.1項「WSRPポートレット・プロデューサの登録方法」で説明する手順を実行してください。

    ポートレットをページに追加するには、第63.5項「ページへのポートレットの追加」の手順に従います。

  8. 統合WLSインスタンスを停止するには、「Run Manager」タブで、DefaultServerを選択し、赤い「停止」アイコンをクリックします。インスタンスが停止すると、アプリケーションはアンデプロイされるため、使用できなくなります。


    ヒント:

    「IntegratedWebLogicServer - ログ」ウィンドウで、赤い「停止」アイコンをクリックするか、DefaultServerを選択しても、統合WLSインスタンスを停止できます。


59.4.2 統合WebLogic ServerでのWSRPポートレット・プロデューサの実行時の処理

WSRPポートレット・プロデューサを統合WLSで実行すると、次の処理が行われます。

  • ポートレットをWebサービスとして構成するために、WSDLとその他の構成ファイルがWEB-INFディレクトリに追加されます。

  • web.xmlファイルは、JSR 286ポートレット・プロデューサ・アプリケーションを正常に実行するために必要な、リスナー・クラスとサーバー・クラス、フィルタ、パラメータ、およびその他の構成で更新されます。

    例: oracle.portlet.server.adapter.web.ServerContextListenerクラス、WSRP_v2_PortletManagement_Serviceフィルタ、WSRPBaseServiceフィルタなど。

  • JSR 286ポートレットに必要なライブラリ(oracle.portlet-producer.wsrpなど)が、weblogic.xmlファイルに追加されます。

これらの構成は、ポートレットの要件によって異なります。

59.4.3 統合WebLogic ServerへのWSRPポートレット・プロデューサのデプロイ方法

WSRPポートレット・プロデューサ・アプリケーションを統合WLSインスタンスで実行すると、そのインスタンスが停止したときに、アプリケーションはアンデプロイされるため使用できなくなります。より安定したテスト・シナリオの場合、デフォルト・サーバーの実行中に常に使用できるように、ポートレット・プロデューサ・アプリケーションを統合WLSにデプロイできます。

このメソッドを選択する場合、最初にデプロイメント・プロファイルを作成する必要があります(第61.4項「WARデプロイメント・プロファイルの作成」を参照してください)。アプリケーションを統合WLSにデプロイすると、「デプロイメント構成」ダイアログが表示され、デプロイメント設定の構成およびカスタマイズができます。JDeveloperで事前作成されたファイル・システムMDSリポジトリが、「リポジトリ名」フィールドに表示されます。

統合WLSでのアプリケーションのデプロイおよび実行の詳細は、第7.2項「統合WebLogic ServerへのPortal Frameworkアプリケーションのデプロイ」を参照してください。

59.4.4 ポートレットのパーソナライズのテスト

ポートレットにパーソナライズを実装していると、認証されたユーザーのポートレットにのみ「パーソナライズ」アイコンが表示されます。そのため、ポートレットのパーソナライズをテストするには、ポートレットを利用するアプリケーションに、なんらかの形のセキュリティを実装することが必要になります。テストのためには、最も基本的な認証を構成すれば済みます。詳細は、第74.12項「ポートレット・パーソナライズをテストするための基本認証の構成」を参照してください。

59.4.5 WSRPテスト・ページの非表示または削除

セキュリティ上の理由から、WSRPテスト・ページを非表示にして管理者のみが確認できるようにすることも、そのページを完全に削除することもできます。

この項には次のサブセクションが含まれます:


注意:

WebブラウザでプロデューサへのSOAPリクエストを作成できる、Webserviceテスト・ページもあります。WSRPポートレット・プロデューサについては、このページがデフォルトで無効にされています。このページには、ポートレット・プロデューサのテストについての有用な情報は示されませんが、このページを有効にすることもできます。このページを有効にするには、デプロイ済プロデューサのWARファイルからoracle-webservices.xmlファイルを抽出して、WSRP v1とWSRP v2の両方のプロデューサのexpose-testpageフラグをtrueに設定してから、WARファイルとEARファイルを再パッケージ化してプロデューサを再デプロイします。


59.4.5.1 WSRPテスト・ページの非表示

WSRPテスト・ページをすべてのユーザーが確認する必要がない場合は、このページを管理者のみが確認できるようにして保護できます。

WSRPテストページを非表示にするには:

  1. JDeveloperで、テスト・ページを非表示にするポートレット・プロデューサ・アプリケーションを開きます。

  2. ポートレット・プロジェクト(「ポートレット」など)を開きます。

  3. 「Webコンテンツ」ノード、「WEB-INF」ノードの順に開きます。

  4. web.xmlを右クリックして、「開く」を開きます。

  5. 「ソース」タブをクリックします。

  6. 次のコードを追加します。

    <security-role>
      <description>AdministratorRole</description>
      <role-name>Admin</role-name>
    </security-role>
    <security-constraint>
      <display-name>TestPageInfo</display-name>
      <web-resource-collection>
        <web-resource-name>TestPageInfo</web-resource-name>
        <description>Protect the test page servlet.</description>
        <url-pattern>/info/*</url-pattern>
      </web-resource-collection>
      <auth-constraint>
        <description>Administrators</description>
        <role-name>Admin</role-name>
      </auth-constraint>
      <user-data-constraint>
        <transport-guarantee>NONE</transport-guarantee>
      </user-data-constraint>
    </security-constraint>
    
  7. web.xmlファイルを保存します。

59.4.5.2WSRPテスト・ページの削除

WSRPテスト・ページは完全に削除できます。

WSRPテスト・ページを削除するには、パッケージ化するときにweb.xmlファイルに挿入された要素を編集する必要があります。つまり、パッケージした結果のEARファイル内のweb.xmlファイルを編集することが必要になります。

WSRPテスト・ページを削除するには:

  1. パッケージ化したときに作成されたEARファイルからweb.xmlファイルを抽出して、このファイルを任意のエディタで開きます。

  2. 次のコードのコメントを解除します。

    <servlet-mapping>
       <servlet-name>WSRPTestPage</servlet-name>
       <url-pattern>/info</url-pattern>
    </servlet-mapping>
    
  3. web.xmlファイルを保存して、編集したファイルをEARファイルに追加します。

59.5 WebLogic管理対象サーバーへのJSR 286ポートレットのデプロイ

WebLogic管理対象サーバーにJSR 286ポートレットをデプロイする方法の詳細は、第61章「ポートレット・プロデューサのデプロイ」を参照してください。

JSR 286ポートレットを含むポートレット・プロデューサをWebLogic管理対象サーバーにデプロイすると、第59.4.2項「統合WebLogic ServerでのWSRPポートレット・プロデューサの実行時の処理」で説明した構成設定がEARファイルに追加されます。

59.6 WebLogic PortalポートレットのWebCenter Portalへの移行

この項では、WebLogic PortalのEclipse IDEで開発したWebLogic Portalポートレットを、WebCenter PortalのJDeveloper環境に移行する方法について説明します。

この項の内容は、次のとおりです。


注意:

WLPのポートレットをWebCenter Portalプロジェクトに移行するために利用できる直接的なサポートやツールは存在しません。多くの場合、大幅なリファクタリングと再コーディングが必要になります。この項では、移行に関するいくつかの問題に注目して、必要に応じて推奨事項を示します。


59.6.1 WebLogic PortalからWebCenter PortalへのJavaポートレットの移行

一般に、WebLogic Portalで開発したJSR 286標準ポートレット(Javaポートレット)は、WebCenter Portal/JDeveloper環境に直接移動できます。ポートレットのすべてのアーティファクト(portlet.xml.javaファイル、.jspファイルなど)を、単に、JDeveloperのポートレット・プロデューサ・アプリケーション・プロジェクトにコピーします。


注意:

ポートレットで使用しているWebLogic Portal固有のAPIは、WebCenter PortalのAPIに書き直す必要があります。WebLogic Portal固有のAPIは、WebCenter環境では動作しなくなります。



ヒント:

WebLogic Portalのエクスポート機能を使用すると、Javaポートレットをアーカイブ・ファイルにエクスポートできます。このアーカイブ・ファイルは、JDeveloperのプロジェクトにインポートできます。この方法は、ポートレットのすべてのアーティファクトを環境間で手動コピーするよりも簡単です。Oracle Fusion Middleware Oracle WebLogic Portalポートレット開発ガイドの別のシステムで使用するためのJavaポートレットのエクスポートに関する項を参照してください。


59.6.2 WebCenter PortalアプリケーションへのWLPポートレットの移行に関する問題

WLP開発環境からWebCenter Portal開発環境へのポートレットの移行は、直接的にはサポートされていません。一般に、このプロセスには、移行したポートレットのコードと関連ファイルに対する、大幅な書き直しとリファクタリングを伴います。


注意:

WebLogic PortalのWSRPで実行可能であったポートレットは(どのタイプでも)、WebCenter Portalコンシューマに含まれるWebLogic Portalポートレット・プロデューサから直接利用できます。Oracle Fusion Middleware Oracle WebLogic Portalフェデレーテッド・ポータル・ガイドのWSRPのOracle WebCenter PortalおよびOracle Portalとの相互運用に関する項を参照してください。


WebLogic Portalポートレットを、JDeveloperのWebCenter Portalプロジェクトに直接移動すると、次の特有の問題が発生することがあります。

  • URL生成: WebLogic PortalでサポートされるURLタイプの一部(DesktopURL、CustomEventURL、PageURL、WindowURL、StandalonePortletURLなど)は、WebCenter Portalでは動作しません。

  • イベント: WebCenter Portalコンシューマは、WebLogic Portalフレームワークが生成するすべてのイベントを生成するわけではありません。これに該当するサポートされないイベントには、Init、LookAndFeelReinit、Notification、Refresh、WindowActivation、WindowDeactivationなどがあります。

  • レンダリングの依存性: WLPのレンダリングの依存性は、WebCenterでは機能しません。

  • WLPフレームワークのAPI: WLPの多くのAPIは、WebCenter Portalではサポートされていません。

59.6.3 WebCenter Portalポートレット・プロデューサ・アプリケーションへのWLPポートレットの移行に関する一般的なヒント

この項では、WLPポートレットをWebCenter Portalのポートレット・プロデューサ環境に移動する際の一般的なガイダンスについて説明します。ポートレットの直接的な移行はサポートされていませんが、この項に示したヒントは、様々なタイプのWLPポートレットを手動で移行するプロセスに役立つことがあります。


注意:

この項では、一般的なガイダンスのみを説明しています。第59.6項「WebLogic PortalポートレットのWebCenter Portalへの移行」で説明したように、WLPポートレット・タイプのWebCenter Portalアプリケーションまたはポートレット・プロデューサ・アプリケーションへの直接移行は、直接的にはサポートされていません。ほとんどの場合、ポートレットをWLPからWebCenter Portalに移動するときには、既存のポートレットのコードの書き直しやリファクタリングが必要になります。

前述したように、ポートレットで使用されているWebLogic Portal固有のAPIは、WebCenter PortalのAPIを使用するように書き直す必要があります。WebLogic Portal固有のAPIは、WebCenter環境では動作しなくなります。


  • JSPポートレット: JSPポートレットをWebCenter Portalプロジェクトに直接移動することはサポートされていません。JSPポートレットをJSR286ポートレットにリファクタリングしてから移行することを検討してください。詳細は、第59.6.1項「WebLogic PortalからWebCenter PortalへのJavaポートレットの移行」を参照してください。

  • JSR 168/286ポートレット: ほとんどのJava (JSR 168 / 286)ポートレットは、WebCenter Portalポートレット・プロデューサに直接インポートして、JSR286ポートレットとして実行できます。JSR168仕様で保証されている特定のエラー条件を利用する一部のJSR168ポートレットは、JSR168互換モードでの実行が必要になることがあります。Oracle Fusion Middleware Oracle WebLogic Portalポートレット開発ガイドのJSR-286/JSR-168ポートレットの互換性に関する項を参照してください。WLPに独自のイベント機能(.portletファイルで宣言されるイベントのサブスクリプション)を使用するJSR168ポートレットは、JSR286のイベントを使用するように書き直す必要があります。

  • Java Page Flowポートレット: JPFポートレットは、WebCenter Portalのポートレット・プロデューサではサポートされていないため、WebLogic Portal WSRPプロデューサから使用するか、JSR286ポートレットまたはJSFポートレットにリファクタリングする必要があります。

  • JSFポートレット: ポートレットがWLPのJSR329 JSFポートレット・ブリッジ向けに作成されている場合は、WebCenterプロデューサで変更することなく実行できます。WLPの"ネイティブ" JSFポートレット・ブリッジを使用するポートレットについては、そのポートレットをWebLogic Portalプロデューサから利用するか、JSR329ブリッジを使用するJSF 1.2ポートレットにアップグレードする必要があります。Oracle Fusion Middleware Oracle WebLogic Portalポートレット開発ガイドのJSF-Javaポートレットの使用に関する章も参照してください。

  • Clipperポートレット: ClipperポートレットはWebCenter Portalではサポートされていませんが、WebCenter Portalのページレット・プロデューサのWebクリッピング機能により、同等の機能が提供されます。

  • Strutsポートレット: StrutsポートレットのWebCenter Portalプロジェクトへの直接移動は、サポートされていません。JSPポートレットをJSR286ポートレットにリファクタリングしてから移行することを検討してください。詳細は、第59.6.1項「WebLogic PortalからWebCenter PortalへのJavaポートレットの移行」を参照してください。

  • Content Presenterポートレット: WLP Content PresenterポートレットはWSRPでは動作しません。また、WebCenterとは連動しません。ただし、同等のポータル機能がWebCenter Portalのコンテンツ・プレゼンタで使用できます。Oracle Fusion Middleware Oracle WebCenter Portalによるポータルの構築の「コンテンツ・プレゼンタを使用したコンテンツの公開」の章を参照してください。

  • リモート(WSRP)ポートレット: WLPで利用されるリモート(WSRP)ポートレットは、かわりにWebCenter Portalのコンシューマで利用されます。WLP固有のWSRP機能を利用するリモート・ポートレットには、変更が必要になることがあります。たとえば、カスタムのデータ・転送機能は、データを伝達するためのイベントまたは共有パラメータを使用して置き換える必要があります。Oracle Fusion Middleware Oracle WebLogic Portalフェデレーテッド・ポータル・ガイドの「WSRPのOracle WebCenter PortalおよびOracle Portalとの相互運用」と、「WLPとWebCenter Portal: Frameworkアプリケーション間のWSRPセキュリティの構成」の章を参照してください。

59.7 JSR 286 Javaポートレットのトラブルシューティング

この項では、JSR 286ポートレットの作成時およびテスト時に発生する可能性のある問題のトラブルシューティングに役立つ情報を提供します。

この項の内容は、次のとおりです。

59.7.1 JSR 286ポートレットの作成に関する問題

この項の内容は、次のとおりです。

59.7.1.1 ポートレットの作成ウィザードにアクセスできない

問題

「新規ギャラリ」に、「規格に基づいたJavaポートレット(JSR 286)」オプションがありません。

原因

JSR 286ポートレットを作成しようとしているアプリケーションが、WebCenter PortalのPortal Frameworkアプリケーション・テンプレートを使用して作成されているため、そのアプリケーションはポートレットの作成用にスコープ設定されていません。

解決方法

  1. ポートレット・プロデューサ・アプリケーションまたはポートレット作成用にスコープ設定されているアプリケーション(WebCenter PortalのPortal Frameworkアプリケーション・テンプレートを使用して構築されているアプリケーション以外のアプリケーション)でポートレットを作成します。

  2. 「新規ギャラリ」で、「すべてのテクノロジ」タブをクリックすると、アプリケーションのテクノロジ・スコープに関係なく、使用できるすべてのオプションがリストされます。

59.7.1.2 ポートレットに必要なポートレット機能が追加できない

問題

JSR 286 Javaポートレットの作成ウィザードで、特定の機能(たとえば、ポートレット・イベントやパブリック・レンダラ・パラメータなど)をポータルに追加するオプションがありません。

原因

JSR 286 Javaポートレットの作成ウィザードには、特定の機能をポートレットに追加するオプションはありません。

解決方法

JSR 286 Javaポートレットの作成ウィザードを使用してポートレットを作成した後で、概要エディタを使用してportlet.xmlファイルを編集することで、高度な機能を追加してください。詳細は、第59.3項「JSR 286 Javaポートレットの開発」を参照してください。

59.7.2 JSR 286ポートレットのテストに関する問題

ポートレット開発のテスト段階でポートレットを利用するときに発生する可能性のある問題の一覧は、第63.11項「ポートレットのトラブルシューティング」を参照してください。