14 ポートレットの消費

WebCenter Portalで、ポートレットを登録してポータル・ページに追加します。

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

ポートレットの消費の概要

WebCenter Portalでは、ポートレット・プロデューサをADFアプリケーションに登録することにより、ポートレットを消費できます。ADFアプリケーションでは、自分で構築したポートレットおよび(パッケージ・アプリケーションのベンダーなどの)サード・パーティから入手したポートレットを消費できます。

WebCenter Portalに加えて、他のADFアプリケーションでプロデューサ・アプリケーションを消費することもできます。これにより、ADFに基づく任意のアプリケーションでポートレットを使用できます。ポートレットを開発するユーザーは、ADFアプリケーションでJDeveloperを使用してこの機能をテストできます。

ポートレット・プロデューサは、次の2つの方法で登録できます。

  • ADFアプリケーションにポートレット・プロデューサを登録します。プロデューサを他のアプリケーションに登録しない場合は、このオプションを使用します。

  • 「リソース・パレット」を使用してポートレット・プロデューサを登録します。このオプションは、複数のアプリケーションにそのプロデューサのポートレットを使用する場合に使用します。

「リソース・パレット」で使用可能なポートレットは、それをページ上にドロップするか、「アプリケーション・リソース」に追加することで、任意のアプリケーションに追加できます。アプリケーション・ナビゲータの「アプリケーション・リソース」パネルに、「リソース・パレット」からプロデューサ接続全体をドラッグ・アンド・ドロップすることもできます。これにより、プロデューサがアプリケーションに登録されます。かわりに、「リソース・パレット」でプロデューサを右クリックし、ポップアップ・メニューから「アプリケーションに追加」を選択して、現在開いているアプリケーションにプロデューサを登録できます。

JDeveloperは、WSRPプロデューサとOracle PDK-Javaプロデューサの両方を登録するためのウィザードを備えています。

ポートレットの消費に関連するオプションは数多くあります。たとえば、ポートレットをページに直接配置するか、コンポーザ・コンポーネント内にそれらをネストするかを選択できます。また、ポートレット・タグの多くの属性は調整でき、複数のポートレットを互いに連結することもできます。

WebCenter PortalへのWSRPポートレット・プロデューサの登録

WSRPポートレット・プロデューサを登録するときには、プロデューサの運用パラメータを表す基本情報を指定する必要があります。ポートレットを消費するアプリケーションは、プロデューサと通信したり、プロデューサを介してポートレットと通信するときに、この情報を使用します。

WebCenter Portalは、WSRP 1.0とWSRP 2.0のプロデューサをどちらもサポートします。WSRP 2.0標準では特に、ポートレット間の通信およびポートレット・カスタマイズのエクスポートおよびインポートがサポートされます。標準ベースのJSR 286ポートレットを構築しながら、WSRP 2.0のメリットを活用できます。

この項には次のトピックが含まれます:

JDeveloperを使用したWSRPポートレット・プロデューサの登録方法

JDeveloperを使用して、WSRPポートレット・プロデューサを登録できます。

WSRPポートレット・プロデューサの登録ウィザードは、WSRP 1.0および2.0の両方のプロデューサを登録するためのエントリ・ポイントです。登録に成功すると、接続を作成した場所に応じて、新しく登録されたプロデューサがJDeveloperでアプリケーション・ナビゲータの「アプリケーション・リソース」パネルか、「リソース・パレット」に表示されます。その後、プロデューサからポートレットを選択してアプリケーション(.jspx)ページに配置できます。

注意:

Oracle WebLogic Portalによって提供されるプロデューサを登録し、そのポートレットでADFリッチ・コンポーネントを使用する場合、WSRP 2.0 WSDL URLを登録し、ポートレットが適切に機能するようにする必要があります。

また、WSRPポートレット・プロデューサの登録ウィザードを使用して、ポートレット化したJSFアプリケーションまたはポートレット化したADFタスク・フローであるJSFポートレットを登録します。JSFアプリケーションからポートレットを作成したら、ポートレットをWLSインスタンスにデプロイし、WSRPポートレット・プロデューサを登録する場合と同じようにそのJSFポートレット・プロデューサを登録できます。Oracle JSF Portlet Bridgeによって、JSFアプリケーションおよびタスク・フローがJSR 286ポートレットとして公開されます。

WSRPポートレット・プロデューサを登録するには:

注意:

WSRPポートレット・プロデューサの登録ウィザードで、「終了」をクリックした後に「取消」,をクリックしても、登録は取り消されません。

  1. Oracle JDeveloperを開きます。
  2. 「アプリケーション・ナビゲータ」で「アプリケーション・リソース」ノードを開きます。
  3. 「アプリケーション・リソース」で「接続」を右クリックし、ポップアップ・メニューから「新規接続」「WSRPプロデューサ」の順に選択します。

    WSRPポートレット・プロデューサの登録ウィザードの「プロデューサ名の指定」ページが開きます。

    図14-1 WSRPポートレット・プロデューサの登録の「プロデューサ名の指定」ページ


    プロデューサ名の指定

  4. 「プロデューサ名の指定」ページで、WSRPポートレット・プロデューサの詳細を入力します。
    フィールド 説明

    接続の作成場所

    ウィザードへのアクセス方法に応じて、接続の作成場所のオプションを選択します。

    • アプリケーション・リソース - アプリケーションからウィザードを起動した場合は、このオプションを選択します。これはデフォルト選択です。

    • リソース・パレット - リソース・パレットからウィザードを起動した場合は、このオプションを選択します。

    ターゲット・プロジェクト

    WSRPプロデューサの接続用にポータルを消費するように構成するプロジェクトを選択します。

    注意: このオプションは、アプリケーション・ナビゲータからウィザードを起動した場合にのみ変更できます。

    プロデューサ登録名

    すべての接続で一意となるプロデューサ登録の名前を入力します。

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

    WSRPポートレット・プロデューサの登録ウィザードの「接続詳細の指定」ページが開きます。

    図14-2 WSRPポートレット・プロデューサの登録の「接続詳細の指定」


    「接続詳細の指定」ページ

  6. 「接続詳細の指定」ページで、WSRPポートレット・プロデューサの接続の詳細を入力します。
    フィールド 説明

    WSDL URL

    プロデューサのURLを入力します。

    構文は、WSRP実装に応じて異なります。たとえば、サンプルWSRPプロデューサでは次の構文を使用します。

    • http://host:port/context-root/portlets/wsrp1?WSDL

    • http://host:port/context-root/portlets/wsrp2?WSDL

    • http://host:port/context-root/portlets?WSDL (後方互換性のためのWSRP 1.0)

    説明:

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

    • portは、サーバーがHTTPリクエストをリスニングするポートです。

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

    • portlets[/wsrp(1|2)]?WSDLは、静的テキストを示します。ここに入力するテキストは、プロデューサがデプロイされている方法によって異なります。

    例: http://myhost.example.com:7101/portletapp/portlets/wsrp2?WSDL

    プロデューサ・テスト・ページには、次のURLを介してアクセスできます。http://host:port/context-root/info

    プロデューサへの連絡にプロキシを使用

    アプリケーションとプロデューサがファイアウォールで区切られている場合は、このオプションを選択します。ファイアウォールで区切られている場合は、アプリケーションとプロデューサ間の通信にHTTPプロキシが必要です。

    プロキシのURLとポート番号を指定します。

    注意: このステップのプロキシ・フィールドは、デフォルトでJDeveloperの「プリファレンス」(メイン・メニューの「ツール」「プリファレンス」を選択し、「Webブラウザとプロキシ」を選択)で設定されているプロキシ・プリファレンスに設定されます。

  7. 「次へ」をクリックします。
    プロデューサへの接続がテストされます。問題がある場合、エラー・メッセージが表示されます。続行する前に問題をすべて解決する必要があります。

    WSRPポートレット・プロデューサの登録ウィザードの「追加登録詳細の指定」ページが開きます。

    図14-3 WSRPポートレット・プロデューサの登録ウィザードの「追加登録詳細の指定」ページ


    この画像は、WSRPポートレット・プロデューサの登録ウィザードの「追加登録詳細の指定」ページを示しています

  8. 「追加登録詳細の指定」ページで、設計時の操作中にプロデューサが応答するまでの待機時間(秒数)を入力します。

    プロデューサによっては、追加の登録プロパティを定義します。そのような場合、ウィザードのこのページの表にそれらのプロパティが表示されます。表のこれらの追加プロパティに対して値を入力できます。これらのプロパティはプロデューサに固有であり、登録時にのみ使用されます。つまり、コンシューマ・アプリケーションによりプロデューサに送信される情報を登録時に収集すると、プロデューサによってコンシューマに対してこの情報が格納され、以降は使用されます。

  9. 次のオプションのいずれかを選択します
    • 「リソース・パレット」でプロデューサを登録している場合、「終了」をクリックして登録を完了します。

      プロデューサがユーザー・カテゴリを宣言する場合は、「終了」をクリックすると、「WSRPポートレット・プロデューサの登録」ダイアログが表示されます。「はい」をクリックして、プロデューサ宣言のユーザー・カテゴリをアプリケーション定義のJava EEセキュリティ・ロールにマップする方法を参照してください。この機会を拒否して登録プロセスを完了するには、「いいえ」をクリックします。

      注意:

      この時点でセキュリティ・ロールへのユーザー・カテゴリのマップを拒否する場合、後でプロデューサ登録を編集することでそれを実行できます。
    • 「アプリケーション・リソース」パネルでプロデューサを登録していて、プロデューサ(したがって、そのポートレット)にアクセスするたびに認証をリクエストする予定である場合、「次へ」をクリックします。

      セキュリティを構成しない場合は、「終了」をクリックします

    「次へ」をクリックすると、WSRPポートレット・プロデューサの登録ウィザードの「セキュリティ属性の構成」ページが開きます。

    図14-4 WSRPポートレット・プロデューサの登録ウィザードの「セキュリティ属性の構成」


    この画像は、WSRPポートレット・プロデューサの登録ウィザードの「セキュリティ属性の構成」を示しています。

  10. 「セキュリティ属性の構成」ページで、WSRPプロデューサでの認証に使用するセキュリティ・トークンのタイプを指定します。
    フィールド 説明

    トークン・プロファイル

    WSRPプロデューサの認証に使用するトークン・プロファイルのタイプを次の中から選択します。

    • なし - トークンなし。WS-SecurityヘッダーはSOAPメッセージにアタッチされません。このオプションを選択する場合、ウィザードの残りの部分を完了しないことになります。「終了」をクリックします。

    • メッセージ整合性付きWSS 1.0 SAMLトークン

    • メッセージ保護付きWSS 1.0 SAMLトークン - このポリシーを選択する場合は、「キーストアの指定」ページの「受信者の別名」も指定する必要があります。

    • WSS 1.0ユーザー名トークン(パスワードなし) - このトークン・プロファイルは、WSRPプロデューサに異なるアイデンティティ・ストアがある場合に使用します。このプロデューサには、プロデューサに関連する外部アプリケーションを定義して関連付ける必要があります。ここで定義される外部アプリケーションは、ユーザー資格証明を取得し、プロデューサに伝播するために使用されます。プロデューサは、これを外部アプリケーションに対して構成されたアイデンティティ・ストアで検証します。

    • WSS 1.0ユーザー名トークン(パスワードあり) - このポリシーを選択する場合は、「キーストアの指定」ページの「受信者の別名」も指定する必要があります。このポリシーを選択する場合は、「受信者の別名」も指定する必要があります

    • WSS 1.0 SAMLトークン - このポリシーでは、キーストアの構成は不要です。

    • メッセージ保護付きWSS 1.1 SAMLトークン

    トークン・プロファイルの詳細は、『Oracle WebCenter Portalの管理』WSRPプロデューサのセキュリティの接続パラメータに関する項を参照してください。

    構成

    構成タイプを選択します。

    • デフォルト - デフォルトを選択した場合、すべてのデフォルト・キーストア属性(場所、パスワード、キーストア・タイプ、署名キーおよび別名、暗号化キーおよび別名)は、JPS (Java Platform Security)構成から取得されます。「受信者の別名」の値は、使用されているポリシーから取得されます。アプリケーションがデプロイされているWebLogic Serverは、WS-Security用に構成されている必要があります。詳細は、『Oracle WebCenter Portalの管理』WS-SecurityによるWSRPプロデューサの保護に関する項を参照してください。

    • カスタム - このオプションを選択する場合、ウィザードの次のページで適切なキーストア属性を入力する必要があります。

    デフォルト・ユーザー

    ユーザーがアプリケーションに対して認証されていないときにリモート・プロデューサにアサートするユーザー名を入力します。

    認証されていない場合は、anonymousというアイデンティティがアプリケーション・ユーザーに関連付けられます。OWSMでは、現時点では匿名アイデンティティの伝播はサポートされていないため、ここではかわりのアイデンティティを指定する必要があります。ただし、この場合は、アプリケーションがユーザーを認証していないため、指定するデフォルト・ユーザーはリモート・プロデューサで権限の低いユーザー(パブリック・コンテンツの表示に使用するのに適したアイデンティティ)になることに注意してください。たとえば、この目的でアイデンティティ・ストアにゲスト・アカウントを作成できます。ユーザーがアプリケーションで認証されている場合、デフォルト・ユーザーではなくそのユーザーのアイデンティティがアサートされます。

    注意:

    • 「デフォルト・ユーザー」を指定する場合、この情報を受け入れるようにリモート・プロデューサを設定する必要があります。

    • 「ユーザー名トークン(パスワードあり)」を選択した場合、「デフォルト・ユーザー」ディレクトリは表示されません

    発行者名

    SAMLトークンの発行者名(たとえば、www.oracle.com)を入力します。

    このフィールドは、「トークン・プロファイル」ドロップダウン・リストから「SAMLトークン」オプションを選択し、「構成」オプションから「カスタム」を選択した場合にのみ表示されます。発行者名は、サブジェクトの検証を保証する証明エンティティです。

    プロデューサと外部アプリケーションとの関連付け

    このプロデューサが外部アプリケーションに対する認証を提供する必要がある場合に、アプリケーションを選択します。

    このオプションは、「ユーザー名トークン(パスワードあり)」を選択した場合にのみ使用できます

  11. 次のオプションのいずれかを選択します
    • 「終了」をクリックします。構成オプションとして「デフォルト」を選択した場合、「キーストアの指定」ページのフィールドは無効化されます。

      プロデューサがユーザー・カテゴリを宣言する場合は、「終了」をクリックすると、「WSRPポートレット・プロデューサの登録」ダイアログが表示されます。「はい」をクリックして、プロデューサ宣言のユーザー・カテゴリをアプリケーション定義のJava EEセキュリティ・ロールにマップする方法を参照してください。この機会を拒否して登録プロセスを完了するには、「いいえ」をクリックします。

    • 「次へ」をクリックして、続行します。

    「次へ」を選択した場合、WSRPポートレット・プロデューサの登録ウィザードの「キーストアの指定」ページが開きます。

    図14-5 WSRPポートレット・プロデューサの登録ウィザードの「キーストアの指定」


    この画像は、WSRPポートレット・プロデューサの登録ウィザードの「キーストアの指定」を示しています

  12. 「キーストアの指定」ページで、キーストアの詳細を指定します。
    フィールド 説明

    ストア・パス

    SOAPメッセージの一部(セキュリティ・トークンおよびSOAPメッセージ本体)での署名に使用する証明書および秘密キーを収めたキーストアのフルパスを指定します。

    フルパスがわからない場合は、「参照」をクリックして、そのファイルに移動して選択します。選択するファイルは、Java keytoolで作成されたキーストアです。

    ストア・パスワード

    キーストアの作成時に設定されたキーストアへのパスワードを指定します。

    キーストア・パスワードが正しくないと、「ストア・タイプ」フィールドと「署名キーの別名」ドロップダウン・リストは移入されません。

    間違ったキーストア・パスまたはパスワードを入力すると、パスワードは無効で修正する必要があるというエラー・メッセージが表示されます。適切な値を指定するまで、この画面上の「ストア・パス」および 「ストア・パスワード」以外のすべてのフィールドは無効になっています。

    ストア・タイプ

    ストア・タイプは常にJKS (Java Key Store)です。「ストア・タイプ」の値はキーストアから読み取られ、常に編集不可能です。

    署名キーの別名

    署名キーの別名を選択します。

    「ストア・パスワード」フィールドに適切なパスワードを入力すると、リストに自動的に移入されます。「署名キーの別名」は、署名に使用される秘密キーに関連付けられた証明書の識別子です。指定されたキーストアで見つかったキーの別名は、リストで選択可能になります。署名に使用するキーの別名を選択してください。

    署名キーのパスワード

    「署名キーの別名」で指定した別名により識別されるキーにアクセスするパスワードを指定します。

    暗号化キーの別名

    (オプション)暗号化キーの別名を選択します。

    「ストア・パスワード」フィールドに適切なパスワードを入力すると、リストに自動的に移入されます。指定されたキーストアで見つかったキーの別名は、リストで選択可能になります。暗号化に使用するものを選択します。

    暗号化キーのパスワード

    「暗号化キーの別名」に指定した別名によって識別されるキーにアクセスするためのパスワードを指定します。

    受信者の別名

    プロデューサの証明書に関連付けられたキーストア別名を選択します。

    この証明者を使用して、プロデューサへのメッセージを暗号化します。

    このフィールドは、ウィザードの「セキュリティ属性の構成」ページで「メッセージ整合性付きSAMLトークン」「トークン・プロファイル」として選択した場合は表示されません。

  13. 「終了」をクリックします。

    プロデューサがユーザー・カテゴリを宣言する場合は、「終了」をクリックすると、そのユーザー・カテゴリをJava EEロールにマップするかどうかを尋ねるダイアログが表示されます。「はい」をクリックして、プロデューサ宣言のユーザー・カテゴリをアプリケーション定義のJava EEセキュリティ・ロールにマップする方法を参照してください。この機会を拒否して登録プロセスを完了するには、「いいえ」をクリックします。

    プロデューサがユーザー・カテゴリを宣言する場合は、「終了」をクリックすると、そのユーザー・カテゴリをJava EEロールにマップするかどうかを尋ねるダイアログが表示されます。「はい」をクリックして、プロデューサ宣言のユーザー・カテゴリをアプリケーション定義のJava EEセキュリティ・ロールにマップする方法を参照してください。この機会を拒否して登録プロセスを完了するには、「いいえ」をクリックします。

