Oracle® Fusion Middleware Oracle WebCenter Portal開発者ガイド 11g リリース1 (11.1.1.7.0) B72084-02 |
|
前 |
次 |
この章では、実行時にページに対して行われた変更を保存するためのカスタマイズ・レイヤーを作成する方法を説明します。コンポーザのサンドボックスの作成を有効にし、変更をバック・エンドに保存する前にプレビューするオプションをユーザーに提供する方法も説明します。次の項が含まれます:
ほとんどの業界では、様々な顧客および分野で役に立つようにエンタープライズ・アプリケーションをカスタマイズします。サイトレベルでアプリケーションを変更すると問題が発生する可能性があります。たとえば、サイトレベルのカスタマイズでアプリケーションをアップグレードすると、データの損失またはデータ・マージ・エラーが発生する場合があります。結果として、すべてのマージ競合を解決するまで新しいバージョンのアプリケーションをデプロイできません。
メタデータ・ドメインでは、MDSにこのような問題に対処するカスタマイズ機能が用意されています。このカスタマイズ機能を使用すると、ベースのアプリケーション定義の上に適用される、元の状態に干渉しないカスタマイズ・レイヤーを作成できます。カスタマイズ・レイヤー(またはレイヤー化された変更)は、独自のドキュメントに記述され、ベースのアプリケーション定義から隔離されて格納されます。実行時、適用可能なカスタマイズは、メタデータ・ストアからロードされ、ベースのメタデータ定義の上にレイヤー化され、目的の効果を実現します。製品のアップグレードおよびパッチは、ベースのメタデータ定義にのみ影響するため、カスタマイズは正しい動作を継続します。
カスタマイズ・レイヤー
MDSでは、クライアントは複数のカスタマイズ・タイプを指定できます。たとえば、カスタマイズを実行時モード、アプリケーション・ロール、ユーザー・ロール、アプリケーションの状態またはクライアント指定の条件に追加できます。このようなカスタマイズ・タイプそれぞれは、カスタマイズ・レイヤーと呼ばれ、CustomizationClass
を使用して描写されます。CustomizationClass
はインタフェースMDSで、ベース定義でオーバーレイされるカスタマイズ・レイヤーを特定するために使用されます。たとえば、アプリケーションを構成して、ユーザーが属している部門に基づいてカスタマイズを保存できます。DepartmentCC
というカスタマイズ・レイヤーを作成でき、そこで異なる部門のユーザーによって行われたアプリケーションのカスタマイズは、レイヤー内の異なるフォルダに格納されます。その他の例は、MDSを構成して表示モードの変更をユーザー・カスタマイズとしてあるレイヤーで保存し、編集モードの変更をアプリケーション・カスタマイズとして別のレイヤーで保存する場合(またはこの逆)です。
カスタマイズ・レイヤーは、優先順位の順番で適用されます。つまり、同じ変更が、指定のユーザーおよびセッションに適用される2つの異なるレイヤーで行われた場合、高い優先順位のレイヤーで定義された変更がまず適用されます。
CustomizationClass
を実装する場合、これをMDSで登録する必要があります。MDSには、CustomizationClass
タイプのリストを単一のMetadataObject
と関連付ける方法が用意されています。これは、ファイングレイン関連付けと呼ばれます。MDSには、CustomizationClass
タイプのリストを一連のMetadataObjects
と関連付ける方法も用意されています。これは粗密な関連付けと呼ばれます。CustomizationClass
およびカスタマイズ・レイヤーの作成の詳細は、第22.3項「カスタマイズ・レイヤーの表示モードおよび編集モードへの追加: 例」を参照してください。
コンポーザのサンドボックス
通常、Frameworkアプリケーションでは、実行時カスタマイズはJDEV_HOME
/jdev/
system_directory
/o.mds.dt/adrs/
application_name
/AutoGeneratedMar/mds_adrs_writedir
ディレクトリにすぐに保存されます。表示モードと編集モードの両方で行われた変更はこの方法で保存されます。ただし、特定の状況では、ユーザーは、変更をバック・エンドに実際に保存する前に、まず独自のビューでカスタマイズを適用してその変更を保持するか取り消すかを評価する必要がある場合があります。データベース・リポジトリを使用してカスタマイズを格納する場合、コンポーザを構成してサンドボックスを作成できます。サンドボックスの作成の詳細は、第22.2項「コンポーザのサンドボックスの使用」を参照してください。
サンドボックスは、実行時のページ・カスタマイズをバック・エンドにコミットするまで保存する一時ストレージ・レイヤーです。サンドボックスを構成すると、コンポーザのツールバーに「保存」ボタンが表示され、ユーザーは変更を保存できます。サンドボックス対応のアプリケーションでは、ユーザーがまず変更を保存せずに「閉じる」をクリックすると、「クローズの確認」ダイアログによって、コンポーザを閉じる前に変更を保存するか、取り消すかの確認を求められます。
表示モードで行われたユーザー・カスタマイズはすぐに保存されます。このような変更はページを変更したユーザーに対してのみ使用可能であるため、保存する前に変更を確認する特定の値はありません。
編集モードのカスタマイズはページにアクセスするすべてのユーザーが使用できるため、サンドボックスを有効にして、変更をコミットする前にユーザーがページ・カスタマイズを確認し、これを評価できます。アプリケーションでサンドボックスを有効にした場合、ページの「設計」ビューと「ソース」ビューの両方のコンポーザのツールバーに「保存」ボタンが表示されます。
この項では、サンドボックスの作成を有効にする手順およびサンドボックス対応アプリケーションの実行時の動作を説明します。次のサブセクションが含まれます:
アプリケーションがデータベース・ストアを使用している場合のみサンドボックスを有効にできます。したがって、この項の手順を実行する前にデータベース・ストアが構成されていることを確認する必要があります。データベース・ストアの設定の詳細は、『Oracle Fusion Middleware Oracle WebLogic Server JDBCデータ・ソースの構成と管理』を参照してください。
この項では、コンポーザのサンドボックスの作成を有効にする方法を説明します。次のサブセクションが含まれます:
デフォルトでは、サンドボックスの作成は、(adf-config.xml
ファイルの<mds-config>
セクションで定義された)デフォルトのカスタマイズ・ストアにマップされたすべてのネームスペースに対して有効になっています。ただし、選択した数のネームスペースに対してのみサンドボックスを有効にできます。これを行うには、<pe:sandbox-namespaces>
要素をadf-config.xml
ファイルに追加してから、サンドボックスの作成をサポートするネームスペースを定義する必要があります。
adf-config.xml
でサンドボックスの作成を構成するには:
adf-config.xml
ファイルを開きます。これは、「アプリケーション・リソース」パネルの「ディスクリプタ」
の下のADF META-INF
フォルダにあります。
<metadata-namespaces>
要素の下で、例22-1に示すように、<namespace>
要素が、サンドボックスの作成を有効にするすべてのメタデータに対して定義されていることを確認します。
例22-1 adf-config.xmlファイルのネームスペースの定義
<!-- Your jspx customizations alone go here --> <namespace path="/pages" metadata-store-usage="WebCenterFileMetadataStore"> <namespace-restriction type="CUSTOMIZATIONS"/> </namespace> <!-- Your pagedef customizations alone go here --> <namespace path="/pageDefs" metadata-store-usage="WebCenterFileMetadataStore"> <namespace-restriction type="CUSTOMIZATIONS"/> </namespace>
<pe:page-editor-config>
セクション内に<pe:sandbox-namespaces>
要素を追加し、例22-2に示すように、サンドボックスの作成を有効にするすべてのネームスペースに対して個々の<pe:namespace>
タグを追加します。
adf-config.xml
ファイルを保存します。
ページの編集モードからサンドボックスが構成されたことを確認するには、アプリケーションのweb.xml
ファイルでフィルタを作成し、適切なフィルタ・マッピングを設定する必要があります。すべてのリクエストがこのフィルタを通るようにルーティングされ、サンドボックスがすべての編集モードのカスタマイズに対して作成されます。ファイル・システムのメタデータ・ストアを使用している場合、フィルタされたリクエストに対して実行される処理はありません。
この項では、コンポーザ固有のフィルタおよびその関連フィルタ・マッピングをアプリケーションのweb.xml
ファイルに定義する例を提供します。ここでは、フィルタ(WebCenterComposerFilter
)を追加する方法を説明します。
コンポーザ固有のフィルタおよびフィルタ・マッピングを定義するには:
application_root
/Portal/public_html/WEB-INF/web.xml
ファイルを開きます。
WebCenterComposerFilter
を追加してからadfBindings
フィルタを追加します。
<filter> <filter-name>composerFilter</filter-name> <filter-class>oracle.adf.view.page.editor.webapp.WebCenterComposerFilter</filter-class> </filter>
例22-3に示すように、AdfBindingFilter
のフィルタ・マッピングの前に対応する<filter-mapping>
要素を追加します。
例22-3 コンポーザ固有のフィルタのためのフィルタ・マッピング
<filter-mapping> <filter-name>composerFilter</filter-name> <servlet-name>Faces Servlet</servlet-name> <dispatcher>FORWARD</dispatcher> <dispatcher>REQUEST</dispatcher> </filter-mapping>
<url-pattern>
タグを使用してWebCenterComposerFilter
を通過する必要があるページを指定し、ページが編集モードになったときにサンドボックスの作成を有効化できるようにします。
注意: フィルタの定義順序が重要です。リクエストがこれらのフィルタで順番に渡されるので、適切な順序で定義されていないと、アプリケーションは設計されたように実行されません。 |
web.xml
ファイルを保存します。
サンドボックスの作成を有効にするには、アプリケーションを構成しデータベース・ストアを使用する必要があります。したがって、アプリケーションをWebLogic管理対象サーバーにデプロイするときに、データベース・リポジトリを選択し、そのアプリケーションのパーティション名を指定します。
JDeveloperからWebLogic管理対象サーバーへのアプリケーションのデプロイの詳細は、第69.3.4.1項「ローカル・データ・ソースを使用した管理対象サーバーへのデプロイ」を参照してください。
アプリケーションでサンドボックスの作成を有効にするとき、ページ編集モードに入るときとそのモードを終了するときにフル・ページ・リフレッシュが実行されるようにする必要があります。その実行手順の詳細は第22.3.7項「サーブレットをリダイレクトしてMDSカスタマイズ・レイヤー間の切替えを有効にする方法」を参照してください。
ユーザーがページ編集モードに切り替えるとき、コンポーザのツールバーに「保存」ボタンが表示されるということは、サンドボックスの作成がアプリケーションで有効であることを示します。ページまたはページの共有コンポーネントに対して行われた変更は、ユーザーが「保存」をクリックするまで保存されません。保存されると、すべてのアプリケーション・ユーザーがこのカスタマイズを使用できます。「保存」ボタンがレンダリングされない場合、サンドボックスを使用できず、各変更はすぐにコミットされます。
「コンポーネント・プロパティ」ダイアログでコンポーネント・プロパティを編集するとき、「適用」をクリックすると次のようになります。
サンドボックスを使用できない場合、ページがリフレッシュされてコンポーネント・プロパティに対して行われた変更が表示され、変更はバック・エンドに保存されます。
サンドボックスを使用できる場合、ページがリフレッシュされてコンポーネント・プロパティに対して行われた変更が表示されます。変更を保存するには、ユーザーは「保存」をクリックする必要があります。
ページで「保存」または「閉じる」をクリックすると、次のイベントが実行されます。
「保存」をクリックすると、サンドボックスがコミットされ、新しいサンドボックスが作成されます。ページは編集モードのままです。
「閉じる」をクリックすると、次の2つのイベントのいずれかが発生します。
最後の保存操作以降の変更がない場合、サンドボックスが破棄され、コンポーザが閉じ、ユーザーは表示モードに戻ります。
未保存の変更がある場合は、図22-1に示すように、「クローズの確認」ダイアログにページ名と未保存のタスク・フロー名がリストされます。
ユーザーは、次のオプションから選択できます。
「保存」をクリックして、サンドボックスをコミットし、コンポーザを閉じます。
「保存しない」をクリックして、サンドボックスを破棄し、コンポーザを閉じます。
「取消」をクリックし、ダイアログを閉じ、変更を保存せずにコンポーザに戻ります。
注意: ユーザーがページを編集中にページ外にナビゲートし、そのページに戻った場合、保存されていない変更は失われます。 |
並行編集時の処理
複数のユーザーが同じカスタマイズ・レイヤーを使用して同じページまたはタスク・フローを編集している場合、図22-2に示すように、ページに別のユーザーがページまたはタスク・フローを編集しているというメッセージが各ユーザーに表示されます。
複数のユーザーが同じカスタマイズ・レイヤーで同時にタスク・フローにズームインし、それを編集している場合、図22-3に示すように、並行処理メッセージが表示されます。
注意: ユーザーがタスク・フローにズームインし、いくつかのカスタマイズを行い、タスク・フローからズームアウトした場合、そのユーザーがカスタマイズを保存するまで、タスク・フローの並行処理メッセージが他のユーザーに対して継続して表示されます。 |
最後に保存された変更は前の変更を上書きします。たとえば、ユーザーAとBがページまたはタスク・フローを同時に編集している場合、並行性の問題は次のように処理されます。
Aが最初にページまたはタスク・フローを保存すると、Aの変更がMDSにコミットされます。その後、Bがページまたはタスク・フローを保存すると、Aの変更はBの変更で上書きされます。
Bが表示モードでコンポーネントをパーソナライズ(たとえば移動)しようとしている間にAがその同じコンポーネントを削除すると、WebCenterのエラー・ページがBに表示されます。Bは、元のページにナビゲートして戻る必要があります。削除されたコンポーネントは表示されず、Bは他のコンポーネントで作業を継続できます。
変更がすぐにバック・エンドにコミットされるようにするために、サンドボックスを無効にできます。
サンドボックスを無効にするには:
adf-config.xml
ファイルを開きます。これは、「アプリケーション・リソース」パネルの「ディスクリプタ」
の下のADF META-INF
フォルダにあります。
<pe:page-editor-config>
要素の下に<pe:disable-sandbox>
属性を追加し、これをtrue
に設定します。
adf-config.xml
を保存します。
ユーザーが実行時にページを編集するとき、ブラウザが予期せずに閉じた場合またはユーザーがページ外にナビゲートした場合、そのセッションで使用されていたサンドボックスは使用可能なままです。同じページにアクセスしている他のユーザーには、同じページを別のユーザーが編集しているという並行処理メッセージが表示されたままになります。このような失効したサンドボックスを破棄して、データベース・ストアの領域を解放し、パフォーマンスを向上できます。
失効したサンドボックスが次の場合に破棄されるようにできます。
セッションがタイムアウトした場合。
アプリケーションのweb.xml
ファイルの<session-timeout>
要素は、サンドボックスが破棄されるまでの期間を定義できます。これが確実に起こるようにするためには、アプリケーションのweb.xml
ファイルでWebCenterComposerSessionListener
を構成する必要があります。このリスナーは、セッションがタイムアウトになるとコールされます。これは、同じユーザーがページ編集モードに入るときに新しいサンドボックスを作成します。
ユーザーがページの編集モードに同じユーザー名で再ログインした場合。
この場合、同じユーザーが編集モードに切り替えると、新しいサンドボックスが作成されます。
WebCenterComposerSessionListener
を構成するには:
application_root
/Portal/public_html/WEB-INF/web.xml
ファイルを開きます。
次の例に示すように、新しいリスナー(WebCenterComposerSessionListener
)を定義します。
<listener> <description>Composer Http Session Listener</description> <display-name>Composer Http Session Listener</display-name> <listener-class> oracle.adf.view.page.editor.webapp.WebCenterComposerSessionListener </listener-class> </listener>
web.xml
ファイルを保存します。
web.xml
で作成できるコンポーザ固有構成の詳細は、第B.2.4項「web.xmlの更新」を参照してください。
ページの上部にバナーを、左にページを管理するオプションを備えたサイドバーを、ブラウザ・ウィンドウの中央にページを表示するアプリケーションを作成した例を考えてみます。ユーザーがコンポーザでページを編集し、他のメカニズム(XMLファイルの更新など)を使用してサイドバーを編集できるようにする必要があるとします。このような場合にコンポーザのサンドボックスを有効にしても、ページ・コンテンツの変更のみが保存され、サイドバーの変更は保存されません。アプリケーションのサンドボックスを有効にした場合、実行時に行われたすべての変更が一度に1つの場所に保存されます。アプリケーション・レベルでサンドボックスの作成を有効にすると、コンポーザは、ページ編集モードを起動したときに独自のサンドボックスを作成しません。かわりに、アプリケーションのサンドボックスが使用されます。つまり、アプリケーションが提供するユーザー・インタフェースは、サンドボックスのコミットおよび破棄に使用されます。アプリケーションがコンポーザのサンドボックスを提供できるようにするには、まず一連の構成を実行する必要があります。
アプリケーションのサンドボックスを有効にするために便利な別の例は、ユーザーがページ・コンテンツを編集するが、管理人の承認時のみページが保存されるようにする場合です。アプリケーションのサンドボックスを使用して、ユーザーが行った変更は、管理人が変更を承認するまでサンドボックスに留まります。ページは承認時に保存されます。
コンポーザでアプリケーション・サンドボックスの使用を可能にするには:
ComposerSessionOptionsFactory
クラスを実装して、各リクエストにMDSSessionOptions
を提供します。
このタスクの実行の詳細は、第22.3.4項「ComposerSessionOptionsFactoryクラスの実装方法」を参照してください。
コンポーザで実装を登録します。
このタスクの実行の詳細は、第22.3.5項「コンポーザでの実装の登録方法」を参照してください。
WebCenterComposerFilter
を構成します。
このタスクの実行の詳細は、第22.3.6項「WebCenterComposerFilterの構成方法」を参照してください。
実行時、アプリケーションで定義されたユーザー・インタフェースを使用すると、ユーザーは、変更をバック・エンドに保存したり、変更を保存せずにコンポーザを閉じたりできます。この場合、カスタマイズが取り消された場合やバック・エンドにコミットされた場合には、コンポーザはこれを制御できません。
カスタマイズをクライアント定義の条件に基づいてメタデータ・オブジェクトに適用できます。たとえば、エンド・ユーザーの権限、アプリケーションのデプロイ場所(ローカライゼーションとも呼ばれる)または特定の産業分野に基づいて使用するアプリケーションおよびメタデータ・オブジェクトをカスタマイズできます。このような各カテゴリ(権限、ローカライゼーションおよび分野)は、カスタマイズ・レイヤーを指し、それぞれがCustomizationClass
を使用して描写されます。CustomizationClass
はインタフェースMDSで、ベース定義でオーバーレイされるカスタマイズ・レイヤーを特定するために使用されます。例については、第22.3.3項「カスタムUserCCヒント・レイヤーの作成方法」を参照してください。
CustomizationClass
を実装する場合、これをMDSで登録する必要もあります。MDSには、CustomizationClass
タイプのリストを単一のMetadataObject
と関連付ける機能が用意されています。これは、ファイングレイン関連付けと呼ばれます。MDSには、CustomizationClass
タイプのリストを一連のMetadataObjects
と関連付ける機能も用意されています。これは粗密な関連付けと呼ばれます。
カスタマイズ可能アプリケーションは、複数のカスタマイズ・レイヤーを持つことができます。カスタマイズを適用するレイヤーを選択できます。カスタマイズ先として選択したレイヤーは、ヒント・レイヤーと呼ばれます。コンポーザ・コンポーネントをJSFページにドロップすると、ADFは、アプリケーションにデフォルトのSiteCC
(site
)ヒント・レイヤーを構成します。その結果、adf-config.xml
ファイルが更新され、SiteCC
カスタマイズ・クラスを組み込みます。このヒント・レイヤーは、ページに対して行われたすべてのカスタマイズを格納します。
この項では、例を使用して、カスタマイズ・ヒント・レイヤーを表示実行時モードおよび編集実行時モードに追加すると、ユーザーのカスタマイズ機能がすべてのユーザーにどのように提供され、アプリケーションのカスタマイズ機能が選択したユーザーにどのように提供されるかを説明します。アプリケーションのカスタマイズを編集モードで有効にするために、site
ヒント・レイヤーが追加されます。ユーザーのカスタマイズを表示モードで有効にするために、user
ヒント・レイヤーが追加されます。デフォルトでは、user
ヒント・レイヤーはsite
ヒント・レイヤーの上に適用されます。user
ヒント・レイヤーは、表示モードで行われたすべてのユーザーのカスタマイズをこれを行ったユーザー用に作成された特定の場所に格納します。このような変更はそのユーザーにしか表示されません。site
ヒント・レイヤーは、編集モードで行われたすべてのアプリケーションのカスタマイズを格納し、すべてのユーザーに対して表示されます。
実行時にヒント・レイヤーを有効にするために、コンポーザはWebCenterComposerFilter
フィルタを提供し、MDS SessionOptions
オブジェクトを作成するための抽象ファクトリを定義する方法を提供します。このオブジェクトでは、実行時に適用可能なカスタマイズ・レイヤーが提供され、ユーザーはロールに基づいてユーザーのカスタマイズ(表示モード)およびアプリケーションのカスタマイズ(編集モード)を実行できます。新しいMDSセッションを作成するとき、このオブジェクトのMDSSession.createSession
メソッドを使用して、セッションのオプションを指定します。
この項では、カスタマイズ・レイヤーを作成、実装および登録し、WebCenterComposerFilter
を構成し、MDSカスタマイズ・レイヤー間で切り替える例を提供します。次のサブセクションが含まれます:
この項では、JSFページにPage Customizable
コンポーネントを追加する方法を説明します。こうすることによって、実行時にコンポーザを編集モードで使用でき、admin
ユーザーはサイトレベルでカスタマイズを実行できます。
注意: この項では、 |
JSFページにコンポーザを追加するには:
JSPXページを開き、「コンポーネント・パレット」から「コンポーザ」を選択します。
Change Mode Linkを選択し、これをページにドロップします。
Page Customizableを選択し、これをページにドロップします。
「ソース」ビューは次のようになります。
<af:form id="f1"> <pe:changeModeLink id="cml1"/> <pe:pageCustomizable id="pageCustomizable1"> <cust:panelCustomizable id="panelCustomizable1" layout="scroll"/> <f:facet name="editor"> <pe:pageEditor id="pep1"/> </f:facet> </pe:pageCustomizable> </af:form>
これらのコンポーネントをページにドロップすると、デフォルトのSiteCC
ヒント・レイヤーがADFによって拡張されます。その結果、adf-config.xml
ファイルがこのカスタマイズ・クラスで更新されます。
<cust-config> <match> <customization-class name="oracle.adf.share.config.SiteCC" /> </match> </cust-config>
注意: アプリケーションで |
この項では、編集モードで実行されたすべてのサイトレベルのカスタマイズが格納される、カスタムSiteCC
ヒント・レイヤー(site
)を作成する方法を説明します。このサンプル・アプリケーションでは、サイトレベルのカスタマイズは、/mds/mdssys/cust/site/webcenter/
pagename
.jspx.xml
ディレクトリに格納されます。
site
ヒント・レイヤーを作成するには:
「ファイル」メニューから、「新規」を選択します。
「新規ギャラリ」ダイアログで、「一般」を開き、「Java」、「Javaクラス」の順に選択して、「OK」をクリックします。
「Javaクラスの作成」ダイアログが開きます。
「名前」フィールドにSiteCC
と入力します。
「拡張対象」フィールドにCustomizationClass
と入力します。
こうすることによってoracle.mds.cust.CustomizationClass
がインポートされます。
「OK」をクリックします。
SiteCC.java
ファイルは「ソース」ビューにレンダリングされます。
getCacheHint
、getName
およびgetValue
のメソッドを実装するには、左上隅の電球をダブルクリックして「メソッドの実装」を選択します。
「メソッドの実装」ダイアログで、「OK」をクリックします。
「ソース」ビューで、public class SiteCC extends CustomizationClass
の後に[Enter]
を押し、次の文字列
を追加します。
{ private static final String DEFAULT_LAYER_NAME = "site"; private String mLayerName = DEFAULT_LAYER_NAME; private String mLayerValue = "webcenter";
次のライブラリがインポートされます。
import oracle.mds.core.MetadataObject; import oracle.mds.core.RestrictedSession; import oracle.mds.cust.CacheHint;
ここで太字で示したようにコードを更新します。
public class SiteCC extends CustomizationClass { private static final String DEFAULT_LAYER_NAME = "site"; private String mLayerName = DEFAULT_LAYER_NAME; private String mLayerValue = "webcenter"; //Note: You can provide any site name. public CacheHint getCacheHint() { return CacheHint.ALL_USERS; } public String getName() { return mLayerName; } public String[] getValue(RestrictedSession mdsSession, MetadataObject mo) { return new String[] { mLayerValue }; } }
SiteCC.java
ファイルを保存します。
この項では、ユーザーscott
用のカスタムuser
ヒント・レイヤーを作成する方法を示す例を説明します。このレイヤーはsite
レイヤーの上に適用されます。表示モードでユーザーが実行するユーザーのカスタマイズは、ログイン・ユーザー専用に作成されたフォルダのこのuser
ヒント・レイヤーに保存されます。この例では、表示モードで実行したユーザーのカスタマイズは、/mds/mdssys/cust/user/scott/
pagename
.jspx.xml
ディレクトリに格納されます。
注意: 説明上の目的のため、この例では、 |
userヒント・レイヤーを作成するには:
「ファイル」メニューから、「新規」を選択します。
「新規ギャラリ」ダイアログで、「一般」を開き、「Java」、「Javaクラス」の順に選択して、「OK」をクリックします。
「Javaクラスの作成」ダイアログが開きます。
「名前」フィールドにUserCC
と入力します。
「拡張対象」フィールドにCustomizationClass
と入力します。
こうすることによってoracle.mds.cust.CustomizationClass
がインポートされます。
「OK」をクリックします。
「ソース」ビューにUserCC.java
ファイルが表示されます。
getCacheHint
、getName
およびgetValue
のメソッドを実装するには、左上隅の電球をダブルクリックして「メソッドの実装」を選択します。
「メソッドの実装」ダイアログで、「OK」をクリックします。
「ソース」ビューで、public class UserCC extends CustomizationClass
の後に[Enter]
を押し、次の文字列
を追加します。
{ private static final String DEFAULT_LAYER_NAME = "user"; private String mLayerName = DEFAULT_LAYER_NAME; private String mLayerValue = "scott"; //The name of the logged-in user in this example. The logged-in user name can be acquired dynamically.
次のライブラリがインポートされます。
import oracle.mds.core.MetadataObject; import oracle.mds.core.RestrictedSession; import oracle.mds.cust.CacheHint;
ここで太字で示したようにコードを更新します。
public class UserCC extends CustomizationClass { private static final String DEFAULT_LAYER_NAME = "user"; private String mLayerName = DEFAULT_LAYER_NAME; private String mLayerValue = "scott"; public CacheHint getCacheHint() { return CacheHint.USER; } public String getName() { return mLayerName; } public String[] getValue(RestrictedSession mdsSession, MetadataObject mo) { return new String[]{mLayerValue}; } }
UserCC.java
ファイルを保存します。
この項では、ADFが提供するComposerSessionOptionsFactory
クラスが実装され、MDS SessionOptions
を各HTTPリクエストに提供します。
ComposerSessionOptionsFactory
クラスを実装するには:
「ファイル」メニューから「新規」を選択します。
「新規ギャラリ」ダイアログで、「一般」を開き、「Java」、「Javaクラス」の順に選択して、「OK」をクリックします。
「Javaクラスの作成」ダイアログが開きます。
「名前」フィールドにAppsSessionOptionsFactoryImpl
と入力します。
「OK」をクリックします。
AppsSessionOptionsFactoryImpl.java
ファイルが「ソース」ビューにレンダリングされます。
次のライブラリをインポートします。
import oracle.adf.view.page.editor.mds.ComposerSessionOptionsFactory; import oracle.adf.view.page.editor.mode.ModeContext; import oracle.mds.config.CustClassListMapping; import oracle.mds.config.CustConfig; import oracle.mds.core.SessionOptions; import oracle.mds.cust.CustClassList; import oracle.mds.cust.CustomizationClass;
次のコードを追加してComposerSessionOptionsFactory
クラスを実装し、SessionOptions
を渡します。
public class AppsSessionOptionsFactoryImpl implements ComposerSessionOptionsFactory { public SessionOptions createSessionOptions(SessionOptions defaultSessionOptions, String mode) { CustomizationClass[] custLayer; CustConfig custConfig = null; if (ModeContext.EDIT_MODE.equals(mode)) { //Mode is Edit, change to SiteCC custLayer = EDIT_LAYER; } else { //Mode is View, change to UserCC + SiteCC custLayer = VIEW_LAYER; } try { CustClassList custClassList = new CustClassList(custLayer); CustClassListMapping custClassListMapping = new CustClassListMapping("/", null, null, custClassList); custConfig = new CustConfig(new CustClassListMapping[] { custClassListMapping }); } catch (Exception e) { e.printStackTrace(); } if(defaultSessionOptions.getServletContextAsObject() != null){ return new SessionOptions(defaultSessionOptions.getIsolationLevel(), defaultSessionOptions.getLocale(), custConfig, defaultSessionOptions.getVersionContext(), defaultSessionOptions.getVersionCreatorName(), defaultSessionOptions.getCustomizationPolicy(), defaultSessionOptions.getServletContextAsObject()); } else { return new SessionOptions(defaultSessionOptions.getIsolationLevel(), defaultSessionOptions.getLocale(), custConfig, defaultSessionOptions.getVersionContext(), defaultSessionOptions.getVersionCreatorName(), defaultSessionOptions.getCustomizationPolicy()); } } //Edit mode SiteCC private static final CustomizationClass[] EDIT_LAYER = new CustomizationClass[] { new SiteCC() }; //View mode SiteCC + USerCC private static final CustomizationClass[] VIEW_LAYER = new CustomizationClass[] { new SiteCC(), new UserCC() }; }
site
カスタマイズ・レイヤーおよびuser
カスタマイズ・レイヤーを機能させるには、コンポーザでComposerSessionOptionsFactory
クラスを登録する必要があります。たとえば、具体的なクラスがview.AppsSessionOptionsFactoryImpl
の場合、次のスニペットをアプリケーション・ディレクトリの/.adf/META-INF
フォルダにあるadf-config.xml
ファイルに追加する必要があります。
<pe:page-editor-config xmlns="http://xmlns.oracle.com/adf/pageeditor/config"> <pe:session-options-factory>view.AppsSessionOptionsFactoryImpl</pe:session-options-factory> </pe:page-editor-config>
アプリケーション・ディレクトリのPortal/public_html/WEB-INF
フォルダにあるweb.xml
ファイルのWebCenterComposerFilter
フィルタを構成する必要があります。このフィルタは、すべてのHTTPリクエストについてコンポーザの具体的なSessionOptionsFactory
をADFに登録します。フィルタがADFからコールを受信すると、リクエストをアプリケーションに転送し、新しくカスタマイズされたレイヤーでSessionOptions
を取得します。SessionOptions
でSandbox
またはVersionContext
を設定していない場合、コンポーザはその独自のサンドボックスを設定し、それをADFに返します。サンドボックスの詳細は、第22.2.1項「コンポーザのサンドボックスの作成を有効にする方法」を参照してください。composerFilter
およびそのフィルタ・マッピングはADFBindingFilter
の前に構成される必要があります。たとえば、次のweb.xml
ファイルを参照してください。
.... <!-- WebCenterComposerFilter goes here --> <filter> <filter-name>composerFilter</filter-name> <filter-class>oracle.adf.view.page.editor.webapp.WebCenterComposerFilter</filter-class> </filter> <filter> <filter-name>adfBindings</filter-name> <filter-class>oracle.adf.model.servlet.ADFBindingFilter</filter-class> </filter> ..... <!-- WebCenterComposerFilter mapping goes here --> <filter-mapping> <filter-name>composerFilter</filter-name> <servlet-name>Faces Servlet</servlet-name> <dispatcher>FORWARD</dispatcher> <dispatcher>REQUEST</dispatcher> </filter-mapping> <filter-mapping> <filter-name>adfBindings</filter-name> <servlet-name>Faces Servlet</servlet-name> <dispatcher>FORWARD</dispatcher> <dispatcher>REQUEST</dispatcher> </filter-mapping> ....
注意: フィルタの定義順序が重要です。リクエストがこれらのフィルタで順番に渡されるので、適切な順序で定義されていないと、アプリケーションは設計されたように実行されません。 |
web.xml
で作成できるコンポーザ固有構成の詳細は、第B.2.4項「web.xmlの更新」を参照してください。
サーブレットをリダイレクトする、つまり実行時にフル・ページをリフレッシュするには、次のものを作成する必要があります。
AppNavigationUtils.redirectToSamePage()
メソッドをコールするAppNavigationUtils
クラス
AppNavigationUtils
クラスを使用するAppCloseHandler
CloseListener
編集モードを表示するAppModeBean
この項では、これらのオブジェクトの作成方法を説明します。次のサブセクションが含まれます:
AppNavigationUtils
クラスを作成するには:
「ファイル」メニューから、「新規」を選択します。
「新規ギャラリ」ダイアログで、「一般」を開き、「Java」、「Javaクラス」の順に選択して、「OK」をクリックします。
「Javaクラスの作成」ダイアログが開きます。
「名前」フィールドに、AppNavigationUtils
と入力し、「OK」をクリックします。
AppNavigationUtils.java
ファイルは「ソース」ビューにレンダリングされます。
次のライブラリをインポートします。
import javax.faces.context.FacesContext; import javax.servlet.http.HttpServletRequest;
次のコードを追加します。編集時にサンドボックスまたはカスタマイズ・レイヤーの変更を使用する場合は、AppNavigationUtils. redirectToSamePage()
を含める必要があります。
public class AppNavigationUtils { public static void redirectToSamePage() { FacesContext facesContext = FacesContext.getCurrentInstance(); Object reqObject = facesContext.getExternalContext().getRequest(); if (reqObject instanceof HttpServletRequest) { HttpServletRequest httpReqObject = (HttpServletRequest) reqObject; String url = httpReqObject.getRequestURI(); if (httpReqObject.getQueryString() != null) url = url + "?" + httpReqObject.getQueryString(); String escapedUrl = url.replaceAll("<", "<"); facesContext.getExternalContext().redirect(escapedUrl); } } }
AppCloseHandler
を作成するには:
「ファイル」メニューから、「新規」を選択します。
「新規ギャラリ」ダイアログで、「一般」を開き、「Java」、「Javaクラス」の順に選択して、「OK」をクリックします。
「Javaクラスの作成」ダイアログが開きます。
「名前」フィールドに、AppCloseHandler
と入力し、「OK」をクリックします。
「ソース」ビューにAppCloseHandler.java
ファイルが表示されます。
次のライブラリをインポートします。
import oracle.adf.view.page.editor.event.CloseEvent; import oracle.adf.view.page.editor.event.CloseListener;
次のコードを追加します。
public class AppCloseHandler implements CloseListener { public void processClose(CloseEvent closeEvent) { AppNavigationUtils.redirectToSamePage(); } }
AppCloseHandler
を作成した後、これをコンポーザ拡張ファイルpe_ext.xml
に登録する必要があります。
このイベント・ハンドラを登録するには:
pe_ext.xml
ファイルで、次のエントリを追加します。
<event-handlers> <event-handler event="close">view.AppCloseHandler</event-handler> </event-handlers>
ファイルを保存します。
イベント・ハンドラの詳細は、第20.6項「コンポーザUIイベントのイベント・ハンドラの構成」を参照してください。
AppModeBean
を作成するには:
「ファイル」メニューから「新規」を選択します。
「新規ギャラリ」ダイアログで、「一般」を開き、「Java」、「Javaクラス」の順に選択して、「OK」をクリックします。
「Javaクラスの作成」ダイアログが開きます。
「名前」フィールドに、AppModeBean
と入力し、「OK」をクリックします。
「ソース」ビューにAppModeBean.java
ファイルが表示されます。
次のライブラリをインポートします。
import javax.faces.event.ActionEvent;import oracle.adf.view.page.editor.mode.ModeContext;
次のコードを追加します。
public class AppModeBean { public void edit(ActionEvent actionEvent) { ModeContext.getCurrent().setEditMode(); AppNavigationUtils.redirectToSamePage(); } }
site
カスタマイズ・レイヤーの機能を確認するには、まずブラウザでJSFページを実行します。次に、ページにadmin
としてログインし、「編集」リンクをクリックして編集モードに切り替えます。実行時、ページをカスタマイズします。たとえば、Webページ、移動可能ボックスまたはイメージをページにドロップします。ページは図22-4のようになります。
アプリケーション・ディレクトリの/mds/mdssys/cust/site/webcenter
に移動し、pagename
.jspx.xml
ファイルを開きます。これは、ページに対して実行したサイトレベルのカスタマイズ(アプリケーションのカスタマイズ)が格納される場所です。
user
カスタマイズ・レイヤーを使用するには、ページにscott
としてログインし、表示モードでページをパーソナライズします。次にアプリケーション・ディレクトリの/mds/mdssys/cust/user/scott
に移動し、pagename
.jspx.xml
ファイルを開きます。これは、ページに対して実行したユーザーレベルのカスタマイズが格納される場所です。
この項では、コンポーザの使用中に発生する可能性のあるMDS関連の問題のトラブルシューティングに役立つ情報を提供します。
ロギングの構成の詳細は、「コンポーザのADFロギングの構成」を参照してください。
問題
アプリケーションはMDSサンドボックスを使用するように構成されています。アプリケーションを実行すると、サンドボックスは動作せず、また例外も生成しません。
解決方法
次の点を確認してください。
データベース・リポジトリが使用されています。サンドボックスは、データベース・ベースのリポジトリでのみ動作し、ファイルベースのリポジトリでは動作しません。
web.xml
のフィルタの順序が正確です。サンドボックスが正しく動作するためには、<filter>
エントリが正しい順序である必要があります。
詳細は、第22.2項「コンポーザのサンドボックスの使用」を参照してください。