アプリケーションの定義済Java EEセキュリティ・ロールに対するプロデューサの宣言済ユーザー・カテゴリのマップ方法

プロデューサで宣言するユーザー・カテゴリは、プロデューサに含まれるポートレットから導出されます。たとえば、規格に基づいたJavaポートレット(JSR 286)ウィザードで作成された1つ以上のJSR 286ポートレットがプロデューサに含まれる場合、ポートレット作成中に追加されたセキュリティ・ロールはすべて、プロデューサで宣言するユーザー・カテゴリに含められます。Java EEセキュリティ・ロールは、アプリケーションのweb.xmlファイルのプロパティを介して指定できます。

アプリケーション定義のJava EEセキュリティ・ロールでプロデューサが宣言したユーザー・カテゴリをマップするには:

  1. WSRPポートレット・プロデューサの登録ウィザードで「終了」をクリックしたら、その結果表示されるダイアログで「はい」をクリックします。
  2. 「ユーザー・カテゴリ」ダイアログで、「ユーザー・カテゴリ」ごとに、「J2EEセキュリティ・ロール」 列の対応するフィールドをクリックします。
    プロデューサ登録設定を編集するときは、「ユーザー・カテゴリ」ダイアログにもアクセスできます。
  3. 表示されるリストから、プロデューサのユーザー・カテゴリにマップするセキュリティ・ロールを選択します。
  4. すべてのユーザー・カテゴリがマップされたら、「OK」をクリックします。

WebCenter PortalへのOracle PDK-Javaポートレット・プロデューサの登録

PDK-Javaポートレット・プロデューサを登録するときには、プロデューサの運用パラメータを表す基本情報を指定する必要があります。ポートレットを消費するアプリケーションは、プロデューサと通信したり、プロデューサを介してポートレットと通信するときに、この情報を使用します。

登録に成功すると、接続を作成した場所に応じて、新しく登録されたプロデューサがJDeveloperでアプリケーション・ナビゲータの「アプリケーション・リソース」パネルか、「リソース・パレット」に表示されます。これで、アプリケーション(jspx)ページに配置するポートレットをプロデューサから選択できます。

注意:

Oracle PDK-Javaポートレット・プロデューサの登録ウィザードで、「終了」をクリックした後に「取消」をクリックしてもその登録は取り消されません。

PDK-Javaポートレット・プロデューサを登録するには:

  1. Oracle JDeveloperを開きます。
  2. 「アプリケーション・ナビゲータ」で「アプリケーション・リソース」ノードを開きます。
  3. 「アプリケーション・リソース」で「接続」を右クリックし、ポップアップ・メニューから「新規接続」「Oracle PDK-Javaプロデューサ」の順に選択します。

    Oracle PDK-Javaポートレット・プロデューサの登録ウィザードの「プロデューサ名の指定」ページが開きます。

    図14-6 Oracle PDK-Javaポートレット・プロデューサの登録「プロデューサ名の指定」


    この画像は、PDK-Javaプロデューサの詳細を入力できる「プロデューサ名の指定」ダイアログを示しています。

  4. 「プロデューサ名の指定」ページで、PDK-Javaプロデューサの詳細を入力します。
    フィールド 説明

    接続の作成場所

    ウィザードへのアクセス方法に応じて、接続の作成場所のオプションを選択します。

    • アプリケーション・リソース - アプリケーションからウィザードを起動した場合は、このオプションを選択します。これはデフォルト選択です。

    • リソース・パレット - リソース・パレットからウィザードを起動した場合は、このオプションを選択します。

    ターゲット・プロジェクト

    PDK-Javaプロデューサの接続用に構成するプロジェクトを選択します。

    注意: このオプションは、アプリケーション・ナビゲータからウィザードを起動した場合にのみ変更できます。

    プロデューサ登録名

    すべての接続で一意となるプロデューサ登録の名前を入力します。

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

    Oracle PDK-Javaポートレット・プロデューサの登録ウィザードの「接続詳細の指定」ページが開きます。

    図14-7 Oracle PDK-Javaポートレット・プロデューサの登録ウィザードの「接続詳細の指定」


    この画像は、Oracle PDK-Javaポートレット・プロデューサの登録ウィザードの「接続詳細の指定」を示しています。

  6. 「接続詳細の指定」ページで、Oracle PDK-Javaプロデューサの接続の詳細を入力します。
    フィールド 説明

    URLエンドポイント

    次の構文を使用してプロデューサのURLを入力します。

    http://host:port/context-root/providers

    説明:

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

    • portは、サーバーがHTTPリクエストをリスニングするポートです。

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

    • providersは、静的テキストを示します。ここに入力するテキストは、プロデューサがデプロイされている方法によって異なります。

    次に例を示します。

    http://myhost.example.com:7101/myEnterprisePortlets/providers

    サービスID

    このプロデューサの一意の識別子を入力します。

    PDK-Javaでは、1つのアダプタ・サーブレットの下に複数のプロデューサをデプロイできます。これらのプロデューサは、それぞれ一意のサービスIDによって識別されます。サービスIDが必要になるのは、URLエンドポイントにサービスIDまたはプロデューサ名が追加されていない場合のみです。

    たとえば、次のURLエンドポイントにはsampleというサービスIDが必要です。

    http://myhost:7101/myEnterprisePortlets/providers

    ただし、次のURLのエンドポイントには、サービスIDを指定する必要はありません。

    http://myhost:7101/myEnterprisePortlets/providers/sample

    プロデューサへの連絡にプロキシを使用

    アプリケーションとプロデューサがファイアウォールで区切られている場合は、このオプションを選択します。ファイアウォールで区切られている場合は、アプリケーションとプロデューサ間の通信にHTTPプロキシが必要です。

    プロキシのURLとポート番号を指定します。

    注意: このステップのプロキシ・フィールドは、デフォルトでJDeveloperの「プリファレンス」(メイン・メニューの「ツール」「プリファレンス」を選択し、「Webブラウザとプロキシ」を選択)で設定されているプロキシ・プリファレンスに設定されます。

    プロデューサと外部アプリケーションとの関連付け

    このプロデューサが外部アプリケーションに対する認証を提供する必要がある場合は、このオプションを選択し、ドロップダウン・リストからアプリケーションを選択します。

    プロデューサ・セッションの有効化

    プロデューサと消費するアプリケーションとの間のセッションを有効化する場合に選択します。

    セッションが有効化されると、サーバーは、ユーザー名などのセッション固有の情報をメンテナンスします。メッセージ認証ではセッションが使用されるため、共有キーが設定されている場合は、このオプションも選択する必要があります。

    プロデューサとサーバー間がセッションレス通信である場合は、このオプションを選択解除してください。

  7. 次のいずれかのオプションを選択します。
    • 「終了」をクリックすると、残りのすべてのステップにデフォルト値を使用して登録を完了できます。

    • 「次へ」をクリックすると、残りのステップを続行して追加の詳細を指定できます。

    「次へ」をクリックした場合は、Oracle PDK-Javaポートレット・プロデューサの登録ウィザードの「追加登録詳細の指定」ページが開きます。

    図14-8 Oracle PDK-Javaポートレット・プロデューサの登録ウィザードの「追加登録詳細の指定」


    この画像は、Oracle PDK-Javaポートレット・プロデューサの登録ウィザードの「追加登録詳細の指定」を示しています。

  8. 「追加登録詳細の指定」ページで、PDK-Javaプロデューサの追加の詳細を入力します。
    フィールド 説明

    デフォルト・タイムアウト間隔(秒)

    設計時の操作中にプロデューサが応答するまでの待機時間(秒数)を入力します。

    サブスクライバID

    登録するプロデューサのコンシューマを識別する文字列を入力します。

    プロデューサが登録されると、プロデューサのコールが送信されます。コール中、コンシューマは「サブスクライバID」の値をプロデューサに渡します。この値は、ポートレット・コールが行われるたびに渡されます。「サブスクライバID」がプロデューサの予測した値でない場合、プロデューサは登録コールを拒否することがあります。

    注意:

    初期登録後にプロデューサ登録を編集してサブスクライバIDを変更しても、変更は有効になりません。別のサブスクライバIDを指定するには、プロデューサを登録しなおす必要があります。

    共有キー

    暗号化を処理するように設定されているプロデューサに使用する共有キーを入力します。

    共有キーは、メッセージ認証用のメッセージ署名を生成するための暗号化アルゴリズムで使用されます。プロデューサを共有キーで設定し、誤った共有キーを入力した場合、プロデューサの登録は失敗することに注意してください。共有キーは、10文字から20文字までの英数字を含むことができます。

  9. 「終了」をクリックします。

ポートレット・プロデューサの接続の管理

ポートレット・プロデューサを登録した後、登録設定を編集、接続をテスト、プロデューサをリフレッシュして最新のポートレットのリストを取得、またはポートレット・プロデューサへの接続を削除できます。

この項には次のトピックが含まれます:

ポートレット・プロデューサ登録設定の編集

WSRPポートレット・プロデューサの登録ウィザードと「PDK-Javaポートレット・プロデューサの登録」ウィザードではいずれも、プロデューサを登録したとき入力した値の多くをアクセスおよび修正できます。

ポートレット・プロデューサの登録設定を編集するには:

  1. Oracle JDeveloperを開きます。
  2. 「アプリケーション・ナビゲータ」で「アプリケーション・リソース」ノードを開きます。
  3. 編集するプロデューサに移動し、右クリックして「プロパティ」を選択します。
  4. 必要に応じてプロデューサ登録プロパティを編集し、「次へ」をクリックして、ウィザードの各ページのステップを実行します。

    図14-9 ポートレット・プロデューサの編集


    この画像は、ポートレット・プロデューサの編集ウィザードを示しています。

    ウィザードの左側にあるナビゲーション・パネルのリンクをクリックして、特定のステップに直接進むこともできます。

    「プロデューサ登録名」を編集することはできません

  5. 必要な設定をすべて変更したら、「終了」をクリックします
  6. 「WSDL URL」「URLエンドポイント」,など、いくつかのプロパティの編集では、プロデューサのリフレッシュが必要です。そのような変更を実行して、プロデューサをただちにリフレッシュできるダイアログが表示された場合、変更を保存します。ただし、プロデューサをリフレッシュしないでください。リフレッシュすると、プロデューサの登録を編集するためのウィザードに戻ります。必要に応じて「はい」「いいえ」または「取消」をクリックします。

    注意:

    「WSDL URL」フィールドの値は編集できますが、別のプロデューサを指定できるのは、新しいプロデューサが古いプロデューサのプリファレンス・ストアにアクセスできる場合、または古いプロデューサのプリファレンス・ストアが新しいプロデューサのそれに移行済である場合のみです。

  7. プロデューサが正常にリフレッシュされたら、必要に応じて「OK」をクリックします。
  8. 編集を完了した後は、プロデューサ接続をテストして、接続情報が有効であるか確認することを考慮してください。詳細は、ポートレット・プロデューサ接続のテストを参照してください。

ポートレット・プロデューサ接続のテスト

接続テスト機能には、ポートレット・プロデューサ接続の有効性をテストする手段が備わっています。

ポートレット・プロデューサ接続をテストするには:

  1. Oracle JDeveloperを開きます。
  2. 「アプリケーション・ナビゲータ」で「アプリケーション・リソース」ノードを開きます。
  3. テストするプロデューサに移動し、右クリックして「プロデューサ接続のテスト」を選択します。
  4. テストの実行中は、プログレス・バーが表示されます。テストが完了すると、成功または失敗ダイアログが表示されます。「「OK」」をクリックしてダイアログを閉じます。
    失敗ダイアログが表示された場合、プロデューサ登録詳細を編集し、プロデューサ接続を再テストしてください。さらに、特に失敗ダイアログの表示に長時間かかる場合、プロデューサが使用可能であることを確認してください。たとえば、プロデューサが統合WLSを介して提供されている場合は、統合WLSが実行されていることを確認してから接続を再テストしてください。

ポートレット・プロデューサのリフレッシュ

ポートレット・プロデューサをリフレッシュすると、そのプロデューサに属するポートレットもリフレッシュされます。新しく追加されたポートレットや、既存のポートレットに対する更新内容が、このプロデューサに属するポートレットを消費しているアプリケーションに対して使用可能になります。

ヒント:

ポートレットがプロデューサから削除された場合は、必ず、ポートレットが配置されているすべてのアプリケーション・ページからそのポートレットを手動で削除してください。詳細は、ポートレット・プロデューサの削除を参照してください。

ポートレット・プロデューサをリフレッシュするには:

  1. Oracle JDeveloperを開きます。
  2. 「アプリケーション・ナビゲータ」で「アプリケーション・リソース」ノードを開きます。
  3. リフレッシュするプロデューサに移動し、右クリックして「プロデューサ登録のリフレッシュ」を選択します。
  4. 「ポートレット・プロデューサのリフレッシュ」ダイアログ・ボックスで、「はい」をクリックします

ポートレット・プロデューサの削除

特定のプロデューサをアプリケーションで使用しなくなった場合は、そのプロデューサを削除できます。

注意:

プロデューサを削除すると、そのプロデューサに属するポートレットを消費するページには、ポートレットが使用できないことを示すエラー・メッセージが表示されます。同じ名前を使用してそのプロデューサを再登録するしても、ポートレットは依然として使用できません。

ポートレット・プロデューサを削除するには:

  1. Oracle JDeveloperを開きます。
  2. 「アプリケーション・ナビゲータ」で「アプリケーション・リソース」ノードを開きます。
  3. 削除するプロデューサに移動し、右クリックして「削除」を選択します。
  4. 「削除の確認」ダイアログで「はい」をクリックします

ページへのポートレットの追加

ページへのポートレットの配置は、「アプリケーション・リソース」パネルまたは「リソース・パレット」からポートレットをそのページにドラッグ・アンド・ドロップする簡単な操作で実行できます。

始める前に

ページ上にポートレットを配置するには、この簡単な操作を実行する前に実行する必要があるいくつかの準備ステップがあります。次のような内容が含まれます。

  1. ADFアプリケーションの作成

  2. ADFアプリケーション内のアプリケーション・ページの作成。

  3. アプリケーションへのポートレットのプロデューサの登録。

  4. 消費しようとするポートレットの一部が、独自の認証を処理するアプリケーションに属していることがあります。このような場合は、アプリケーションを外部アプリケーションとして登録し、その提供元のポートレット・プロデューサに対して識別する必要があります。

  5. 消費しようとするポートレットの一部が、Secure Socket Layer (SSL)対応のプロデューサに属していることもあります。SSL対応プロデューサにアクセスしようとすると、セキュリティ・アラート・ダイアログが表示され、プロデューサの証明書を表示して信頼できる証明書リストに追加するように要求されることがあります。セキュリティ・アラート・ダイアログが表示されるのは、プロデューサが、広く受け入れられていない認証局によって発行されたセキュリティ証明書を使用する場合のみです。このようなプロデューサからのポートレットを消費するには、まず、プロデューサのセキュリティ証明書をキーストアに追加する必要があります。

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

ページへのポートレットの追加方法

ページにポートレットを追加するには、アプリケーション・ナビゲータの「アプリケーション・リソース」パネルまたは「リソース・パレット」からそれをドラッグ・アンド・ドロップします。

ポートレットをページに追加するには、次の手順を実行します。

  1. Oracle JDeveloperを開きます。
  2. アプリケーション・ナビゲータで、ポートレットの追加先のページ(.jspxファイル)が含まれているアプリケーションを開きます。
  3. ページが含まれているプロジェクトを開きます。
  4. ページを見つけ、それを右クリックし、「開く」を選択します

    ヒント:

    ページをダブルクリックして開くこともできます。

  5. 「アプリケーション・リソース」パネルまたは「リソース・パレット」の「接続」ノードで、次を実行します。
    • プロデューサがWSRPプロデューサである場合、「WSRPプロデューサ」ノードを開きます。

    • プロデューサがPDK-Javaプロデューサである場合、「Oracle PDK-Javaプロデューサ」ノードを開きます。

  6. ページに追加するポートレットが含まれるポートレット・プロデューサのノードを開きます。
    選択したプロデューサの下に、そのプロデューサに含まれているすべてのポートレットがリストされます。
  7. プロデューサ・ノードからページにポートレットを直接ドラッグします。
    ページのフォーム上にポートレットをドラッグする必要があります。そのようにしない場合、ポートレットが含まれるフォームの作成を要求するダイアログが表示されます。
    • ページにリッチ・クライアント・コンポーネントが含まれる場合は、ADF Faces - フォームを選択します。これによって、af:formコンポーネントがページに追加されます。

    • ページにHTMLコンポーネントが含まれる場合(10.1.3.2ページにアップグレードされた場合など)は、JSF HTML - フォームを選択します。これによって、囲むドキュメント・タグに応じて、h:formまたはtr:formコンポーネントが、ページに追加されます。

    「HTML - フォーム」は、ポートレットに対して無効であるため、選択しないでください。

    注意:

    Show Detail Frameコンポーネントの子コンポーネントとして、任意のOracle ADF Facesコンポーネントまたはタスク・フローを含めることができます。ただし、ポートレットは、Show Detail Frameコンポーネントによって提供されているものに類似したヘッダーを含んでおり、Panel Customizableコンポーネントに直接追加できます。Show Detail Frameコンポーネントにポートレットを含めることの利点はこれ以上ありません。

    注意:

    ポートレットをTrinidadコンポーネントとして、つまり、tr:form コンポーネント内に追加し、そのポートレットが表示モード以外のモードを実装する場合、アプリケーションのweb.xml ファイル内に次のものを含める必要があります。
    <context-param>
      <param-name>
        oracle.adf.view.rich.newWindowDetect.OPTIONS
      </param-name>
      <param-value>off</param-value>
    </context-param>

    注意:

    ページにPeopleSoftポートレットを追加する場合、renderPortletInIFrameポートレット・タグ属性をtrueに設定する必要があります。

    詳細は、ポートレット・タグの属性値の設定を参照してください。

ページへのポートレットの追加時の処理

ポートレットをページに追加すると、ポートレット・タグ(adfp:portletまたはadfph:portlet)がページ・ソースに追加されます。これは、ポートレット・コンポーネントを表すタグです。このタグに含まれている属性を「プロパティ・インスペクタ」を使用するかページ・ソースで編集することで、そのポートレットの動作および外観をさらに制御できます。これらの属性の詳細は、ポートレット・タグの属性値の設定を参照してください。

使用するポートレット・タグのタイプは、次のものによって決まります。

  • プロジェクトが、リッチ・クライアント・コンポーネントのみに対して構成されている場合は、adfp:portletタグが使用されます。

  • プロジェクトが、Trinidadコンポーネントのみに対して構成されている場合は、adfph:portletタグが使用されます。

  • プロジェクトがリッチ・クライアントとTrinidadの両方のコンポーネントに対して構成されている場合、ダイアログが表示され、そこでどのポートレット・タグを使用するのかを選択できます。

  • プロジェクトが、リッチ・クライアントとTrinidadのどちらのコンポーネントに対しても構成されていない場合は、adfp:portletタグが使用され、プロジェクトはリッチ・クライアント・コンポーネントに対して自動的に構成されます。

これは、ポートレットのルック・アンド・フィールが、ページ上の他のコンポーネントのものと一致するようにするためです。この場合、次の例に示すように、ポートレットはadfp:portletタグを使用して追加されます。

例14-1 ポートレットを含むリッチ・クライアント・ページ

<?xml version='1.0' encoding='US-ASCII'?>
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.0"
          xmlns:h="http://java.sun.com/jsf/html"
          xmlns:f="http://java.sun.com/jsf/core"
          xmlns:af="http://xmlns.oracle.com/adf/faces/rich"
          xmlns:adfp="http://xmlns.oracle.com/adf/faces/portlet">
  <jsp:directive.page contentType="text/html;charset=US-ASCII"/>
  <f:view>
    <af:document>
      <af:form>
         <adfp:portlet value="#{bindings.Portlet11_1}"
               id="portlet1"
                  renderPortletInIFrame="true"/>
     </af:form>
    </af:document>
  </f:view>
</jsp:root>

アップグレードされた10.1.3.2アプリケーションまたはTrinidadコンポーネントを含むアプリケーションを使用している場合は、リッチ・クライアント・コンポーネントではなく、HTMLコンポーネントがアプリケーションで使用されます。この場合、次の例に示すように、ポートレットをページにドラッグすると、adfph:portletタグが使用されます。

例14-2 ポートレットを含むTrinidadページ

<?xml version='1.0' encoding='US-ASCII'?>
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.0"
          xmlns:h="http://java.sun.com/jsf/html"
          xmlns:f="http://java.sun.com/jsf/core"
          xmlns:af="http://xmlns.oracle.com/adf/faces/rich"
          xmlns:tr="http://myfaces.apache.org/trinidad"
          xmlns:adfph="http://xmlns.oracle.com/adf/faces/portlet/html">
  <jsp:directive.page contentType="text/html;charset=US-ASCII"/>
  <f:view>
    <tr:document title="Title 1">
      <tr:form><adfph:portlet value="#{bindings.Portlet12_1}
              "id="portlet1"/>
      </tr:form>
    </tr:document>
  </f:view>
</jsp:root>

アプリケーション・ページに1つ以上のコンポーザ・コンポーネントが含まれている場合は、これがポートレットの配置場所に影響を与えることがあります。たとえば、「構造」パネルで、cust:panelCustomizableタグを含むページに配置されているポートレットは、次の例のように配置されます。

例14-3 ポートレット・タグの階層配置

af:document
  af:form
   cust:panelCustomizable
     adfp:portlet

注意:

ADF Facesリッチ・クライアント・コンポーネントとHTMLまたはTrinidadコンポーネントを同じページ上に混在させないことをお薦めします。そのようにすると、実行時に予期しない結果になることがあります。したがって、コンポーザHTMLコンポーネント内にリッチ・クライアント・ポートレットを配置したり、コンポーザ・リッチ・クライアント・コンポーネント内にHTMLポートレットを配置しないでください。

ポートレット間通信に関する必知事項

アプリケーションのインタラクティブ性を高める1つの方法として、関連するコンポーネントをリンクして、これらのコンテンツをコンテキストに即して同期させる方法があります。たとえば、1つのページに2つの株式ポートレットがあり、一方は株価のデータを提供し、もう一方は株式のヘッドライン・ニュース・アイテムを提供するとします。どちらのポートレットも株式ティッカ・シンボルに基づいているため、株価ポートレット内のティッカ・シンボルが変更されると、株式ヘッドライン・ポートレットはその変更を取り込んで、同じティッカ・シンボルに関連するヘッドラインを使用して自動的にリフレッシュする、という動作は筋が通っています。

JSR 286標準では、パブリック・レンダラ・パラメータが導入されており、それを使用してページ上のポートレットをリンクできます。「JSR 286ポートレットでのパブリック・レンダラ・パラメータの使用方法」を参照してください。

JSR 286標準では、ポートレット・イベントもサポートされています。ポートレット・イベントを使用すると、ページ上の任意の場所で発生するアクションに基づいてポートレットのコンテンツを制御できます。ポートレット・イベントは、ポートレットがそれ自体のイベントをトリガーすることでイベントに応答し、それがそのページ上の他のポートレットに影響を与えるようにカスケードできます。ポートレット・イベントは、ADFコンテキスト・イベントによって消費することもでき、コンテキスト・イベントはポートレットによって消費できます。これを使用して、ポートレットとタスク・フローをコンテキストに即してリンクできます。「JSR 286ポートレットでのポートレット・イベントの使用方法」を参照してください。

ページにポートレットを追加すると、ポートレット・バインディングがそのページ定義ファイルに追加されます。このポートレット・バインディングには、ポートレットが自動的にパラメータ変更やイベントをリスニングする必要があるかどうかを指定する属性が含まれます。

例14-4 ポートレット・バインディング

<portlet id="LotteryPortlet2_1"
         portletInstance="oracle/adf/portlet/SamplePortlets/ap/Ei7default_03ba18be_012d_1000_8002_0ae8827e9493"
         class="oracle.adf.model.portlet.binding.PortletBinding"
         retainPortletHeaders="false"
         listenForAutoDeliveredPortletEvents="true"
         listenForAutoDeliveredParameterChanges="true"
         xmlns="http://xmlns.oracle.com/portlet/bindings"/>

これらの属性をtrue (デフォルト)に設定すると、そのポートレットでサポートされているものに一致する(つまり、同じQNameを持つ)、変更されたパラメータまたはページ上の任意の場所で発生したイベントによって、そのポートレットがそれに従って自動的に更新されることを意味します。さらに、ポートレットは、そのパラメータおよびイベントの別名を定義して、異なるQNameを持つパラメータおよびイベントと一致させることができます。

これらの属性をfalseに設定すると、このパラメータおよびイベントの自動リスニングを無効化できます。たとえば、ページに、同じポートレットの複数のインスタンスが含まれていて、それらは、異なるソースから値を取得する必要がある場合があります。パラメータおよびイベントの自動リスニングを無効化する場合、またはポートレットで、リンクに使用するものと一致しない名前を持つパラメータまたはイベントを定義する場合、ポートレット・ワイヤリングを手動で構成する必要があります。「JSR 286ポートレットでのパラメータとイベントの手動によるワイヤリング」を参照してください。

インライン・フレームに関する必知事項

ポートレットをページ上に直接レンダリングするほうが、インライン・フレーム(iframe)にそれを配置するよりも優れたユーザー・エクスペリエンスを提供します。ただし、ポートレット・マークアップをインライン・フレーム内に組み込む必要が生じる場合もあります。renderPortletInIFrame属性を使用して、ポートレットをインライン・フレーム内にレンダリングする必要があるかどうかを決定できます。

renderPortletInIFrame属性のデフォルト設定はautoです。これにより、インライン・フレームを必要とせずにOracle ADFページ内に適切にレンダリングされるように、ポートレット・コンシューマによって、可能な場合は必ずポートレット・マークアップのリライトが試みられるようになります。

ただし、次のような状況では、ポートレットはインライン・フレーム内にレンダリングされます。

  • パーサーが、マークアップを解析できないために例外をスローします。

  • ポートレット・コードに、マルチパート・フォーム・ポストが含まれています。

  • ポートレット・コードにファイル・アップロード要素が含まれています。

  • ポートレット開発者が、portlet.xml ファイルのcom.oracle.portlet.requireIFrameコンテナ・ランタイム・オプションをtrueに設定することで、インライン・フレーム内にポートレットをレンダリングすることを明示的に要求しました。

注意:

Oracle JSF Portlet Bridgeを使用して作成されたポートレットは、JavaScriptの問題により直接Oracle ADFページにレンダリングするには複雑すぎるため、requireIFrameコンテナ実行時オプションはtrueに設定されます。

場合によっては、ポートレット・コンシューマが、Oracle ADFページ内にポートレットを含めるように、ポートレット・マークアップおよびJavaScriptをリライトできないことがあります。このような場合は、ボタンが機能しなかったり、コンソールにJavaScriptエラーが表示されるなど、ポートレットが期待どおりに動作しないことがあります。その場合は、renderPortletInIFrame属性をtrueに設定し、ポートレットが常にインライン・フレーム内にレンダリングされるようにします。

renderPortletInIFrameをtrueに設定する必要がある場合の例は、次のとおりです。

  • ポートレット・コードで、要素名がJavaScriptで動的に作成されます。

  • ポートレット・コードで、複数のフォームが使用されており、それらがJavaScriptで索引によって参照されます。

  • JavaScriptライブラリ・コードは、ポートレットないで要素を参照します。

ポートレットをインライン・フレーム内にレンダリングした場合、window.locationを操作すると予期しない結果が発生することがあります。ポートレットでwindow.locationを使用する場合は、ポートレットがインライン・フレーム内にレンダリングされる場合に対応できるだけの堅牢性がJavaScriptに備わっていることを確認してください。

アクセシビリティなどの理由により、ポートレットをインライン・フレーム内にレンダリングしないようにするには、renderPortletInIFrame属性をfalseに設定します。インライン・フレーム内にレンダリングされないポートレットからのHTMLマークアップは、Oracle ADFページ上の他のコンポーネントの障害となることがあります。

インライン・フレームの使用によるアクセシビリティへの影響の詳細は、WebCenter Portalのアクセシビリティ機能を参照してください。

ポートレットのサイズ設定に関する必知事項

ADF Facesコンポーネントは、それらの子を拡大することもしないこともできます。通常、子を拡大できるようにするには、その親に含まれる子が1つのみであることが必要です。コンポーネントでは、拡大することまたは拡大しないこともサポートされています。拡大がサポートされているコンポーネントを、子を拡大する親の内部に配置すると、その子のディメンションは親のディメンションによって決定されます。その子は、親によって拡大されると言い、親を満たすようにサイズ設定されます。

コンポーネントがその親によって拡大されない場合は、それはフロー・レイアウトになっていると言います。その場合、その親からそのサイズを取得しません。それは、それ自体のサイズを、その子から、またはページ・デザイナによって指定されたディメンション・スタイル設定から決定する必要があります。

portlet Facesコンポーネントでは、その親による拡大がサポートされています。それは、その子を明示的に拡大することはありません。

portletコンポーネントのサイズを決定する方法は、そのポートレットの親コンポーネントおよびportletコンポーネント自体で設定されている属性に応じて3つあります。

  • ポートレットがその親によって拡大される場合、そのサイズは親によってのみ決定されます。ポートレットは、ストレッチ・レイアウトになっています。

    • コンテンツの大きさは関係なく、それは、そのポートレットのサイズには関係ありません。コンテンツがそのポートレットよりも大きい場合、ユーザーがすべてのコンテンツを表示できるようにスクロールバーが表示されます。

    • ポートレットの高さが指定されている場合、それは無視され、拡大が優先されます。

    • これは、望ましいレイアウト方法であり、常に信頼できます。

    • ADF Facesタグ・ドキュメントでは、各コンポーネントがその子を拡大するかどうかが指定されています。

  • ポートレットが、その親によって拡大されず、明示的なサイズが設定されている場合、それらが使用されます。

    • これも、常に信頼でき、指定したとおりのサイズになります。

    • コンテンツがその指定されているサイズトよりも大きい場合、ユーザーがすべてのコンテンツを表示できるようにスクロールバーが表示されます。

    • サイズは固定され、そのコンテンツのサイズは考慮されません。

  • ポートレットが、その親によって拡大されず、明示的なサイズが設定されていない場合、ポートレットによってコンテンツに合せた自動サイズ設定が試みられます。

自動サイズ設定

ポートレットがフロー・レイアウトになっており、明示的なサイズが設定されていない場合、スクロールバーを使用せずにそのポートレット・コンテンツをすべて表示するのに適合する大きさになるようにポートレットのサイズの設定が試みられます。

ポートレットは、スクロールバーを使用せずにコンテンツを表示するために必要な領域の大きさをブラウザに問い合せ、それを使用してポートレットの高さを設定することで、これを実現します。具体的に言えば、インライン・フレーム・ウィンドウのscrollHeightプロパティが調査されます。

これが、どの程度機能するのかは、ポートレットの中身に応じて異なります。レイアウトによっては、本来のサイズが自動サイズ設定に適しているものもあります。しかし、コンテンツを表示しないようにオーバーフローさせるものまたはスクロールバーを使用するものなど、ポートレット内のレイアウトおよびコンポーネントによって、それらのコンテンツのサイズが実質的に非表示になるものもあります。具体的に言えば、そのようなHTMLマークアップは、hiddenautoまたはscrollのオーバーフロー設定を持つHTML要素です。これは、その要素に適用されているインライン・スタイルまたはCSSスタイルの結果である場合もあります。

scrollHeightは、コンテンツを適切に表示するために最小限必要な高さであるため、問題が生じます。たとえば、overflow="auto"が設定されたdiv要素がある場合、そのdivがコンテンツよりも小さいと、スクロールバーが使用されます。したがって、divを表示するために必要な最小サイズを問い合せると、明示的な高さや最小の高さが設定されていない場合、答えは0になります。したがって、このdivのコンテンツは、それが明確な高さを持っている場合でも、そのコンテンツの全体的なスクロールの高さに関与しません。

ADFに関しては、これは、多くの場合、dimensionFrom="parent"が設定されているpanelStretchLayoutなど親からそれらのディメンションを取得すると期待されているコンポーネント、またはlayout="scroll".が設定されているpanelGroupLayoutなどそれらのコンテンツをスクロールするコンポーネントに関連しています。これらは、表示されないかスクロール可能なオーバーフローを持つ傾向にあるコンポーネントです。

ADF Facesレイアウト・モデルについて考えると、別の方法で問題を理解できます。ADF Facesのレイアウト・ガイドラインでは、親によって拡大されるコンポーネントとその中のフロー・レイアウト(通常、コンポーネントが固定の高さを持つかそれらのディメンションをそれらの子から取得するaf:panelGroupLayoutによって開始される)のアイランドからなる連鎖から始めることが示されています。ポートレットのルートに、親からディメンションを取得することを期待するコンポーネントの切れ目のない連鎖があるが、そのポートレット自体がフロー・レイアウトになっているためコンテンツからそのディメンションを決定することを期待する場合、袋小路になります。そのポートレットは、サイズについてその親からディメンションを取得することを期待しています。これに対する解決策は、ポートレットを拡大するか(つまり、それをフロー・レイアウト・アイランドから取り出す)、そのポートレットに高さを設定するか、そのポートレットのコンテンツ全体およびフロー・レイアウト・コンテンツのアイランドを作成することであることは明らかです。

コンテンツを自動サイズ設定できない場合、その高さは、デフォルトでFirefoxでは200pxに、Internet Explorerでは0pxになります。Internet Explorerが0であるのは、scrollHeightで、min-height CSSスタイル設定が正しく認識されないという不適切な動作が原因です。Firefoxの200pxの高さは、ポートレット化タスク・フローをレンダリングするリージョンに設定されているminheightによるものです。これを回避するために、コンシューマでheightまたはmin-height CSSを設定できます。

自動サイズ設定のベスト・プラクティス

コンテンツを自動サイズ設定するようにフロー・レイアウトでポートレットを使用する場合に最善の結果を得るには:

  • ポートレット・コンテンツを、子からディメンションを取得するコンポーネントからなる連鎖にします。

  • dimensionsFrom="children" 属性がサポートされているコンポーネント(たとえば、af:panelStretchLayout)に対しては、それを使用し、それらがそれらの子からディメンションを取得するようにします。

  • panelGroupLayoutに対してlayout="scroll" ではなくlayout="vertical"を使用し、その子のサイズが、全体的な自動サイズ設定ディメンションに寄与するようにします。

  • コンポーネントのフロー・レイアウト連鎖からストレッチ・レイアウトに切り替える場合、子を拡大する最初のコンポーネントに明示的な高さを設定します。通常、これはdimensionsFrom="parent"を指定したpanelStretchLayoutを使用した場所になります。

最小化、リストアおよび移動に関する必知事項

開発環境のニーズに合せるために、Show Detail Frameおよびportletコンポーネントのアクション「最小化」、「リストア」および「移動」の動作は、設計時と実行時では異なります。設計時では、これらのアクションは特定の1つのWLSセッションでは維持されますが、セッション間では維持されません(セッションとは、WLSの開始から停止までの時間を意味します)。実行時では、これらのアクションは特定の1つのWLSセッションおよびセッション間の両方で維持されます。

この違いは、設計時におけるアプリケーション・ページの自動リセットを可能にするために取り入れられたものです。

実行時にセッション間で維持する必要がない場合は、アプリケーションのweb.xmlファイルに単純な変更を行うことでそれをオフにできます。アプリケーションのweb.xmlファイル内で、次のパラメータ設定を見つけます。

例14-5 アプリケーションのweb.xmlファイル内の永続性設定

<context-param>
  <param-name>oracle.adf.view.faces.CHANGE_PERSISTENCE</param-name>
  <param-value>oracle.adfinternal.view.faces.change.HybridChangeManager</param-value>
</context-param>

これを次の例のコードで置き換えます。

例14-6 アプリケーションのweb.xmlファイルでの実行時永続性の無効化

<context-param>
  <param-name>oracle.adf.view.faces.CHANGE_PERSISTENCE</param-name>
  <param-value>oracle.adf.view.faces.change.SessionChangeManager</param-value>
</context-param>

アプリケーションにセキュリティを実装すると、「最小化」、「リストア」、「移動」アクションはカスタマイズ権限を持つユーザーにのみ表示されます。これらのアクションは、パーソナライズ権限を持つユーザーには表示されません。カスタマイズ権限を持つユーザーは、設計時に次のステップを実行することにより、これらのアクションの効果をテストできます。

  1. JDeveloperの統合WLS使用してアプリケーション・ページを実行します。

  2. 管理者としてログインします。

  3. 関連するアクション・コマンドを使用して、ポートレットの最小化、ポートレットの移動など自由に変更を行います。

  4. いったんログアウトしてからユーザーとしてログインし、アクションの効果を確認します。

実行時の処理内容

ページ上にポートレットを配置したら、そのページを右クリックし、「実行」を選択します。これにより、ページが表示され、デフォルト・ブラウザでJDeveloperの統合WLSを使用してポートレットが実行されます。ポートレットによっては、追加の実行時構成が必要になることもあります。ポートレット全般の詳細は、ポートレットの概要を参照してください。

編集モード(ポートレット・ヘッダーで「パーソナライズ」アイコン(鉛筆アイコン)としてレンダリングされる)を備えたポートレットを実行する場合、認証されたユーザー(つまり、ログインしているユーザー)にのみ、「パーソナライズ」アイコンが表示されます。匿名ユーザーまたはパブリック・ユーザーには、ポートレットをパーソナライズするためのオプションは表示されません。ポートレットを消費するアプリケーションで、ユーザーがポートレットのビューをパーソナライズできるようにするには、あらかじめなんらかの形態のセキュリティを実装しておく必要があります。ポートレットおよびページを作成する開発者は、アプリケーションに完全なセキュリティ・モデルを作成せずに、ポートレットの「編集」モードをテストする必要があることがあります。セキュリティを追加してポートレットの「編集」モードのテストを有効化する方法の詳細。

注意:

実行時にページにポートレットを追加できるようにするには、設計時に少なくとも1つのポートレットをそのページに追加する必要があります。設計時にポートレットを追加すると、DataBindings.cpxファイルの<definitionFactories>要素に次のものが追加されます。

<factory nameSpace="http://xmlns.oracle.com/portlet/bindings"
className="oracle.adf.model.portlet.binding.PortletBindingDefFactoryImpl"/>
<dtfactory className="oracle.adfdtinternal.view.faces.portlet.PortletDefinitionDTFactory"/>

このエントリは、実行時のポートレットの消費を可能にするために必要です。

ポートレットでパラメータまたはイベントがサポートされており、パラメータおよびイベントの自動リスニングが有効化されている場合、サポートされているパラメータおよびイベント(または別名が付けられているパラメータおよびイベント)に対するすべての変更によって、ポートレットが自動的に更新されます。

外部アプリケーションに関連付けられているプロデューサからポートレットを実行する場合、ログイン情報を更新するためのリンクが表示されます。リンクをクリックすると、外部アプリケーション資格証明を入力するための資格証明プロビジョニング・ページが表示されます。有効な資格証明を指定すると、それに従ってポートレットによってコンテンツが表示されます。外部アプリケーションの詳細。

ポートレット・タグの属性値の設定

ページのソース・コード・ビューでは、各ポートレットは、adfp:portletタグ(またはadfph:portletタグ)で表示され、これには必須属性およびオプション属性のセットが含まれています。必須属性であるvalueおよびportletTypeはフレームワークによって自動的に設定され、変更できません。オプション属性値は、ポートレットにその属性のサポートが組み込まれている場合に適用されます。たとえば、isAboutModeAvailabletrueに設定できますが、ポートレットに情報モードが定義されていない場合、この属性設定はポートレットに影響を与えません。

ポートレットでは、スタイル関連属性のセットもサポートされています。

ポートレット・タグでは多数の属性を使用します。それらはJDeveloperのプロパティ・インスペクタを使用するか、タグの属性としてソース・コードで、設計時に設定できます。

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

プロパティ・インスペクタを使用してポートレット・タグに属性値を設定する方法

プロパティ・インスペクタは、ソース・コードを自分で編集することなく、ポートレット・タグの属性値を設定する迅速で簡単な方法を提供します。

プロパティ・インスペクタを使用してポートレット・タグの属性値を設定するには:

  1. アプリケーション・ナビゲータで、ポートレットが表示されるページが含まれているアプリケーションを開きます。
  2. ページが含まれているプロジェクトを開きます。
  3. ページを見つけ、それを右クリックし、「開く」を選択します

    ヒント:

    ページをダブルクリックして開くこともできます。
  4. デザイン・ビューで、設定する属性を持つポートレットを選択します。
  5. プロパティ・インスペクタで、該当するタブをクリックし、目的の属性を設定します。
    必要な回数だけ、このステップを繰り返します。
  6. 変更を保存します。
  7. 行った変更をテストするには、ページを右クリックし、「実行」を選択します

ポートレット・タグの属性値をソース・コードで設定する方法

ポートレット・タグの属性値をソース・コードで直接設定するには:

  1. アプリケーション・ナビゲータで、ポートレットが表示されるページが含まれているアプリケーションを開きます。
  2. ページが含まれているプロジェクトを開きます。
  3. ページを見つけ、それを右クリックし、「開く」を選択します

    ヒント:

    ページをダブルクリックして開くこともできます。
  4. デザイン・ビューで、設定する属性を持つポートレットを選択します。
  5. 「ソース」タブをクリックします。
    選択したポートレットが、ソース・コード内で強調表示されます。
  6. ソース・コードに変更を直接行います。

    次の例は編集済ポートレット・タグを示しています。

    <adfp:portlet value="#{bindings.portlet1}"
                  portletTypes="/oracle/adf/portlet/WsrpPortletProducer1/applicationPortlets/
                               E0default_b452f828_010a_1000_8002_82235f57eaa8"
                                   allModesSharedScreen="true"
                                />
  7. 変更を保存します。
  8. 行った変更をテストするには、ページを右クリックし、「実行」を選択します

ポートレット・タグの共通属性

次の表は、ポートレット・タグの共通属性について説明しています。

表14-1 ポートレット・タグの共通属性

属性 説明

id

テキスト文字列次に例を示します。

id="newsBrief"

ポートレットの一意識別子。この属性には、ページにそのポートレットを追加するときにデフォルトで一意の値が移入されます。

この値は、HTMLで許可される構文のサブセットに準拠している必要があります。

  • 長さがゼロの文字列にすることはできません。

  • 最初の文字は、ASCII文字(A-Z a-z)またはアンダースコア(_)にする必要があります。

  • 後続の文字は、ASCII文字または数字(a-Z a-z 0-9)、アンダースコア(_)またはダッシュ(-)にする必要があります。

title

テキスト文字列次に例を示します。

title="Announcements"

ポートレット・タイトル。これはポートレット・ヘッダーに表示されます。

ここで指定した値は、他のどの場所(たとえば、ポートレット・マークアップ内)に指定されているタイトルよりも優先されます。

ここで値を指定しない場合、ポートレットによりポートレットのマークアップからタイトルが抽出されます(レスポンス)。

ここでもポートレット・マークアップでも値を指定しない場合、ポートレットによりそのポートレット定義からそのタイトルが抽出されます。

注意: 設計時に値をtitle属性に指定すると、編集モードまたはデフォルト編集モードで実行時にタイトルに行われた変更は無視されます。

width

使用可能な領域をピクセルまたはパーセンテージで表した数値。

  • ピクセルの場合は、npxを入力します。例:

    width = 300px
  • パーセンテージの場合は、n%を入力します。次に例を示します。

    width = 50%

ポートレットを表示できる領域の幅です。

displayScrollBarautoまたはtrueに設定した場合、ポートレットの実際の幅がここに入力したwidth値を超えると、スクロールバーが表示されます。displayScrollBarfalseに設定した場合、ポートレットの実際の幅がwidth属性に指定されている値を超えると、width属性の値が適用され、ポートレットのコンテンツは切り捨てられます。

height

ピクセルで表された数値。次に例を示します。

height = 300px

ポートレットを表示できる領域の高さです。

displayScrollBarautoまたはtrueに設定した場合、ポートレットの実際の高さがここに入力したheight値を超えると、スクロールバーが表示されます。displayScrollBarfalseに設定した場合、ポートレットの実際の高さがheight属性に指定されている値を超えると、height属性の値が適用され、ポートレットのコンテンツは切り捨てられます。

icon

イメージのURI。次に例を示します。

icon="coffee.png"

ポートレット・ヘッダーのポートレット・タイトルの左側に表示されるアイコンとして使用されるイメージの位置を指定するURI。このアイコンは、ポートレットの目的を示すため、ブランド力強化のため、コンテンツ・インジケータとして、またはその他の理由のために使用できます。

プロパティ・インスペクタで、フィールドの横にある「プロパティ・メニュー」アイコンをクリックし、「編集」を選択して、必要なイメージを選択します。

その値は、絶対URIであるか、現在のページまたはアプリケーション・コンテキスト・ルートを基準として解決可能なURIにする必要があります。前の例で指定したURIは、アプリケーション・コンテキスト・ルートで格納され、したがって、フルパスは必要ありません。

partialTriggers

1つ以上のコンポーネントID。次に例を示します。

partialTriggers="_id1 _id2 componentID5"

空白でコンポーネントIDを区切ります。

部分更新をトリガーするコンポーネントのID。ポートレットは、指定されたトリガー・コンポーネントをリスニングします。トリガー・コンポーネントが更新のためのトリガー・イベントを受け取ると、ポートレットも自身の更新をリクエストします。

ポートレット・タグの外観属性

次の表は、ポートレット・タグの外観属性について説明しています。

表14-2 ポートレット・タグの外観属性

属性 説明

expansionMode

minimized

normal

デフォルト: normal

ポートレットのデフォルトの状態。

  • minimized - ポートレットのデフォルト表示モードは閉じた状態(最小化)です。

  • normal - ポートレットのデフォルト表示モードは、閉じた状態でも、ページの幅に拡大でもありません。

allModesSharedScreen

auto

false

true

デフォルト: auto

ポートレット・モードが変更されると、ポートレットが配置されているページではなく、新しいページに新しいモードがレンダリングされるかどうか。

  • auto - リモート・ポートレットが、そのportlet.xmlファイルのcom.oracle.portlet.requireIFrameコンテナ・ランタイム・オプションを介してインライン・フレーム(IFRAME)を必要とするように構成されている場合、すべてのポートレット・モードはインラインで表示されます。これにより、Oracle Bridgeポートレットは必ずインラインで表示されます。

  • false - View (JSR 286)またはShow (PDK-Java)を除いたすべてのポートレット・モードが、それぞれのページにレンダリングされます。

  • true - すべてのポートレット・モードがインラインで表示されます。モードは同じページ上で切り替わります。つまり、この属性を指定すると、1つのページのコンテキスト内ですべてのポートレット・モードを表示できます。

renderPortletInIFrame

auto

false

true

デフォルト: auto

ポートレットがIFRAME内にレンダリングされるかどうか。

  • auto - 可能な場合は、ADFページに適切にレンダリングされるように、ポートレット・コンシューマによってポートレット・マークアップのリライトが必ず試みられます。それ以外の場合は、ポートレットがIFRAME内にレンダリングされます。

  • false - ポートレットはIFRAME内にレンダリングされません。

  • true - ポートレットは常にIFRAME内にレンダリングされます。

詳細は、インライン・フレームに関する必知事項を参照してください。

displayScrollBar

auto

false

true

デフォルト: auto

スクロール・バーが表示されるかどうか。

  • auto - ポートレット・コンテンツが、指定されたwidthおよびheight内に収まらない場合にスクロールバーがレンダリングされます。

  • false - スクロールバーはレンダリングされません。ポートレット・コンテンツが、指定されたheightおよびwidthに収まらない場合は、ポートレットは実際のサイズでレンダリングされます。

  • true - 常にスクロールバーがレンダリングされます。

displayHeader

false

true

デフォルト: true

ポートレット・ヘッダーが表示されるかどうか。

  • false - ポートレット・ヘッダーは表示されません。ヘッダーに通常表示されるアイコンおよびリンクは非表示になります。isSeededInteractionAvailabletrueに設定すると、マウスをポートレットに移動することでユーザーはポートレット・メニューおよびアイコンを使用できます。フェードインおよびフェードアウトのツールバーが表示され、ここからユーザーは「処理」メニュー・オプションを選択できます。

  • true - ポートレット・ヘッダーが表示されます。したがって、ヘッダーをベースにしたアイコンおよびリンクが表示されます。

displayShadow

false

true

デフォルト: true

ポートレットの周囲に影の装飾が表示されるかどうか。

  • false - 影の装飾を表示しません。

  • true - 影の装飾を表示します。

rendered

false

true

デフォルト: true

ポートレットがレンダリングされるかどうか。

  • false - ポートレットをレンダリングしません。出力はレンダリングされません。

  • true - ポートレットをレンダリングします。これが推奨設定です。この属性をfalseに設定すると、ページを実行したときに問題が発生します。

background

dark

light

medium

デフォルト: medium

ポートレットによって使用されるスキンに適用されるスタイル・セレクタ。

  • dark - スキンにダーク・スタイル・セレクタを適用します。

  • light - スキンにライト・スタイル・セレクタを適用します。

  • medium - スキンにミディアム・スタイル・セレクタを適用します。

これは、ページ上の各ポートレットに異なるルック・アンド・フィールを適用する手段を提供します。

shortDesc

テキスト文字列次に例を示します。

shortDesc="Portlet for entering display text in place."

ポートレットの短い説明。

displayActions

always

onHover

デフォルト: always

ポートレットのシード済相互作用が表示されるかどうか。

  • always - シード済相互作用を常に表示します。

  • onHover - ユーザーがポートレット上にマウスを移動するとシール済相互作用が表示されます。

showMoveAction

menu

none

デフォルト: menu

ポートレットの「アクション」メニューに「移動」コマンドを表示するかどうか。

  • menu - ポートレットの「アクション」メニューに「移動」コマンドを表示します。

  • none - 「移動」コマンドを表示しません。

設計時と実行時では「移動」コマンドの動作のしかたが異なります。詳細は、最小化、リストアおよび移動に関する必知事項を参照してください。

showRemoveAction

menu

none

デフォルト: menu

ポートレット・クロムに「削除」アイコンを表示するかどうか。

  • menu - ポートレットの「アクション」メニューに「削除」コマンドを表示します。

  • none - 「削除」アイコンを表示しません。

設計時と実行時では「削除」アイコンの動作のしかたが異なります。詳細は、最小化、リストアおよび移動に関する必知事項を参照してください。

注意: この属性は、adfp:portletタグでのみ使用可能で、adfph:portletタグでは使用できません。

showResizer

always

never

デフォルト: always

ポートレットの右下隅にあるサイズ変更ハンドルを表示するかどうか。

  • always - サイズ変更ハンドルを常に表示します。

  • never - サイズ変更ハンドルを表示しません。

注意: この属性は、adfp:portletタグでのみ使用可能で、adfph:portletタグでは使用できません。

showMinimizeAction

chrome

none

デフォルト: chrome

ポートレット・クロムに「最小化」アイコンを表示するかどうか。

  • chrome - ポートレット・クロムに「最小化」アイコンを表示します。

  • none - 「最小化」アイコンを表示しません。

設計時と実行時では「最小化」アイコンの動作のしかたが異なります。詳細は、最小化、リストアおよび移動に関する必知事項を参照してください。

ポートレット・タグの動作属性

次の表は、ポートレット・タグの動作属性について説明しています。

表14-3 ポートレット・タグの動作属性

属性 説明

partialTriggers

1つ以上のコンポーネントID。次に例を示します。

partialTriggers="_id1 _id2 componentID5"

空白でコンポーネントIDを区切ります。

部分更新をトリガーするコンポーネントのID。ポートレットは、指定されたトリガー・コンポーネントをリスニングします。トリガー・コンポーネントが更新のためのトリガー・イベントを受け取ると、ポートレットも自身の更新をリクエストします。

submitUrlParamters

false

true

デフォルト: false

ページから、ポートレットが配置されているページを指すポートレット・リンク内のパラメータを使用できるようにするかどうか。

  • false - ページからパラメータを使用できるようにしません。これらのパラメータは、リクエストを開始したポートレット内部でのみ使用可能です。

  • true - コンテナ・ページでパラメータは使用可能です。

ポートレット・タグのポートレット・モード属性

ポートレット・モード属性は、編集モードへの切替えなど、モード切替えUIアクションのレンダリングを制御します。特定のモードでポートレットをレンダリングできるかどうかは、ポートレットでサポートされているモードおよびユーザー認可によって決まります。たとえば、isCustomizeModeAvailable属性がtrueに設定されていても、そのアクションがポートレットでサポートされていなければ、この属性設定はポートレットに影響を与えません。

次の表に示すポートレット・モード属性は、trueまたはfalseに評価される値バインディング式です。

  • trueは、その名前のモードでポートレットをレンダリングできることを意味します。

  • falseは、その名前のモードでポートレットをレンダリングできないことを意味します。

表14-4 ポートレット・タグのポートレット・モード属性

属性 説明

isAboutModeAvailable

true

false

デフォルト: true

ポートレットの「アクション」メニューに「バージョン情報」コマンドをレンダリングするかどうか。

ユーザーが「バージョン情報」を選択すると、ポートレットの情報モードが起動されます。

isConfigModeAvailable

true

false

デフォルト: true

JSR 286ポートレットの「アクション」メニューに、「構成」コマンドをレンダリングするかどうか。

ユーザーが「構成」を選択すると、ポートレットの構成設定が開きます。

isCustomizeModeAvailable

true

false

デフォルト: true

ポートレット・ヘッダーに「カスタマイズ」アイコンをレンダリングするかどうか。

サイト管理者は「カスタマイズ」を選択して、ポートレットのデフォルト個人情報データを編集します。

isDetailModeAvailable

true

false

デフォルト: true

PDK-Javaポートレットの「アクション」メニューに、「詳細」コマンドをレンダリングするかどうか。

ユーザーが「詳細」を選択すると、全画面モードでポートレットが開きます。

isHelpModeAvailable

true

false

デフォルト: true

ポートレットの「アクション」メニューに「ヘルプ」コマンドをレンダリングするかどうか。

ユーザーが「ヘルプ」を選択すると、ポートレットの「ヘルプ」ページが開きます。

isPrintModeAvailable

true

false

デフォルト: true

JSR 286ポートレットの「アクション」メニューに、「印刷」コマンドをレンダリングするかどうか。

ユーザーが「印刷」を選択すると、ポートレットのプリンタ・フレンドリ・バージョンが表示されます。

isNormalModeAvailable

true

false

デフォルト: true

ポートレットの「アクション」メニューに「リフレッシュ」コマンドをレンダリングするかどうか。

ユーザーが「リフレッシュ」を選択すると、ページ上の他のコンテンツに関係なくポートレットが再描画されます(これは、部分ページ・リフレッシュとも呼ばれます)。

isPersonalizeModeAvailable

true

false

デフォルト: true

ポートレット・ヘッダーに「パーソナライズ」アイコンをレンダリングするかどうか。

ユーザーは「パーソナライズ」を選択して、ポートレットの個人ビューを変更します。このモードは、規格に基づいたJavaポートレット(JSR 286)ウィザードで「編集」を選択する操作に相当します。

「パーソナライズ」アイコンは、認証を受けたユーザー(つまりログインしているユーザー)にのみ表示されます。パブリック・ユーザーまたは認証を持たないユーザーには表示されません。ユーザーがポートレットの表示をパーソナライズできるようにするには、なんらかのアプリケーション・セキュリティを実装する必要があります。

ポートレットを作成する開発者は、アプリケーション用の完全なセキュリティ・モデルを作成せずに「パーソナライズ」モードをテストする必要があります。

注意:

典型的なパーソナライズ設定は「ポートレット・タイトル」です。設計時にポートレット・タイトルを設定するには、title属性に値を指定します。ただし、設計時にtitle属性に値を入力することにより、実行時のポートレット・タイトルのパーソナライズおよびカスタマイズの妨げになることを考慮してください。

isPreviewModeAvailable

true

false

デフォルト: false

ポートレット・コンテンツのプレビューを有効化するかどうか。

このモードには、Frameworkアプリケーションで特定のアプリケーションはありませんが、Oracle Portal'のポートレット・リポジトリでは使用され、虫眼鏡アイコンとしてレンダリングされて、ユーザーはポートレットをプレビューするためにこれをクリックします。

ポートレット・タグのスタイル属性

次の表は、ポートレット・タグのスタイル属性について説明しています。

表14-5 ポートレット・タグのスタイル属性

属性 説明

contentStyle

1つ以上のCSSスタイル。

これらは少なくともCSS 2.0に準拠し、次の形式をとる必要があります。

contentStyle="color:rgb(255,0,255); font-family:Arial Helvetica Geneva sans-serif;font-size:large;"

ポートレット・コンテンツに適用されるCSSスタイルです。

ここに入力する値は、inlineStyle属性で指定されているスタイル、CSSに含まれているものまたは特定のポートレット・インスタンス上のスキンより優先されます。

inlineStyle

1つ以上のCSSスタイル。

これらは少なくともCSS 2.0に準拠し、次の形式をとる必要があります。

inlineStyle="color:rgb(255,0,255); font-family:Arial Helvetica Geneva sans-serif;font-size:large;"

ポートレット全体に適用するCSSスタイル。

ここに入力した値は、特定のポートレット・インスタンスのCSSまたはスキンで指定されているスタイルより優先されます。

ポートレット・タグのバインディング属性

次の表は、ポートレット・タグのバインディング属性について説明しています。

表14-6 ポートレット・タグのバインディング属性

属性 説明

binding

マネージドBeanの名前。次に例を示します。

binding="#{frameActionsBean.Binding}"

プロパティ・インスペクタで、フィールドの横にある「プロパティ・メニュー」アイコンをクリックし、「編集」を選択して、マネージドBeanを選択し、関連するマネージドBeanプロパティを指定します。

コンポーネント・インスタンスを格納するためのバインディング参照。バインディング参照によって、ポートレットのインスタンスがマネージドBeanプロパティにバインドされます。マネージドBeanはアプリケーションで使用されるJavaBeansで、JSFのfaces-config.xmlファイルに登録されます。

ポートレット・タグのカスタマイズ属性

次の表は、ポートレット・タグのカスタマイズ属性について説明しています。

表14-7 ポートレット・タグのカスタマイズ属性

属性 説明

customizationAllowed

false

true

デフォルト: true

ポートレット・タグの設計時カスタマイズがこのポートレットに対して可能かどうか。

customizationAllowedBy

テキスト文字列

テキスト文字列

ポートレット・タグのその他の属性

次の表は、ポートレット・タグのその他の属性について説明しています。

表14-8 ポートレット・タグのその他の属性

属性 説明

iframeDtd

loose

none

strict

デフォルト: loose

ポートレット・コンテンツがIFRAME内にレンダリングされるときに作成されるdoctype宣言でどのDTDが指定されるのか(ある場合)。

  • none - DTDは指定されません。これにより、HTMLコンテンツが技術的に準拠しているHTMLであることに対する制限が緩和されます。ブラウザでは、通常、そのようなHTMLも十分に処理されますが、ポートレットを消費するADF FacesページのいくつかのCSSスタイル・シートもIFRAMEドキュメントにインポートされるため、そのスタイル・シートが適切に機能するために、緩やかなDTDまたは厳密なDTDに準拠するコンテンツを宣言することが必要な場合もあります。

  • loose: DTD http://www.w3.org/TR/html/loose.dtdが使用されます。

  • strict: DTD http://www.w3.org/TR/html/strict.dtdが使用されます。

JSR 286ポートレットでのパラメータとイベントの手動によるワイヤリング

ページに追加するポートレットで、そのコンテンツを動的に変更するために使用されるパラメータまたはイベントが定義される場合、多くの部分で、これは自動的に行われます。「ポートレット間通信に関する必知事項」を参照してください。

ただし、状況によっては、デフォルトのパラメータおよびイベントの自動リスニングをオフにする必要があるか、適切な別名に一致しないかそれらを定義しない名前を持つパラメータまたはイベントを持つポートレットを使用することもあります。そのような場合、ポートレット内のパラメータおよびイベントを手動でワイヤリングする必要があります。

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

パブリック・レンダラ・パラメータとポートレットの手動によるリンク方法

ページ上にポートレットを配置するときに、同じQNameを持つパブリック・レンダラ・パラメータはすべて自動的にリンクされます。たとえば、1つのポートレットが、myParamという名前のパラメータに値を公開し、ページ上の2番目のポートレットが同じ名前を持つパラメータから値を受け入れる場合、2番目のポートレットは適切な値で自動的に更新されます。

ポートレット開発者がパラメータの別名を設定した場合、異なるQNameを持つパラメータを使用して、複数のポートレットを一緒にリンクすることもできます。

次の例では、パブリック・レンダラ・パラメータを使用して、異なる名前を持ち、別名を定義されていないパラメータを使用して2つのポートレット動作をリンクする方法を示しています。この例では、パブリック・レンダラ・パラメータの更新を可能にする汎用パラメータ・フォーム・ポートレットを取り上げて、どのようにして株価をレンダリングする株価ポートレットにそれをリンクして、パブリック・レンダラ・パラメータから株式記号を取得できるかを示します。

これらの2つのポートレットを同じページ上にドロップするときに、それらが自動的に互いにリンクされることはありません。これは、パラメータ・フォーム・ポートレットの汎用パラメータ名のいずれも、株価ポートレットのstocksymbolパラメータに一致せず、株価ポートレットではパラメータ・フォーム・ポートレットの汎用パラメータ名に一致するstocksymbolパラメータの別名が定義されていないためです。

パラメータを手動でリンクするには、次の2つの方法があります。

ページ変数を使用したパラメータの手動によるリンク

ポートレットがページ上にドロップされるときに、ポートレットによってサポートされているパラメータごとにページ変数が作成されます。私たちの例では、ページ変数は、パラメータ・フォーム・ポートレットに対して3つ、株価ポートレットに対して1つあります。

例14-7 ポートレット・パラメータに対して作成されるページ変数

<pageDefinition ...>
  <parameters/>
  <executables>
    <variableIterator id="variables">
      <variable Name="ParameterFormPortlet1_1_Parameter1"
                Type="java.lang.Object"/>
      <variable Name="ParameterFormPortlet1_1_Parameter2"
                Type="java.lang.Object"/>
      <variable Name="ParameterFormPortlet1_1_Parameter3"
                Type="java.lang.Object"/>
      <variable Name="StockPricePortlet1_1_stocksymbol"
                Type="java.lang.Object"/>
    </variableIterator>
    <portlet id="ParameterFormPortlet1_1"
             ...>
      <parameters>
        <parameter name="Parameter1"
                   pageVariable="ParameterFormPortlet1_1_Parameter1"/>
        <parameter name="Parameter2"
                   pageVariable="ParameterFormPortlet1_1_Parameter2"/>
        <parameter name="Parameter3"
                   pageVariable="ParameterFormPortlet1_1_Parameter3"/>
      </parameters>
      <events>
        <event eventType="ParametersChange"
               name="ParameterFormPortlet1_1_Event"/>
      </events>
    </portlet>
    <portlet id="StockPricePortlet1_1"
             ...>
      <parameters>
        <parameter name="stocksymbol"
                   pageVariable="StockPricePortlet1_1_stocksymbol"/>
      </parameters>
      <events>
        <event eventType="ParametersChange"
               name="StockPricePortlet1_1_Event"/>
      </events>
    </portlet>
  </executables>
  <bindings/>
</pageDefinition>

ポートレットをリンクするために、株価ポートレットが、パラメータ・フォーム・ポートレットに対して作成されるページ変数の1つからの値を使用するようにすることができます。

例14-8 ページ変数を使用したポートレット・パラメータのリンク

<portlet id="StockPricePortlet1_1"
         ...>
  <parameters>
    <parameter name="stocksymbol"
         pageVariable="ParameterFormPortlet1_1_Parameter1"/>
  </parameters>
  <events>
    <event eventType="ParametersChange"
           name="StockPricePortlet1_1_Event"/>
  </events>
</portlet>

ここで、パラメータ・フォーム・ポートレットの最初のパラメータ・フィールドに値を入力すると、対応するページ変数がそれと同じ値に設定され、それによって、株価ポートレットがその新しい値で更新されます。

ParametersChange ADFコンテキスト・イベントを使用したパラメータの手動によるリンク

パラメータおよびページ変数をサポートするポートレットをドロップすると(ページ変数を使用したパラメータの手動によるリンクを参照)、ADF ParametersChangeコンテキスト・イベントがそのポートレットに対して作成されます。このイベントは、そのポートレットのパラメータの値が変更されるとトリガーされます。このイベントのペイロードは、そのパラメータの新しい値です。このイベントを使用すると、ページ定義で最初のポートレットのイベントのペイロードを2番目のポートレットのパラメータにマップするイベント・マップを作成することによって別のポートレットのパラメータの値を設定できます。次の例は、このイベント・マップがどのようなものになるのかを示しています。

例14-9 ParametersChange ADFコンテキスト・イベントを使用するポートレット・パラメータのリンク

<eventMap xmlns="http://xmlns.oracle.com/adfm/contextualEvent">
  <event name="ParameterFormPortlet1_1_Event">
    <producer region="ParameterFormPortlet1_1">
      <consumer handler="StockPricePortlet1_1">
        <parameters>
          <parameter name="stocksymbol">
                     value="${payLoad.Parameter1}"/>
        </parameters>
      </consumer>
    </producer>
  </event>
</eventMap>

パラメータ・フォーム・ポートレットの最初のパラメータ・フィールドに値を入力すると、ParametersChangeイベントがトリガーされます。このイベントのペイロードである新しいパラメータ値は、株価ポートレットに送信され、stocksymbolパラメータの値を指定するために使用されます。

ポートレット・イベントとポートレットの手動によるリンク方法

次の例では、異なるポートレットに対して定義されているイベントの名前が一致しない場合に、ポートレット・イベントを使用して手動でポートレットをリンクする方法を示します。

ヒント:

この項の例を含むZIPファイルを次の場所からダウンロードできます。http://www.oracle.com/technetwork/middleware/webcenter/ps3-samples-176806.html

この例では、1つの会社の様々なオフイスの地理的な位置をリストした部門の位置ポートレットがあるとします。部門の位置ポートレットでは、特定の部門がポートレット内で選択されると、ポートレット・イベント(latLong)が発生します。

Googleマップを表示するマップ・ポートレットという別のポートレットがあります。マップ・ポートレットは、マップ上に表示する位置の判別に使用するポートレット・イベント(geolocation)をリスニングします。

この2つのポートレットが1つのページ上にドロップされている場合、マップ・ポートレットには、マップの表示に使用できる情報を提供するイベントが部門の位置ポートレットによって発生したことを知る方法がありません。この2つのポートレット間のリンクを作成するには、次の例に示すようにページ定義を編集して2つのイベントの間のマッピングを明示的に作成する必要があります。

例14-10 ページ定義における明示的なイベント・マッピング

<pageDefinition ...>
  <parameters/>
  <executables>
    <variableIterator id="variables"/>
    <portlet id="DepartmentLocations1_1"
             ...
      <events>
        <event name="latLong">
          <portletevent namespace-uri="http://xmlns.oracle.com/portlet/EventSample"
                        localpart="latLong"/>
        </event>
      </events>
    </portlet>
    <portlet id="Map1_1"
             ...
      <events>
        <event name="geolocation">
          <portletevent namespace-uri="http://xmlns.oracle.com/portlet/EventSample"
                        localpart="geolocation"/>
        </event>
      </events>
    </portlet>
  </executables>
  <bindings/>
  <eventMap xmlns="http://xmlns.oracle.com/adfm/contextualEvent">
    <event name="{http://xmlns.oracle.com/portlet/EventSample}latLong">
        <producer region="DepartmentLocations1_1">
          <consumer handler="Map1_1.{http://xmlns.oracle.com/portlet/EventSample}geolocation"/>
       </producer>
    </event>
  </eventMap>
</pageDefinition>

ポートレットのコピー

ポートレットをコピーする場合、ポートレットとそのコピーは同じアプリケーション内に置く必要があります。たとえば、ポートレットを、1つのアプリケーションの1つのページからそのアプリケーションの同じプロジェクト内の別のページにコピーしたり、同じページ上の1つの場所から別の場所にコピーできます。また、ターゲット・プロジェクトがポートレットを消費するように構成されている場合、同じアプリケーション内の1つのプロジェクトから別のプロジェクトにポートレットをコピーすることもできます。コピーは、おやじ・ポートレット・インスタンスへの参照であるため、ポートレット(オリジナルまたはコピー)のインスタンスに行ったカスタマイズまたはパーソナライズは、他のすべてのインスタンスに影響を与えます。

ポートレットのコピーは、ポートレット表示タグをコピーして貼り付けること以上のものです。これには、アプリケーション・ページのソースからのポートレット関連のエントリのコピーも含まれます。また、ページ定義ファイルからポートレット関連のエントリをコピーすることと、コピーされたポートレットのバインディングBean内から重複するポートレット・バインディング情報を削除したり、新しいメソッドを作成することも含まれる場合があります。

ポートレットをコピーする場合、ターゲット・ページはOracle ADF Facesページにする必要があります。ターゲット・ページ上に前から存在しているコードはすべて、それを反映する必要があります。このための操作は、非常に簡単です。JDeveloperによって新しいJSFページが作成されると、そのページには純粋なJSFタグが含まれます。Oracle ADF Facesコンポーネントを初めてページ上にドロップすると、自動的にタグがOracle ADF Facesタグに更新されます。たとえば、<html> タグは<afh:html>になり、<head>タグと<title="title">タグは<afh:head title="title">になります。このように、ターゲット・ページをOracle ADF Facesページに確実に変換する簡単な方法は、ターゲット・ページ上にOracle ADF Facesコンポーネントを配置することです。これによって、必要なコード変換が自動的に実行されます。

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

同一ページ上でのポートレットのコピーおよび配置方法

ポートレットを同じページにコピーすると、両方のポートレット・インスタンスにそのページのリソースすべてが使用可能になるため、そのページのページ定義ファイルからポートレット関連情報をコピーする必要はありません。それは、ポートレットの表示タグをコピーして貼り付けてコピーに一意の識別子を割り当てるだけのことです。

同じページにポートレットをコピーして配置するには:

  1. アプリケーション・ナビゲータで、コピーするポートレットが表示されるページが含まれているアプリケーションを開きます。
  2. ページが含まれているプロジェクトを開きます。
  3. ページを見つけ、それを右クリックし、「開く」を選択します

    ヒント:

    ページをダブルクリックして開くこともできます。
  4. デザイン・ビューで、コピーするポートレットを選択します。
  5. 「ソース」タブをクリックします。
    選択したポートレットが、ソース・コード内で強調表示されます。
  6. ポートレット・タグをコピーします。
    ポートレットをコピーする際にコピーするコード部分
    <f:view>
      <afh:html binding="#{backing_portlet_page.html1}" id="html1">
        <afh:head title="portlet_page" binding="#{backing_portlet_page.head1}"
          id="head1">
          <meta http-equiv="Content-Type"
            content="text/html;charset=windows-1252"/>
        </afh:head>
        <afh:body binding="#{backing_portlet_page.body1}" id="body1">
          <h:form binding="#{backing_portlet_page.form1}" id="form1">
               <adfp:portlet value="#{bindings.portlet1}"
                portletType="/oracle/adf/portlet/
                pdksampleproducer_1153245807295/applicationPortlets/
                Portlet2_82d49b79_010c_1000_8006_82235ffc4e2b"
                binding="#{backing_portlet_page.portlet1}"
                id="portlet1"
                isCustomModesAvailable="true"/>
          </h:form>
        </afh:body>
      </afh:html>
    </f:view>
  7. コピーしたコード・フラグメントを、ページ・ソースの目的の場所に貼り付けます。
  8. コピーのid属性に一意の値を指定します。
    ポートレットIDの変更
    <adfp:portlet value="#{bindings.portlet1}"
      portletType="/oracle/adf/portlet/
      pdksampleproducer_1153245807295/applicationPortlets/
      Portlet2_82d49b79_010c_1000_8006_82235ffc4e2b"
      binding="#{backing_portlet_page.portlet1}"
       id="portlet2"
      isCustomModesAvailable="true"/>

    注意:

    1つのページ上で、各ポートレットは一意のIDを持つ必要があります。
  9. ページ・ソースで、たとえば次のように、コピーしたポートレットのadfp:portletタグにバインディング属性が含まれるとします。
    binding="#{backing_untitled2.portlet1}"
    この場合は、このバインディングを削除するか、このマネージドBeanのマネージドBeanクラスを開いて新しいメソッドを定義することによって、バインディングBean内に新しいメソッドを作成します。

    たとえば、portlet1をコピーすると、次のように貼り付けられたコピーがマネージドBeanクラスでportlet2になります。

    マネージドBeanクラスでのマネージドBeanの新しいメソッドの作成
    .
    private PortletBase portlet2;
    public void setPortlet2(PortletBase portet2) {
       this.portlet2 = portlet2;
    }
    .
    public PortletBase getPortlet2() {
       return portlet2;
    }
  10. メイン・メニューから、「ファイル」「すべて保存」の順に選択します。

異なるアプリケーション・ページ間でのポートレットのコピー方法

アプリケーション内の異なるページ間でポートレットをコピーする場合は、ソース・ページのページ定義ファイルからポートレット関連のコードをコピーする必要もあります。この項では、異なるアプリケーション・ページ間でのコピーと、異なるアプリケーション・プロジェクト間でのコピーに関連するステップを示します。

1つのページから別のページにポートレットをコピーするには:

  1. アプリケーション・ナビゲータで、コピーするポートレットが表示されるページが含まれているアプリケーションを開きます。
  2. ページが含まれているプロジェクトを開きます。
  3. ページを見つけ、それを右クリックし、「開く」を選択します

    ヒント:

    ページをダブルクリックして開くこともできます。
  4. デザイン・ビューで、コピーするポートレットを選択します。
  5. 「ソース」タブをクリックします。
    選択したポートレットが、ソース・コード内で強調表示されます。
  6. ポートレット・タグをコピーします。
    ポートレットをコピーする際にコピーするコード部分
    <f:view>
      <afh:html binding="#{backing_portlet_page.html1}" id="html1">
        <afh:head title="portlet_page" binding="#{backing_portlet_page.head1}"
          id="head1">
          <meta http-equiv="Content-Type"
            content="text/html;charset=windows-1252"/>
        </afh:head>
        <afh:body binding="#{backing_portlet_page.body1}" id="body1">
          <h:form binding="#{backing_portlet_page.form1}" id="form1">
               <adfp:portlet value="#{bindings.portlet1}"
               portletType="/oracle/adf/portlet/
               pdksampleproducer_1153245807295/applicationPortlets/
               Portlet2_82d49b79_010c_1000_8006_82235ffc4e2b"
               binding="#{backing_portlet_page.portlet1}"
               id="portlet1"
               isCustomModesAvailable="true"/>
          </h:form>
        </afh:body>
      </afh:html>
    </f:view>
  7. ポートレットのコピー先のアプリケーション・ページ(ターゲット・ページ)に移動します。
    ポートレットは、Oracle ADF Facesページにしか配置できません。ターゲット・ページにOracle ADF Facesコンポーネントが含まれていない場合は、コンテナ・オブジェクト(つまり、ネストされたポートレット・タグを囲んでいるタグ)でOracle ADFタグが使用されていることを確認します。

    別のプロジェクトのページにポートレットをコピーする場合、ターゲット・プロジェクトは、ポートレットを消費するように構成されている必要があります。プロジェクトを構成するには、プロジェクトにポートレット・プロデューサを登録する必要があります。詳細は、「WebCenter PortalへのOracle PDK-Javaポートレット・プロデューサの登録」を参照してください。

  8. 「ソース」タブをクリックし、コピーしたコード・フラグメントを、ページ・ソースの目的の場所に貼り付けます。
  9. アプリケーション・ナビゲータで、ソース・ページ(ポートレットのコピー元のページ)を右クリックし、「ページ定義に移動」を選択します。
  10. 「ソース」タブをクリックし、ソース・ページのページ定義ファイルからポートレット・バインディングをコピーします。
    ページ定義ファイルからコピーするコード部分
    <portlet id="portlet1"
      portletInstance="/oracle/adf/portlet/pdksampleproducer_1153245/applicationPortlets/Portlet2_82d49_010c_1000_8006_82235"
     class="oracle.adf.model.portlet.binding.PortletBinding"
     xmlns="http://xmlns.oracle.com/portlet/bindings"/>

    注意:

    コピーするポートレットにパラメータが含まれる場合は、必ず、コピーしたポートレットのポートレット・パラメータと、ポートレット・パラメータに関連付けられているページ変数もコピーに含めてください。
  11. アプリケーション・ナビゲータで、ターゲット・ページを右クリックして「ページ定義に移動」を選択します。
    そのページのページ定義が存在しない場合、それを作成するかどうかを尋ねられます。「はい」をクリックします。
  12. 「ソース」タブをクリックし、ソースからコピーしたポートレット・バインディングを(関連するポートレット・パラメータ、およびこれらのパラメータに関連付けられたページ変数とともに)貼り付けます。
    <executables> タグの間にコードを貼り付けます。場合によっては、終了の</executables>タグを追加し、開始タグにスラッシュ(/)が含まれていないことを確認する必要があります。
  13. メイン・メニューから、「ファイル」「すべて保存」の順に選択します。

アプリケーション・ページからのポートレットの削除

アプリケーション・ページからポートレットを削除する場合、そのポートレットにパラメータが含まれていれば、アプリケーション・ページのページ定義ファイルから、これらのパラメータに関連付けられたページ変数も削除する必要があります。

ポートレットとそれに関連するページ変数をページから削除するには:

  1. アプリケーション・ナビゲータで、削除するポートレットが表示されるページが含まれているアプリケーションを開きます。
  2. ページが含まれているプロジェクトを開きます。
  3. ページを見つけ、それを右クリックし、「開く」を選択します

    ヒント:

    ページをダブルクリックして開くこともできます。
  4. デザイン・ビューで、削除するポートレットを右クリックし、「削除」を選択します。
    これによって、ページからポートレットが削除され、ページ定義ファイルからポートレット・バインディングが削除されます。
  5. ポートレットに変数が含まれる場合は、アプリケーション・ナビゲータで、ページを右クリックして「ページ定義に移動」を選択します。
  6. 「ソース」タブをクリックし、削除したポートレットに関連付けられているページ変数を見つけて、ページ定義ファイルから削除します。

    たとえば、portlet1を削除した場合は、強調表示された変数も削除します。

    <?xml version="1.0" encoding="UTF-8" ?>
    <pageDefinition xmlns="http://xmlns.oracle.com/adfm/uimodel"
        version="10.1.3.38.97" id="untitled1PageDef"
        Package="project1.pageDefs">
      <parameters/>
      <executables>
        <variableIterator id="variables">
        <variable Name="portlet1_param1" Type="java.lang.Object"/>
        <variable Name="portlet1_param2" Type="java.lang.Object"/>
        <variable Name="portlet2_param1" Type="java.lang.Object"/>
        <variable Name="portlet2_param2" Type="java.lang.Object"/>
     </variableIterator>
        <portlet id="portlet2" portletInstance="/oracle/adf/portlet/
            PdkPortletProducer2_1154100666247/applicationPortlets/
            Portlet1_b5e49696_010c_1000_8008_8c5707ef9c4f"
            class="oracle.adf.model.portlet.binding.PortletBinding"
            xmlns="http://xmlns.oracle.com/portlet/bindings">
          <parameters>
             <parameter name="param1" pageVariable="portlet2_param1"/>
             <parameter name="param2" pageVariable="portlet2_param2"/>
          </parameters>
        </portlet>
      </executables>
      <bindings/>
    </pageDefinition>
  7. メイン・メニューから、「ファイル」「すべて保存」の順に選択します。

ポートレットのトラブルシューティング

ポートレットのトラブルシューティング用診断ツール

コンシューマとプロデューサの両方で使用できる、ポートレットでの問題の識別および解決に役立つ一連のツールがあります。

ポートレットをレンダリングするときにポートレット・エラー・メッセージが表示される場合、またはポートレットが表示されるがそれと適切に対話できない場合、その問題を診断するために従う必要があるこれらのツールの一般的な使用ステップがあります。

この項には次のトピックが含まれます:

ポートレット・インスタンスの識別

ポートレット・エラーが発生した場合の最初のステップは、どのポートレット・プロデューサおよびポートレット・インスタンスが起動されているのかを特定することです。ブラウザからportletDebugShow() JavaScriptを実行し、メイン・ポートレット・コンテンツ領域にこの情報を表示します。

ポートレット・インスタンスを識別するには:

  1. ブラウザの場所フィールドに次のコマンドを入力します。

    javascript:portletDebugShow()

    ヒント:

    Internet ExplorerおよびGoogle Chromeでは、このコマンドを場所フィールドに入力する必要があります。このコマンドをフィールドに貼り付けた場合、javascriptの部分が削除されます。

    Firefox 6以上の場合、場所フィールドにJavaScriptを入力できません。このコマンドをJavaScriptコンソールに入力する必要があります。

  2. スクリプトを実行すると、すべてのポートレットによって次の情報が表示されます。

    • プロデューサ名

    • ポートレット名

    • ポートレット・インスタンスID

    • 実行コンテキストID (ECID)

      ECIDは、ポートレット・リクエストを識別するために使用される一意のIDです。ECIDを使用して、Fusion Middleware Controlを使用して様々なコンシューマおよびプロデューサ・ログ・ファイルにわたるメッセージを関係付けます。同じECIDが、コンシューマからプロデューサに伝播されます。

      注意:

      破損しているポートレットは、2つのECIDを示します。1つはエラーが発生したリクエストに対するもの、1つはエラーが報告されたリクエストに対するものです。インライン・ポートレット(つまり、IFRAME内に表示されないポートレット)の場合、これらの2つのECIDは同じです。

      IFRAMEポートレット(たとえば、Oracle JSF Portlet Bridgeポートレット)の場合、ECIDは異なります。これは、元の例外が発生したものより後のリクエストでエラーが報告されるためです。ログを確認するときは、どちらのECIDにも関連情報が含まれている可能性があるため、両方のECIDを調べます。

    この情報を後続の診断ステップで使用して、問題の特定に役立てることができます。

    注意:

    ポートレット診断情報に表示されるECIDは、ポートレット・プロデューサに対して(ポートレット・コンシューマ・リソース・プロキシを使用して)行われた部分ページ・レンダリング・リクエストを反映していません。これらのリクエストによって、ポートレットが更新される場合がありますが、ポートレット診断情報にECIDは記録されません。これらのリクエスト中に発生するエラーは、プロデューサで記録され、コンシューマ上のポートレット・リソース・プロキシによって記録されますが、ポートレット診断情報で報告されるECID情報を使用して、関連するログ・エントリのECIDを判別するために役立てることはできません。

  3. ポートレットのデバッグを終了したら、次のコマンドを入力して、ポートレット・デバッグ情報を非表示にします。

    javascript:portletDebugHide()

    ヒント:

    Internet ExplorerおよびGoogle Chromeでは、このコマンドを場所フィールドに入力する必要があります。このコマンドをフィールドに貼り付けた場合、javascriptの部分が削除されます。

    Firefox 6以上の場合、場所フィールドにJavaScriptを入力できません。このコマンドをJavaScriptコンソールに入力する必要があります。

ポートレット・コンシューマ・テスト・ページの調査

ポートレット・エラーの診断の次のステップでは、ポートレット・コンシューマ・テスト・ページ(図E-2に表示)にアクセスし、ポートレット・プロデューサを探して、必要に応じて、ポートレットを単独でテストします。

図14-10 ポートレット・コンシューマ・テスト・ページ

図14-10の説明が続きます
「図14-10 ポートレット・コンシューマ・テスト・ページ」の説明

ポートレット・コンシューマ・テスト・ページには、次3つのタブがあります。

  • プロデューサ: このタブには、コンシューマ・アプリケーションに登録されているすべてのプロデューサがリストされます。1つのプロデューサを選択すると、そのプロデューサに関する具体的な情報が提供されます。

  • 健全性チェック: このタブには、コンシューマ・アプリケーション開発者によって構成された、コンシューマ・アプリケーション内で実行できるポートレット・インスタンスと必須パラメータの事前定義済セットが含まれている場合があります。これらのポートレット内の障害はすべて、対応するプロデューサまたはポートレット、あるいはその両方での問題を示しています。

  • 構成: このタブで、ポートレットの消費のためのコンシューマ構成エントリを識別できます。これらの値は、アプリケーション内に格納されているため変更できません。それらは参照目的でのみ表示されています。

ポートレット・コンシューマ・テスト・ページにアクセスした後、さらに診断ステップを実行できます。

この項では、ポートレット・コンシューマ・テスト・ページを使用してポートレットの問題を診断する方法について説明します。次のトピックが含まれています:

  • ポートレット・コンシューマ・テスト・ページへのアクセス

  • ポートレット・プロデューサを見つける

  • ポートレット・インスタンスを見つけて実行する

  • 健全性チェックの実行

  • コンシューマ構成エントリのチェック

プロデューサ・テスト・ページの調査

コンシューマ・アプリケーションでエラーの原因を特定できない場合は、次のステップで「プロデューサ・テスト・ページ」(図E-5に表示)を使用してポートレット・プロデューサ・アプリケーションの潜在的な問題を特定します。

図14-11 プロデューサ・テスト・ページ

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

メイン・プロデューサ・テスト・ページへのアクセスはパブリックですが、各ポートレットのテスト・ページへのリンクには、基礎となっているページおよびタスク・フローに対する権限を付与されているユーザーのみがアクセスできます。

プロデューサ・テスト・ページには、次の5つのセクションがあります。

  • ポートレット

    プロデューサ内のすべてのポートレットのリスト。Oracle JSF Portlet Bridgeポートレットの場合、各ポートレットは、サーブレットとしてそのポートレットを実行するための個別のリンクも提供します(これは、それらをポートレットとして実行するための前提条件です。ポートレットがサーブレットとして実行されない場合、それはポートレットとして実行できません)。

  • コンテナ構成

    コンシューマ・プリファレンス情報が格納される場所に関する情報。

  • コンテナ・バージョン

    ポートレット・プロデューサ・コンテナのバージョン番号。

  • WSDL URL

    登録に使用するWeb Service Definition Language (WSDL)ドキュメントへのリンク。

  • SOAPモニター

    WSRP SOAPモニターへのリンク。それによって、MonitorまたはAdminロールを持つユーザーは、コンシューマとプロデューサとの間のSOAPメッセージを追跡できます。

プロデューサ・テスト・ページにアクセスした後、さらに診断ステップを実行できます。

この項には次のトピックが含まれます:

プロデューサ・テスト・ページへのアクセス

プロデューサ・テスト・ページには、ポートレット・プロデューサに関する診断情報が表示されます。

プロデューサ・テスト・ページにアクセスするには:

  1. ブラウザで、プロデューサ・テスト・ページのURLを入力します。

    http://host:port/context-root/info
    
  2. 後続の項で説明するように、プロデューサ・テスト・ページで、さらに診断ステップを実行できます。

サーブレットとしてのJSFポートレットの実行

Oracle JSF Portlet Bridgeポートレット・プロデューサが適切に実行されていることを確認するには、最初に標準HTTPリクエストを介してプロデューサ・アプリケーションが適切に実行されていることを確認する必要があります。プロデューサによってポートレットとして公開されるアーティファクトが、サーブレットとして実行されていない場合、それらはポートレットとして実行されません。

JSFポートレットをサーブレットとして実行するには:

  1. プロデューサ・テスト・ページで、ポートレットの横にある「サーブレットとして実行」リンクをクリックします。

  2. そのポートレットは、基礎となっているページまたはタスク・フローをリクエストする標準HTTPを使用してコールされます。リクエストの結果は、新しいブラウザ・ウィンドウに表示されます。

    結果のページまたはタスク・フローが適切にレンダリングされない場合、プロデューサ・アプリケーションに、ページまたはタスク・フローをポートレットとして実行する前に解決する必要がある問題があります。

  3. ポートレットがパラメータを取る場合、「パラメータの表示」をクリックして、それらをリストし、値を指定します。「サーブレットとして実行」をクリックすると、ポートレット・コールにそのパラメータ値が含められます。

SOAPモニターの調査

SOAPモニターは、ポートレットをレンダリングするときのコンシューマとプロデューサとの間のSOAPリクエストへのアクセスを提供します。これは、通信レベルでの問題の診断にとても役立ちます。

SOAPモニターを調査するには:

  1. プロデューサ・テスト・ページで、ページの下部にあるSOAPモニター・リンクをクリックします。

  2. プロンプトが表示されたらユーザー名とパスワードを入力します。

    注意:

    SOAPモニターにアクセスするには、アイデンティティ管理システムのMonitorsまたはAdministratorsロールのメンバーであることが必要です。

  3. デフォルトでは、SOAPモニターは無効化されているため、そのページは空です。最初に、ページの最上部にある「有効化」リンクをクリックすることでモニターを有効化する必要があります。

  4. ページは自動的にリフレッシュされないため、SOAPメッセージを表示するには、「リフレッシュ」リンクをクリックする必要があります。

  5. 障害が発生しているポートレットに対してリクエストを強制するには、そのポートレットの「ポートレット・コンシューマ・テスト・ページ: ポートレット」ページに移動し、「ポートレットのリフレッシュ」を選択します。

  6. ポートレットがレンダリングされたか失敗したときに、SOAPモニターの「リフレッシュ」リンクをクリックし、取得されたリクエストを表示します。

  7. これで、送信されたSOAPメッセージとそのレスポンスを調査して、問題の原因の絞込みを試みることができるようになりました。

    注意:

    ポートレットを再実行してSOAPモニターをリフレッシュした後に、メッセージがなにも表示されない場合、それは、プロデューサとコンシューマの間にセキュリティの問題がある可能性を示しています。プロデューサとコンシューマが通信するために適切なWS-Security設定が設定されていることを確認する必要があります。

ポートレット・ログ・ファイルの構成

ポートレットの問題をトラブルシューティングするには、ポートレット・ログハンドラおよびロガーを、ロギング構成ファイルlogging.xmlに追加すると便利です。

次の例は、ポートレット・ログハンドラとロガーの追加方法を示しています。この例では、コンシューマおよびプロデューサのアプリケーションが同じWebLogic Serverインスタンス上で実行されていると想定します。異なるインスタンスでコンシューマおよびプロデューサのアプリケーションを実行している場合は、それらを適切に分割する必要があります。

注意:

ファイルの終わりにログ・エントリを追加すると、シードされた設定がそれらによってオーバーライドされるようになります。

例: ポートレットの問題をトラブルシューティングするためのログ・ファイルの構成

<!-- NOTE: You need to change the path where the logfile is located -->
<log_handlers>
...
 <!-- Portlet Consumer -->
 <log_handler name="portlet-consumer-handler" class="oracle.core.ojdl.logging.ODLHandlerFactory">
 <property name="format" value="ODL-Text"/>
 <property name="path" value="/scratch/logs/portlet-consumer.log"/>
 </log_handler>

 <!-- Portlet Producer -->
 <log_handler name="portlet-producer-handler" class="oracle.core.ojdl.logging.ODLHandlerFactory">
 <property name="format" value="ODL-Text"/>
 <property name="path" value="/scratch/logs/portlet-producer.log"/>
 </log_handler>

 <!-- Portlet Bridge -->
 <log_handler name="portlet-bridge-handler" class="oracle.core.ojdl.logging.ODLHandlerFactory">
 <property name="format" value="ODL-Text"/>
 <property name="path" value="/scratch/logs/portlet-bridge.log"/>
 </log_handler>
...
</log_handlers>

<loggers>
...
 <!-- Portlet Consumer -->
 <logger name="oracle.portlet.client" level="FINEST" useParentHandlers="false">
 <handler name="portlet-consumer-handler"/>
 </logger>

 <!-- Portlet Servers -->
 <logger name="com.bea.portlets" level="FINEST" useParentHandlers="false">
 <handler name="portlet-producer-handler"/>
 </logger>
 <logger name="com.bea.netuix" level="FINEST" useParentHandlers="false">
 <handler name="portlet-producer-handler"/>
 </logger>
 <logger name="com.bea.wsrp" level="FINEST" useParentHandlers="false">
 <handler name="portlet-producer-handler"/>
 </logger>
 <logger name="oracle.portlet.producer" level="FINEST" useParentHandlers="false">
 <handler name="portlet-producer-handler"/>
 </logger>

 <!-- Portlet Bridge -->
 <logger name="oracle.portlet.bridge" level="FINEST" useParentHandlers="false">
 <handler name="portlet-bridge-handler"/>
 </logger>
 <logger name="oracle.portlet.server.bridge" level="FINEST" useParentHandlers="false">
 <handler name="portlet-bridge-handler"/>
 </logger>
...
</loggers>

ロギング構成ファイルは次の場所にあります。

DOMAIN_HOME/config/fmwconfig/servers/server/logging.xml

ログ・ファイル名も、logging.xmlで定義されます。デフォルトのログ・ファイル名は次のとおりです。

DOMAIN_HOME/servers/server/logs/server-diagnostic.log

ポートレットでのポートレット・コンシューマ・エラーの表示

メッセージ「ポートレット・コンシューマ・エラー」(図E-6に表示)は、通常、ポートレット・コンシューマ・アプリケーションのポートレット部分の操作でエラーが発生したことを示します。

図14-12 ポートレット・コンシューマ・エラーが表示されたポートレット

図14-12の説明が続きます
「図14-12 ポートレット・コンシューマ・エラーが表示されたポートレット」の説明

問題

エラーは、ポートレット・コンシューマ・アプリケーションのポートレット部分の操作内で発生しました。つまり、エラーは、リモート・ポートレット・プロデューサ・アプリケーションには関係ありません。

解決策1

診断ログ・ファイルを調べて、例外の原因を判別します。

DebugErrorRendererが有効化されている場合、原因例外が、ログ・ファイルへのリンクとともにポートレット内に表示されます。本番モードで実行している場合は、コンシューマ側のログを参照してください。

エラー・メッセージが表示される原因となった例外が記録されています。可能な場合は、メッセージは、例外スタックの先頭でログに含められ、例外がどのポートレット・バインディングに対して発生したかを示します。次の例は、ポートレット・エラーに対して記録されるメッセージを示しています。

ポートレット・エラーに対して記録されるメッセージの例

<PortletRenderer> <setErrorState> An error has occured for Portlet Binding
portlet1.
oracle.portlet.client.container.PortletContentTypeException: Unexpected content
type "null" in WSRPGetMarkup response.
...

スタック内の原因例外に特に注意してください。これが、元になっている実際の問題が何かを示している可能性があります。

原因は、内部エラーである可能性が高く、適切な対処方法は、Oracleサポートに連絡することです。

問題2

ポートレット・キューがフルのため、プールでは新しいリクエストを処理できません。これはポータルのロードが著しく重い場合に発生する可能性があります。ポートレット・キューがフルの場合、新しいポートレット・リクエストは処理されません。

これが問題の原因である場合は、診断ログに次の例で示すようなエラー・メッセージが含まれます。

ポートレット・キューがフルの際にロギングされるメッセージの例

Message oracle.portlet.client.container.PortletQueueFullException: Queue Full
[cause=na submittedTasks=8,361 queuedTasks=20 queueFreeSpace=0
completedTasks=8,331 activeThreads=10 corePoolSize=10 keepAliveTime=9,223,372,036
largestPoolSize=10 maxPoolSize=10 poolSize=10 isShutdown=false isTerminated=false isTerminating=false]

解決策2

ポートレット・キュー・サイズは、adf-config.xml内でparallelPoolSizeパラメータおよびparallelQueueSizeパラメータによって決定されます。

  • parallelPoolSizeは、タスクのパラレル実行のために使用するスレッド数を示します。デフォルト値は10です。

  • parallelQueueSizeは、パラレル実行を待つタスクのキューのサイズを決定します。キュー・サイズに到達すると、タスクは拒否されます。デフォルト値は、20です。

デフォルト値はほとんどのポータルに適しています。ただし、ポートレット・キューがフルになることが原因のエラーが繰り返し発生する場合、parallelQueueSizeパラメータの値を増やすことを検討する必要がある可能性があります。パフォーマンスを向上するためにも、parallelPoolSizeを増やし、オープンされるスレッド数を増やしてキューからのポートレット・リクエストを処理することも検討する必要がある可能性があります。

注意:

キューおよびプール・サイズを増やすことは慎重に、そして少しずつ行う必要があります。どちらかのパラメータの値が大きすぎると、ハードウェアのリソース使用量が増えて逆効果になる可能性がります。

ポートレットでのポートレット・タイムアウトの表示

ページのポートレットが表示されることが期待されている領域に「ポートレット・タイムアウト」が表示される場合(図E-7に示す)は、構成済の時間だけ、コンシューマはプロデューサのレスポンスを待機したが、その時間中にレスポンスがなかったか、レスポンスがその時間中に完了しなかったことを意味します。原因はいくつか考えられます。

図14-13 ポートレット・タイムアウト・エラーが表示されているポートレット

図14-13の説明が続きます
「図14-13 ポートレット・タイムアウト・エラーが表示されたポートレット」の説明

問題1

プロデューサ・マシンがオーバーロードになっています。

解決策1

プロデューサ管理対象サーバー上の負荷を確認します(これを実行するために使用するツールは、プロデューサを実行しているオペレーティング・システムに応じて異なります)。負荷が高い場合、特定のプロセスがこの高い負荷の原因になっているかどうかと、そのようなプロセスを別のマシンで、またはビジーでない時間に実行できないか確認します。高負荷を引き起こしているプロセスがない場合、またはOracle WebLogic Serverが高負荷を引き起こしている場合で、かつ負荷が一貫して高い場合は、プロデューサ・ハードウェアが適切かどうか、またはアップグレードする(またはノードをさらにクラスタに追加する)必要があるかどうかを検討します。また、Oracle WebLogic Serverの構成を調整し、リクエスト・スレッド・プールのサイズを増やすことも検討します。詳細は、Oracle WebLogic Serverのドキュメントを参照してください。

問題2

ネットワークがオーバーロードになっている。つまり、コンシューマとプロデューサの間の通信に影響を与えているネットワークに関する問題があります。

解決策2

コンシューマ・マシンからプロデューサ・マシンにpingできることを確認します。ローカル・ブラウザでプロデューサのWSRPプロデューサ・テスト・ページにアクセスできることを確認します。これが機能する場合は、コンシューマ・マシンで実行されているブラウザからこの同じページにアクセスできることを確認します。これらのステップのいずれかで問題が発生し、なおかつマシンがオーバーロードになっていない場合は、ネットワークの問題である可能性があり、システム管理者による調査が必要です。

問題3

リクエスト・スレッドがハングする原因となっているプロデューサ・マシン上にデッドロック(またはスタック・スレッド)があります。

解決策3

これは、通常の操作中は発生しません。これが発生する場合は、通常、デッドロックが発生したポイントを示しているプロデューサのログ・ファイルにエラーがあります。これが、問題の診断に役立つ場合があります。場合によっては、Oracle WebLogic Serverの構成を変更することで、これを回避できる可能性があります。詳細は、Oracle WebLogic Serverのドキュメントを参照してください。

問題4

プロデューサ・アプリケーションの実行速度が(たとえば、大量のデータを処理しているために)遅くなっています。

解決策4

この場合、プロデューサ・アプリケーションは、大量のデータを処理しており、レスポンスの構築に時間がかかりすぎている可能性があります。そのアプリケーションで定期的に大量の情報を処理する場合は、プロデューサ・ハードウェアを追加または向上させるか、ポートレット・タイムアウト期間を増やす必要が生じることもあります。ポートレット・タイムアウトは、Enterprise ManagerまたはWLST setWSRPProducerConnectionコマンドを使用してコンシューマ・アプリケーションのプロデューサ接続で構成できます。さらに、アプリケーション内のすべてのプロデューサ接続の最小および最大のタイムアウトは、adf-config.xmlファイルのポートレット・セクション内で構成できます。

問題5

プロデューサ・アプリケーションが、データベースなど別のリソースからのレスポンスを待機し、それに時間がかかりすぎます(たとえば、データベースがオーバーロードになっている場合)。

解決策5

問題のリソースが適切に機能していることを確認します。している場合は、解決策は解決策4と同じです。

問題6

ポートレット・タイムアウト値が、タイムアウト期間が短すぎるなど、不適切に構成されています。

解決策6

通常、ポートレットのタイムアウトは、プロデューサの登録で設定されます。これは、ポートレットがレスポンスするための時間を与えない値に設定されていることがあります。

また、adf-config.xmlファイルのポートレット・セクションで、ポートレット・タイムアウトの最小、最大およびデフォルト値をアプリケーション全体にわたって構成できます。最大タイムアウトによって、ポートレット・プロデューサによって指定されるタイムアウトの上限が設定されるため、最大タイムアウトが短すぎると、プロデューサ接続で指定したタイムアウトが長い場合でも、予期しないポートレット・タイムアウト・エラーが発生することがあります。

ポートレットでのリモート・ポートレット通信エラーの表示

画面のセクションに「リモート・ポートレット通信エラー」メッセージが表示され(図E-8に表示)、その周りに他の空白領域がある場合、この領域にはポートレットが配置される予定でしたが、アプリケーションがこれに接続できていません。

図14-14 「リモート・ポートレット通信エラー」を表示するポートレット

図14-14の説明が続きます
「図14-14 「リモート・ポートレット通信エラー」を表示するポートレット」の説明

問題1

プロデューサが停止しています。

解決策1

プロデューサ・アプリケーションが実行されていないか、それがデプロイされている管理対象サーバーが起動されていない可能性があります。この場合、起動する必要があります。ポートレット障害が発生した時点で試みていたタスクに基づいて起動する必要があるアプリケーションを特定します。

問題2

Webサービス・セキュリティが不適切に構成されています。

解決策2

Webサービス・セキュリティのトラブルシューティング・ステップは、使用しているセキュリティ・プロファイルのタイプ(たとえば、AuthN、SSLまたはMessage Security)に応じて異なります。

Webサービスのセキュリティに関するトラブルシューティングの詳細は、『Oracle Fusion Middleware Webサービスの管理』https://www.oracle.com/pls/topic/lookup?ctx=en/middleware/webcenter/portal/12.2.1.4/develop&id=WSSEC1693の章を参照してください。

問題3

プロデューサ管理対象サーバーにアクセスできません。

解決策3

プロデューサは、介在するファイアウォールまたは不適切なルーティング・ルールのために、コンシューマ・アプリケーションからアクセスできない場所に配置されていることもあります。オラクル社のプロビジョニング・ソフトウェアによってインストールされた環境では、これは発生しませんが、次の場所に移動することで、コンシューマをホストしているマシンからプロデューサのWSDLエンドポイントにアクセスできることを確認してみる価値はあります。

http://host:port/context-root/portlets/wsrp2?WSDL

説明:

  • hostは、ポートレット・プロデューサがデプロイされているサーバーです

  • portは、サーバーがHTTPリクエストをリスニングするポートです

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

次に例を示します。

http://portlets.example.com:9999/sample/portlets/wsrp2?WSDL

ポートレットでのリモート・ポートレット・エラーの表示

ポートレットで「リモート・ポートレット・エラー」が表示される場合、これはプロデューサがエラー・メッセージで応答したことを示しています。エラー・メッセージは、レスポンス・ドキュメント内のSOAPフォルト・メッセージの形式で返されます。プロデューサがエラーを返す理由はいくつかあります。これらのエラーを診断する最適な方法は、最初にコンシューマ診断ログ内の対応する例外スタック・トレースを見つけることです。このスタック・トレースは、プロデューサによって返されたフォルトの種類と、レスポンスに必要な詳細情報を示します。発生する可能性があるいくつかの障害は、後続の項でリストします。

問題1

OperationFailedException。これは、最も一般的なタイプの「リモート・ポートレット・エラー」であり、プロデューサ・アプリケーション内で発生した未対応の例外に対する包括的なものです。

解決策1

OperationFailedExceptionを解決するには、コンシューマ診断ログで例外を調べます。これは、通常、最後のCaused by例外としてフォルト・レスポンスをトリガーするプロデューサ・アプリケーションで発生した例外を示します。

問題2

InvalidRegistrationException。このエラーは、コンシューマがプロデューサとの通信を試みる前に、そのプロデューサがコンシューマに適切に登録されていなかったことを示します。これは、コンシューマが登録した後に、プロデューサのプリファレンス・ストアが移動されたか削除された場合にも発生することがあります。

解決策2

最も可能性が高い原因は、プロビジョニング中の問題です。プロデューサ・アプリケーションのweb.xmlファイルの設定を調べて、例に示すエントリが存在することを確認します。

例14-11 web.xmlの永続ストア設定

<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>

問題3

InvalidHandleException。これは、コンシューマがプロデューサに、プロデューサが認識していないポートレット・インスタンスをレンダリングするか、それと対話するように求めたことを示しています。これは、ポートレットがそのページに追加された後に、なんらかの方法で、プロデューサのプリファレンス・ストアが壊れた場合にも発生することがあります。

解決策3

このエラーの原因として最も可能性が高いのは、プロビジョニング中の問題か、解決策2に示すようにweb.xmlファイルのpersistentStore設定の欠落てす。

問題4

AccessDeniedException。これは、プロデューサ・アプリケーションによって、現在のユーザーが、問題のポートレットまたはタスク・フローへのアクセス権を持っていないと判断されたことを示します。

解決策4

これは、正当なエラー・メッセージであるか構成の問題を示しているかのいずれかの可能性があります。多くの場合、WebCenter Portalでは、ポートレット・リモート・エラーが表示されることなく、認可エラーは正常に処理されます。