ヘッダーをスキップ

Oracle® Mobile Application Framework Oracle Mobile Application Frameworkでのモバイル・アプリケーションの開発 2.1.1.0.0 E64867-01 |
| 目次

前 | 次 |

# 10 MDSを使用したMAFアプリケーションのアーティファクトのカスタマイズ

この章では、Oracle Metadata Services (MDS)を使用してMAFアプリケーション・レベルのアーティファクトのカスタマイズを実行する方法について説明します。

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

- 第10.1項「MDSカスタマイズをMAFファイルに適用する方法の概要」

- 第10.2項「カスタマイズ・レイヤーの構成」

- 第10.3項「カスタマイズ・クラスの作成」

- 第10.4項「カスタマイズ・クラスの使用」

- 第10.5項「「カスタマイズ開発者」ロールの理解」

- 第10.6項「Webサービス・データ・コントロールとカスタマイズしたアプリケーションのデプロイメントに関する必知事項」

- 第10.7項「リソース・バンドルでのカスタマイズの有効化」

- 第10.8項「カスタマイズを使用したMAFアプリケーションのアップグレード」

## 10.1 MDSカスタマイズをMAFファイルに適用する方法の概要

Oracle Metadata Services (MDS)を使用すると、実行時にアプリケーションの再ブランディング、カスタマイズおよびパーソナライズを行うことができます。MDSでは、単一のアプリケーションを様々な産業、場所またはユーザー・グループに適応させることができます。後者の場合、たとえば、MDSを使用して、ユーザー・グループまたはユーザー職責にあわせてルック・アンド・フィールを調整できます。

カスタマイズしたアプリケーションは、ベース・アプリケーションとカスタマイズの1つ以上のレイヤーで構成されます。1つのアプリケーションで複数のカスタマイズ・レイヤーを使用でき、各レイヤーでは複数のレイヤー値を使用できます。これらのレイヤー値を、指定の優先順位に従ってベース・メタデータの最上位に適用できます。MDSでは、これらのカスタマイズをMDSリポジトリに格納し、実行時に取得します。MDSは、作成されたカスタマイズを別のMDSリポジトリに保存するため、ベース・アプリケーションは変更されません。メタデータ・サービス・リポジトリの構成の詳細は、『Oracle Fusion Middleware管理者ガイド』のOracle Metadata Repositoryの管理に関する項を参照してください。

MDSでは、次の2つのカスタマイズ・パターンを使用できます。

- シード・カスタマイズ: シード・カスタマイズとは、実行時に適用されるカスタマイズ・レイヤーを定義して、汎用アプリケーションを特定のグループ(特定の産業やサイトなど)に適応させます。これらのシード・カスタマイズはデプロイされたアプリケーションの一部として存在し、特定のデプロイの存続期間中保持されます。

- ユーザー・カスタマイズ(変更永続性): エンド・ユーザーは実行時に個々のプリファレンス(表にどの列を表示するかなどの選択が可能)にあわせてアプリケーションのコンテンツをパーソナライズできます。これらの変更はユーザーのセッション間で保持され、ユーザーがアプリケーションにアクセスするたびに一貫して表示されます。

MDSを使用して、MAFアプリケーションの次のアーティファクトをカスタマイズできます。

- `maf-feature.xml`ファイル

- `maf-skins.xml`ファイル

- `maf-application.xml`ファイル

- `maf-config.xml`ファイル

- MAF AMXファイルおよびメタデータ・ファイル(第18章「MAF AMXアプリケーション機能アーティファクトのカスタマイズ」を参照)

MDSを使用してMAFアプリケーションをカスタマイズするには、次を実行します。

1. 1つ以上のグローバルまたはアプリケーション固有のカスタマイズ・レイヤーを定義します。詳細は、第10.2項「カスタマイズ・レイヤーの構成」を参照してください。

2. MDSでベース・アプリケーションに適用するカスタマイズの決定に使用するカスタマイズ・クラスを作成します。各カスタマイズ・クラスは、ベース・カスタマイズ・レイヤーを定義します。詳細は、第10.3項「カスタマイズ・クラスの作成」を参照してください。

3. カスタマイズ・クラス(`.java`ファイル)をJARファイルとしてパッケージ化した後、そのJARファイルをMAFアプリケーションのどちらかのプロジェクトに追加することにより、JDeveloperデザインタイムがカスタマイズにアクセスできるようにします。詳細は、第10.4項「カスタマイズ・クラスの使用」を参照してください。

4. `adf-config.xml`ファイルの`cust-config`セクションにカスタマイズ・クラスを追加して、優先順位に従ってカスタマイズ・クラスを登録します。

5. 「カスタマイズ開発者」ロールでJDeveloperを起動するか、そのロールに切り替えます。詳細は、第10.5項「「カスタマイズ開発者」ロールの理解」を参照してください。

6. ファイルに必要な変更を加えます。変更はMDSにより、ViewControllerプロジェクトの`mdssys`ディレクトリに記録されます。

7. 「カスタマイズ・コンテキスト」ウィンドウからカスタマイズ・レイヤーを選択します(図10-1を参照)。

   図10-1 カスタマイズ・レイヤーの選択(ヒント・レイヤー)

   注意: 「カスタマイズ開発者」ロールで作業する際、「カスタマイズ・コンテキスト」ウィンドウで選択したレイヤーとレイヤー値をヒント・レイヤーと呼びます。「カスタマイズ開発者」ロールで作業中に行った変更は、このレイヤーにのみ適用されます。

8. アプリケーションを、デバイス、エミュレータにデプロイするか、プラットフォーム固有のアプリケーション・パッケージとしてデプロイします。カスタマイズしたアプリケーションをデプロイするには、次のように「カスタマイズ開発者」ロールを使用する必要があります。

   1. 「カスタマイズ開発者」ロールで、アプリケーションを起動します。

   2. 「カスタマイズ・コンテキスト」ウィンドウ(図10-1)で、カスタマイズを実装するレイヤーと値を選択します。

   3. デプロイメント・オプションから選択します(「アプリケーション」→「デプロイ」を選択し、デプロイメント・プロファイルを選択してアクセスします)。詳細は、第27章「MAFアプリケーションのデプロイ」を参照してください。

   4. 各カスタマイズ・コンテキストに対して別のデプロイメントを実行します。

   デプロイメント時に、ベース・ファイルおよびデルタ・ファイルがマージされ、実行時のアプリケーションのカスタマイズ・バージョンが作成されます。デプロイされたアプリケーションには、MDSの依存性はありません。

   ヒント: カスタマイズしたアプリケーションをMAFアプリケーション・アーカイブ(`.maa`)ファイルとしてデプロイして、このファイルをアプリケーションにインポートし、別のカスタマイズを実行したり、アップグレードすることもできます。`.maa`ファイルに含まれるデルタ・ファイルは、デプロイメント後にベース・ファイルとマージされます。詳細は、第10.8項「カスタマイズを使用したMAFアプリケーションのアップグレード」を参照してください。

   カスタマイズ・プロセスが完了すると、JDeveloperにより該当するカスタマイズ用のメタデータ・ファイルとこれらを格納するサブパッケージが作成されます。メタデータ・ファイルにはカスタマイズしたオブジェクトのカスタマイズが含まれ、これらは実行時にベース・メタデータに適用されます。JDeveloperでは、新しいメタデータ・ファイルにオブジェクトのベース・ファイルと同じ名前が付けられますが、`.xml`拡張子が追加されます(`図10-2`のmaf-feature.xml.xmlを参照)。

   図10-2 maf-feature.xmlメタデータ・ファイル

## 10.2 カスタマイズ・レイヤーの構成

アプリケーションをカスタマイズするには、JDeveloperで認識できるように、`CustomizationLayerValues.xml`ファイルでカスタマイズ・レイヤーとその値を指定する必要があります。

カスタマイズ可能なアプリケーションを「カスタマイズ開発者」ロールで開くと、JDeveloperにより`adf-config.xml`ファイルが読み取られ、使用するカスタマイズ・クラスと優先順位が判別されます。また、`CustomizationLayerValues.xml`ファイルも読み取られ、「カスタマイズ・コンテキスト」ウィンドウで使用可能にするレイヤー値が判別されます。`CustomizationLayerValues.xml`ファイルで定義されたレイヤー値がカスタマイズ・クラス(`adf-config.xml`ファイルにリストされている)で定義されていない場合、これらは「カスタマイズ・コンテキスト」ウィンドウに表示されません。

したがって、`CustomizationLayerValues.xml`ファイルにすべてのカスタマイズ・プロジェクトの包括的なレイヤー値リストを含めて、現在のアプリケーションに適したもののみを「カスタマイズ・コンテキスト」ウィンドウに表示できます。逆に、MAFアプリケーションの包括的なカスタマイズ・クラスのリストを`adf-config.xml`ファイルに含めて、作業するレイヤー値のサブセットのみを`CustomizationLayerValues.xml`ファイルに含めることもできます。

注意: デザインタイムには、JDeveloperは`CustomizationLayerValues.xml`ファイルからカスタマイズ・レイヤー値を取得します。ただし、ランタイムには、レイヤー値はカスタマイズ・クラスから取得されます。

`CustomizationLayerValues.xml`ファイルに入力するレイヤー名およびレイヤー値は、カスタマイズ・クラスで指定されたものと一致する必要があります。例10-1にサンプルの`CustomizationLayerValues.xml`ファイルの内容を示します。

例10-1 CustomizationLayerValues.xmlで定義されたレイヤーとレイヤー値

    <cust-layers  xmlns="http://xmlns.oracle.com/mds/dt">
       <cust-layer name="industry" id-prefix="i">
          <cust-layer-value value="financial"
                            display-name="Financial"
                            id-prefix="f"/>
          <cust-layer-value value="healthcare"
                            display-name="Healthcare"
                            id-prefix="h"/>
       </cust-layer>
       <cust-layer name="site" id-prefix="s">
          <cust-layer-value value="headquarters"
                            display-name="HQ"
                            id-prefix="hq"/>
          <cust-layer-value value="remoteoffices"
                            display-name="Remote"
                            id-prefix="rm"/>
       </cust-layer>
    </cust-layers>

各レイヤーとレイヤー値に、`id-prefix`トークンを追加できます。これにより`id`の一意性を確保し、カスタマイズを正確に適用できます。カスタマイズ中に新規要素を追加すると、(選択したヒント・レイヤーで決定された)レイヤーとレイヤー値の`id-prefix`が要素の自動生成識別子に追加され、カスタマイズ・メタデータ・ファイルで新たに追加された要素の`id`が作成されます。前述の例では、siteレイヤーに`s`という`id-prefix`が付けられ、headquartersレイヤー値に`hq`という`id-prefix`が付けられています。 したがって、ヒント・レイヤーとして`site/headquarters`を選択して要素を追加すると、その要素の`id`はメタデータ・カスタマイズ・ファイルで`shqel`に設定されます。

各レイヤー値に`display-name`トークンを追加して、レイヤー値に人間が判読可能な名前を指定することもできます。「カスタマイズ開発者」ロールで作業する際、そのレイヤー値の`display-name`トークンの値が「カスタマイズ・コンテキスト」ウィンドウに表示されます。

レイヤーごとに、カスタマイズ・レイヤーに対する値セットのサイズを定義する`value-set-size`トークンを、オプションで設定できます。これは、たとえば、設計時にアプリケーション固有の`CustomizationLayerValues.xml`ファイルを使用する場合などに役立ちます。`value-set-size`を`no_values`に設定することで、デザインタイムにランタイムのみのレイヤーを除外できます。

    <cust-layer name="runtime_only_layer" value-set-size="no_values"/>

カスタマイズ・レイヤー値はJDeveloper用にグローバルにまたはアプリケーション固有ファイルで定義できます。アプリケーション固有ファイルを使用する場合、このファイルはグローバル・ファイルより優先されます。JDeveloper用にグローバルにレイヤー値を構成する方法の詳細は、第10.2.1項「レイヤー値をグローバルに構成する方法」を参照してください。アプリケーション固有のレイヤー値を構成する方法の詳細は、第10.2.2.1項「Studio開発者ロールの使用方法」を参照してください。

### 10.2.1 レイヤー値をグローバルに構成する方法

始める前に

- 第10.3項「カスタマイズ・クラスの作成」の説明に従って、カスタマイズ・クラスを作成します。

- 第10.4項「カスタマイズ・クラスの使用」の説明に従って、クラスをJDeveloperで使用できるようにします。

JDeveloper用にデザインタイム・カスタマイズ・レイヤー値をグローバルに構成するには:

1. JDeveloperインストール・ディレクトリの`jdev`サブディレクトリにある`CustomizationLayerValues.xml`ファイル(`jdev_install\jdev\CustomizationLayerValues.xml`)を開きます。

2. 各レイヤーに、`例10-1「CustomizationLayerValues.xmlで定義されているレイヤーおよびレイヤー値」`に示すとおりにcust-layer要素を入力します。

3. 各レイヤー値に、`例10-1「CustomizationLayerValues.xmlで定義されているレイヤーおよびレイヤー値」`に示すとおりにcust-layer-value要素を入力します。

4. `CustomizationLayerValues.xml`ファイルを保存して閉じます。

5. グローバルな`CustomizationLayerValues.xml`ファイルに変更を加えたら、JDeveloperを再起動します。

### 10.2.2 アプリケーションレベルのレイヤー値の構成方法

アプリケーションのレイヤー値を構成する場合、Studio開発者ロール(第10.2.2.1項「Studio開発者ロールの使用方法」を参照)または「カスタマイズ開発者」ロール(第10.2.2.2項「「カスタマイズ開発者」ロールの使用方法」を参照)のいずれかを使用できます。アプリケーション固有の`CustomizationLayerValues.xml`ファイルを構成する場合、レイヤー値を作成および変更できますが、追加のカスタマイズ・レイヤーを作成できません。アプリケーション固有のレイヤー値に対して行った変更を適用するためにJDeveloperを再起動する必要はありません。

アプリケーション固有のCustomizationLayerValues.xmlファイルを作成すると、JDeveloperはこのファイルをアプリケーション・レベルのディレクトリに格納します(`workspace-directory\.mds\dt\customizationLayerValues\CustomizationLayerValues.xml`など)。このファイルは、「アプリケーション」ウィンドウの「アプリケーション・リソース」ウィンドウのMDS DTノードの下にあります。

#### 10.2.2.1 Studio開発者ロールの使用方法

次に、Studio開発者ロールで特定アプリケーションの`CustomizationLayerValues.xml`ファイルを構成する手順について説明します。

始める前に

- 第10.3項「カスタマイズ・クラスの作成」の説明に従って、カスタマイズ・クラスを作成します。

- 第10.4項「カスタマイズ・クラスの使用」の説明に従って、クラスをJDeveloperで使用できるようにします。

Studio開発者ロールからワークスペース・レベルでデザインタイム・カスタマイズ・レイヤー値を構成するには:

1. 「アプリケーション・リソース」ウィンドウで、「ディスクリプタ」→「ADF META-INF」ノードを開き、adf-config.xmlをダブルクリックします。

2. 概要エディタで、「MDS構成」ナビゲーション・タブをクリックします。

3. カスタマイズ・クラスの表の下の「MDS構成」ページで、「デザインタイム・カスタマイズ・レイヤー値の構成」をクリックして、ワークスペース・レベルの`CustomizationLayerValues.xml`ファイルをソース・エディタで開きます。

   注意: オーバーライド・ファイルが存在しない場合、JDeveloperは、確認ダイアログを表示します。「はい」をクリックして、グローバル・ファイルのコピーを作成して開きます。

4. このファイルで、第10.2項「カスタマイズ・レイヤーの構成方法」の説明に従って、必要なレイヤー値を指定します。

5. 変更を保存します。

#### 10.2.2.2 「カスタマイズ開発者」ロールの使用方法

次に、「カスタマイズ開発者」ロールで特定アプリケーションの`CustomizationLayerValues.xml`ファイルを構成する手順について説明します。

始める前に

- 第10.3項「カスタマイズ・クラスの作成」の説明に従って、カスタマイズ・クラスを作成します。

- 第10.4項「カスタマイズ・クラスの使用」の説明に従って、クラスをJDeveloperで使用できるようにします。

「カスタマイズ開発者」ロールからワークスペース・レベルでデザインタイム・カスタマイズ・レイヤー値を構成するには:

1. 「カスタマイズ・コンテキスト」ウィンドウで、「アプリケーション・レイヤー値の構成」をクリックし、`CustomizationLayerValues.xml`ファイルをソース・エディタで開きます。

   注意: オーバーライド・ファイルが存在しない場合、JDeveloperは、確認ダイアログを表示します。「はい」をクリックして、グローバル・ファイルのコピーを作成して開きます。

2. このファイルで、第10.2項「カスタマイズ・レイヤーの構成方法」の説明に従って、必要なレイヤー値を指定します。

3. 変更を保存します。

「カスタマイズ開発者」ロールの間にアプリケーション固有の`CustomizationLayerValues.xml`ファイルに対して変更を行った後、「カスタマイズ・コンテキスト」ウィンドウで選択したヒント・レイヤーが選択解除されます。必要なヒント・レイヤーを選択できます。

## 10.3 カスタマイズ・クラスの作成

カスタマイズ・クラスは`oracle.mds.cust.CustomizationClass`を拡張するPOJOクラスです。現在のコンテキストが評価されてStringの結果が戻されます。このStringの結果を使用してカスタマイズ・レイヤーが検索されます。

カスタマイズ・クラスによって、次の情報が提供されます。

- レイヤー名を表す名前。

- レイヤーで作成されたオブジェクトのIDPrefix。カスタマイズ・レイヤーで新しいオブジェクトを作成する場合、一意のIDが必要です。オブジェクトの自動生成IDにIDPrefixが追加されて、新たに追加されたオブジェクトのIDが作成されます。異なるカスタマイズ・レイヤーで作成されたオブジェクトに一意のIDを指定するために、各レイヤーに一意のIDPrefixを指定する必要があります。

- カスタマイズ・クラスによって定義されたレイヤーのキャッシュ・ヒント(CacheHint)。MAFでは、キャッシュ・ヒントによって静的なカスタマイズ・レイヤーが定義され、`getCacheHint`メソッドは常に`ALL_USERS`を返し、これは特定のデプロイメントに対しカスタマイズがグローバルに(無条件で)適用されることを意味します。

注意: カスタマイズ・クラスは頻繁に実行されることが多いため(レイヤー名とレイヤー値を取得するために、アクセスされるドキュメントごとに1回)、効率性を確保するようにしてください。

カスタマイズを使用して、特定の業種ドメインにあわせてMAFアプリケーションを調整できます(垂直統合)。このようなドメインはそれぞれカスタマイズ・レイヤーを表しており、カスタマイズ・クラスを使用して示されます。

静的なカスタマイズには、アプリケーションのすべての実行に適用されるレイヤー値が1つのみあります。静的なカスタマイズでは、アプリケーションを実行するすべてのユーザーでカスタマイズの値が同じです。

MAFアプリケーションで使用されるカスタマイズ・クラスでは、`getCacheHint`メソッドは常に`ALL_USERS`を返し、これはカスタマイズ・レイヤーが常に静的であることを意味します。

カスタマイズ・クラスの実装方法によっては、すべてのオブジェクトが静的なカスタマイズ・レイヤーを持つことができます。

カスタマイズするMAFアプリケーション内にカスタマイズ・ファイルを作成しないでください。かわりに、カスタマイズ・クラスに対して別のJavaアプリケーションを作成します。Javaクラスの作成が完了した後で、カスタマイズするMAFアプリケーションにそのクラスをインポートします。

カスタマイズ・クラスを作成するには:

1. Javaアプリケーションを作成します。

2. 「ファイル」→「新規」→「プロジェクト」をクリックします。

3. 「新規ギャラリ」で、「Javaアプリケーション・プロジェクト」を選択し、ウィザードを完了します。

4. 「アプリケーション」ウィンドウで、「Javaアプリケーション・プロジェクト」を右クリックして、「プロジェクト・プロパティ」を選択します。

5. 「プロジェクト・プロパティ」ダイアログで、「ライブラリとクラスパス」をクリックしてから「ライブラリの追加」を選択します。

6. 「ライブラリの追加」ダイアログで、MDSランタイムを選択し、「OK」をクリックします。「OK」をクリックして、「プロジェクト・プロパティ」ダイアログを閉じます。

7. 「アプリケーション」ウィンドウで、「Javaアプリケーション・プロジェクト」を右クリックし、「新」→「Javaクラス」を選択します。

8. 「Javaクラスの作成」ダイアログで、クラスの名前およびパッケージを入力します。

9. 「拡張」フィールドで、クラス階層を参照し、`oracle.mds.cust.CustomizationClass`を取得してから(図10-3を参照)、「OK」をクリックします。

   注意: 「抽象メソッドの実装」(デフォルトの設定)を「Javaクラスの作成」ダイアログで選択する必要があります。

   図10-3 カスタマイズ・クラスの作成

10. スタブ・ファイルを更新します。例10-2は、カスタマイズ・クラスを示しています。

    例10-2 カスタマイズ・クラス

        package mobile;
        import java.io.IOException;
        import java.io.InputStream;
        import java.util.Properties;
        import oracle.mds.core.MetadataObject;
        import oracle.mds.core.RestrictedSession;
        import oracle.mds.cust.CacheHint;
        import oracle.mds.cust.CustomizationClass;

        public class SiteCC extends CustomizationClass {
           private static final String DEFAULT_LAYER_NAME = "site";
           private String mLayerName = DEFAULT_LAYER_NAME;

           public SiteCC() {}

           public SiteCC (String layerName) {
              mLayerName = layerName;
           }

           public CacheHint getCacheHint() {
              return CacheHint.ALL_USERS;
           }

           public String getName() {
              return mLayerName;
           }

           public String[] getValue(RestrictedSession restrictedSession, MetadataObject metadataObject) {
              // This needs to return te site value at runtime.
              // For now, it's always null
              Properties properties = new Properties();
              String configuredValue = null;
              Class clazz = SiteCC.class;
              InputStream is  = clazz.getResourceAsStream("/customization.properties");

              if (is != null){
                 try {
                    properties.load(is);
                    String propValue = properties.getProperty(mLayerName);
                    if (propValue != null){
                       configuredValue = propValue;
                    }
                 }
                 catch (IOException e) {
                    e.printStackTrace();
                 }
              }

              return new String[] {configuredValue};
           }
        }

11. Javaアプリケーション・プロジェクトを再ビルドします。

## 10.4 カスタマイズ・クラスの使用

カスタマイズ・クラスを作成後、これらをデザインタイムに「カスタマイズ開発者」ロールで、およびランタイムにアプリケーションで使用できます。アプリケーションまたはJDeveloperで使用するには、クラスを適切にパッケージ化する必要があります。

カスタマイズ・クラスは再利用可能コンポーネントであるため、別個のプロジェクトを作成してこれにカスタマイズ・クラスを含めて、独自のJARファイルにパッケージ化できます。その後、使用するアプリケーションにJARをインポートし、カスタマイズ・クラスをJDeveloperで使用できます。

最初に、カスタマイズ・クラスをJARファイルとしてパッケージ化し、このクラスをMAFアプリケーションに登録する必要があります。カスタマイズ・クラスおよび関連するアーティファクトをJARファイルにパッケージ化するには、「デプロイメント・プロファイルの作成」ウィザードを使用してデプロイメント・プロファイルを作成する必要があります。詳細は、第27.2.1項「自動的に生成されるデプロイメント・プロファイルについて」を参照してください。

JARにカスタマイズ・クラスを追加する手順:

1. 「アプリケーション」ウィンドウで、「Javaアプリケーション・プロジェクト」を右クリックし、「新」→「ギャラリから」を選択します。

2. 「新規ギャラリ」で、「一般」を展開し、「デプロイメント・プロファイル」、「JARファイル」の順に選択して、「OK」をクリックします。

   ヒント: 「カテゴリ」ツリーに「デプロイメント・プロファイル」ノードが表示されない場合、「すべての機能」タブをクリックします。

3. 「デプロイメント・プロファイルの作成」 -- 「JARファイル」ダイアログで、プロジェクト・デプロイメント・プロファイルの名前(`図10-4`のSiteCCなど)を入力して、「OK」をクリックします。

   図10-4 カスタマイズ・クラスのデプロイメント・プロファイルの作成

4. 「JARデプロイメント・プロファイルのプロパティの編集」ダイアログで、「JARオプション」を選択します。

5. 必要に応じて、JARファイルの場所を入力します。または、デフォルトの場所を使用します。

6. ファイル・グループ→「プロジェクトの出力」→「フィルタ」を開き、JARに含むように選択できるファイルを一覧表示します。

7. 「フィルタ」ページの「ファイル」タブで、JARファイルに追加するカスタマイズ・クラスを選択します(図10-5を参照)。

   図10-5 カスタマイズ・クラスをJARファイルに含める

8. 「OK」をクリックして、「JARデプロイメント・プロファイルのプロパティの編集」ダイアログを終了します。

9. 「OK」を再度クリックして、プロジェクト・プロパティのダイアログを終了します。

10. 「アプリケーション」ウィンドウで、「Javaアプリケーション・プロジェクト」を右クリックし、「デプロイメント・プロファイル」を選択します。「デプロイメント・アクション」ページ(図10-6を参照)では、「JARにデプロイ」がデフォルトで選択されています。「次へ」をクリックします。

    図10-6 カスタマイズ・クラスのJARファイルへのデプロイ

11. JARファイルの出力場所の確認メッセージを確認します。「OK」をクリックします。

    図10-7「サマリー」ページ(JARファイルの出力場所を示す)

    「ログ・ファイル」ウィンドウ(図10-8)では、デプロイメントのステータスが表示されます。

    図10-8 デプロイメント・ログ

次の手順を使用してアプリケーションでカスタマイズ・クラスを表示できるようにしてから、カスタマイズ・クラスを`adf-config.xml`ファイルの`cust-config`セクションに追加します。

注意: 使用するアプリケーションのデータ・モデル・プロジェクトでカスタマイズ・クラスを作成した場合、次の手順は不要です。

始める前に

- 外部プロジェクトにカスタマイズ・クラスを作成します。

- カスタマイズ・クラスを含むJARファイルを作成します。

- Studio開発者ロールを使用してJDeveloperを起動し、カスタマイズするアプリケーションを開きます。

カスタマイズ・クラスをMAFアプリケーションに登録する手順:

1. 「アプリケーション」ウィンドウで、「アプリケーション・メニュー」アイコンをクリックして、「アプリケーションのプロパティ」を選択します。

2. 「アプリケーションのプロパティ」ダイアログで、「ライブラリとクラスパス」を選択し、「JAR/ディレクトリの追加」をクリックします。

3. 「アーカイブまたはディレクトリの追加」ダイアログで、カスタマイズ・クラスを含む作成済JARファイルを選択して、「開く」をクリックします。

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

次に、カスタマイズ・クラスを`adf-config.xml`ファイルに追加します。アプリケーションの`adf-config.xml`ファイルでは、`mds-config`セクションで適切な`cust-config`要素が指定されている必要があります。クライアントは`cust-config`要素を使用して、順序付けされ、名前が付けられたカスタマイズ・クラスのリストを定義できます。`adf-config.xml`ファイルの概要エディタを使用して、カスタマイズ・クラスを追加します(図10-9を参照)。

`adf-config.xml`ファイルでカスタマイズ・クラスを識別するには:

1. 「アプリケーション・リソース」ウィンドウで、「ディスクリプタ」→「ADF META-INF」ノードを開き、adf-config.xmlをダブルクリックします。

2. 概要エディタで、「MDS」ナビゲーション・タブを選択し、「追加」(+)をクリックします。

3. 「カスタマイズ・クラスの編集」ダイアログで、作成済のカスタマイズ・クラスを検索するか、作成済のカスタマイズ・クラスに移動します。

4. 適切なクラスを選択して、「OK」をクリックします。

5. カスタマイズ・クラスをすべて追加した後、矢印アイコンを使用して適切な順序で配置できます。

図10-9は、2つのカスタマイズ・クラスが追加された`adf-config.xml`ファイルの概要エディタを示しています。

図10-9 adf-config.xmlの概要エディタ

`customization-class`要素の順序により、カスタマイズ・レイヤーの優先順位が指定されます。たとえば、例10-3に示すコードでは、`IndustryCC`クラスは`SiteCC`クラスの前に表示されています。これは、industryレイヤーでのカスタマイズがベース・アプリケーションに適用されてから、siteレイヤーでのカスタマイズが適用されることを示します。

例10-3 adf-config.xmlファイルでのカスタマイズ・クラスの順序

    <adf-config xmlns="http://xmlns.oracle.com/adf/config">
       <adf-mds-config xmlns="http://xmlns.oracle.com/adf/mds/config">
          <mds-config xmlns="http://xmlns.oracle.com/mds/config" version="11.1.1.000">
             <cust-config>
                <match path="/">
                   <customization-class name="com.mycompany.IndustryCC"/>
                   <customization-class name="com.mycompany.SiteCC"/>
                </match>
             </cust-config>
          </mds-config>
       </adf-mds-config>
    </adf-config>

完了したら、JDeveloperでプロジェクトをローカルに実行するためやカスタマイズのために、カスタマイズ・クラスを使用できます。またこれらは、アプリケーションをパッケージ化するときに、EARクラス・パスにパッケージ化されます。

## 10.5 「カスタマイズ開発者」ロールの理解

JDeveloperでは、「カスタマイズ開発者」ロールを使用して、プロジェクトのメタデータをカスタマイズします。カスタマイズ機能は、このロールでのみ使用できます。「カスタマイズ開発者」ロールでは、次の作業を実行できます。

- カスタマイズの作成および更新

- カスタマイズしたアプリケーションのヒント・レイヤーの選択および編集

- 既存のカスタマイズの削除

「カスタマイズ開発者」ロールでJDeveloperを使用する場合、ソース・エディタは読取り専用になり、次のJDeveloperの機能が無効になります。

- ワークスペースの移行

- アプリケーションおよびIDE接続の作成、削除および変更「カスタマイズ開発者」ロールでアプリケーションを開く前に、デフォルト・ロールで接続を構成する必要があります。

「カスタマイズ開発者」ロールでアプリケーションを使用する場合、新規オブジェクトやファイルは作成できず、カスタマイズ不能オブジェクトは変更できません。また、Javaクラス、リソース・バンドル、セキュリティ・ポリシー、デプロイメント・ディスクリプタ、構成ファイルなどのカスタマイズ不能ファイルの編集もできません。

注意: 「カスタマイズ開発者」ロールで作業している際、カスタマイズ不能ファイルはロック・アイコンで示されます。

また、プロジェクト設定も変更できないので、カスタマイズ不能ファイルの変更が必要になる場合には、カスタマイズ可能ファイルのリファクタや変更もできません。

詳細は、『Oracle Fusion Middleware Oracle JDeveloperユーザーズ・ガイド』のJDeveloperロールの操作に関する項を参照してください。

### 10.5.1 JDeveloperでの「カスタマイズ開発者」ロールへの切替え

「カスタマイズ開発者」ロールでは、JDeveloperのカスタマイズ機能を使用できます。このロールで作業するには、JDeveloperの起動時に選択するか、JDeveloperがすでに実行されている場合は「ロールの切替え」メニューで「カスタマイズ開発者」ロールに切り替えます。

JDeveloperで「カスタマイズ開発者」ロールに切り替えるには:

JDeveloperのメイン・メニューで「ツール」→「ロールの切替え」→「カスタマイズ開発者」の順に選択します。

オプションで、「ツール」→「ロールの切替え」→「起動時にロール選択を常に要求」メニューを切り替え、JDeveloper起動時にロールを選択するかどうかを指定できます。この選択を解除すると、JDeveloperは、最後に閉じたときのロールで起動します。

### 10.5.2 ヒント・レイヤーに関する必知事項

「カスタマイズ開発者」ロールで作業する際、「カスタマイズ・コンテキスト」ウィンドウで選択したレイヤーとレイヤー値の組合せをヒント・レイヤーと呼びます。このレイヤーには、「カスタマイズ開発者」ロールで作業中に行った変更が適用されます。

注意: 「カスタマイズ開発者」ロールで作業している場合、「カスタマイズ・コンテキスト」ウィンドウが表示されない場合は、JDeveloperの「ウィンドウ」メニューからアクセスできます。

JDeveloperのエディタに表示されるメタデータは、ベース・メタデータと(`adf-config.xml`で設定された優先順位に従った)ヒント・レイヤーまでのカスタマイズ・レイヤーを組み合せたもので、各レイヤーの値は「カスタマイズ・コンテキスト」ウィンドウで指定したものです。

「カスタマイズ開発者」ロールでの作業時には、アプリケーションのカスタマイズされていない状態も確認できます。「カスタマイズ・コンテキスト」ウィンドウで「カスタマイズなしで表示」が選択されている場合、現在使用しているヒント・レイヤーはありません。したがって、表示されているのはカスタマイズされていない状態です。このビューでは、(「アプリケーション」ウィンドウの)カスタマイズ可能ファイルすべてにロック・アイコンが表示され、これらのファイルが読取り専用であることが示されます。

ヒント・レイヤーで行ったカスタマイズは、「プロパティ」ウィンドウではオレンジのアイコンで示されます。緑のアイコンは、ヒント以外のレイヤーのカスタマイズを示します。プロパティの横にオレンジのアイコンが表示されている場合、そのプロパティのドロップダウン・メニューから「カスタマイズ・アクションの削除」を選択して、そのカスタマイズを削除できます。

## 10.6 Webサービス・データ・コントロールとカスタマイズしたアプリケーションのデプロイメントに関する必知事項

WebサービスJava Bean定義(JBD)ファイルは、カスタマイズ・デプロイメントでは作成できないため、カスタマイズ・デプロイメントの実行前に、次のように非カスタマイズ・デプロイメントを実行してこれらのファイルを作成する必要があります。

1. Studio開発者ロールで、アプリケーションを起動します。

2. 「ビルド」→「すべてクリーン」を選択し、以前のデプロイメント以降に廃止されている可能性があるWebサービスJDBファイルを削除します。

3. デプロイメント・オプションから選択します(「アプリケーション」→「デプロイ」を選択し、デプロイメント・プロファイルを選択してアクセスします)。詳細は、第27章「MAFアプリケーションのデプロイ」を参照してください。

4. 「カスタマイズ開発者」ロールで、アプリケーションを起動します。

5. 手順3で選択したデプロイメント・プロファイルと同じものを選択すると、カスタマイズ・デプロイメントが、非カスタマイズ・デプロイメントで作成されたJBDファイルにアクセスできるようになります。

## 10.7 リソース・バンドルでのカスタマイズの有効化

リソース・キーのカスタマイズを実装する場合、ベース・リソース・バンドル・ファイルを使用することができないため、追加のリソース・バンドル・ファイルを作成する必要があります。

Studio開発者ロールで、アプリケーションまたはプロジェクト・リソース・バンドルを作成します。作成するバンドルを編集して、リソース・キーの文字列値を定義します。

始める前に

Oracle Fusion Middleware Oracle Application Development FrameworkによるFusion Webアプリケーションの開発の複数のリソース・バンドルの使用方法に関する項を理解しておいてください。

アプリケーション・リソース・バンドルを作成するには:

1. Studio開発者ロールで、「アプリケーション」→「アプリケーションのプロパティ」→「リソース・バンドル」をクリックします。

2. 「リソース・バンドル」ページで、「アプリケーション・バンドル検索」をクリックし、「バンドルの追加」アイコンの右にあるドロップダウン・メニューをクリックして、「アプリケーション・バンドルの作成」を選択します(図10-10を参照)。

   図10-10 アプリケーション・リソース・バンドルの作成

3. 表示された「Xliffファイルの作成」ダイアログで、リソース・バンドルの名前を入力し、「OK」をクリックします。

4. リソース・バンドルを編集します(第6.9項「リソース・バンドル・ファイルの編集」を参照)。

   注意: MAFは、アプリケーション・レベルの「リソース・バンドル」ページではオーバーライドされたプロパティをサポートしていません。

5. 「カスタマイズ開発者」ロールで、「テキスト・リソースの選択」ダイアログを開き、適切な文字列を含むリソース・バンドルから選択します。「カスタマイズ開発者」ロールでは文字列の変更または新しい文字列の作成ができないため、選択したバンドルの文字列から選択することのみが可能です。

   注意: 「カスタマイズ開発者」ロールで、ベース・リソース・バンドルから文字列を選択すると、アプリケーションのアップグレード時に問題が発生する可能性があるため選択しないでください。

プロジェクト・リソース・バンドルを作成するには:

1. Studio開発者ロールで、リソース・バンドルを作成するプロジェクトを右クリックして、「新」→「ギャラリから」→「一般」→「XML」→「XMLローカライゼーション・ファイル(XLIFF)」を選択します。

2. 表示された「Xliffファイルの作成」ダイアログで、リソース・バンドルの名前を入力し、「OK」をクリックします。

3. リソース・バンドルを編集します(第6.9項「リソース・バンドル・ファイルの編集」を参照)。

4. 「リソース・バンドル」ページの「バンドル検索」タブで、プロジェクト(`.jpr`)ファイルを選択してリソース・バンドルを登録します(図10-11を参照)。

   図10-11 リソース・バンドルの選択

   リソース・バンドルを登録すると、「テキスト・リソースの選択」ダイアログに表示されます(図10-12を参照)。

   図10-12 テキスト・リソースのリソース・バンドルの選択

5. 「テキスト・リソースの選択」ダイアログを使用して、次のようにキーを定義します。

   1. 「リソース・バンドル」ドロップダウン・リストからバンドルを選択します。

      ダイアログには、選択したリソース・バンドルで現在定義されている文字列が表示されます。

   2. 新しい文字列を入力して、「保存して選択」をクリックします。

      JDeveloperでは、選択したリソース・バンドルに文字列を書き込みます。

6. 「カスタマイズ開発者」ロールで、「テキスト・リソースの選択」ダイアログを開き、適切な文字列を含むリソース・バンドルから選択します。「カスタマイズ開発者」ロールでは文字列の変更または新しい文字列の作成ができないため、選択したバンドルの文字列から選択することのみが可能です。

   注意: 「カスタマイズ開発者」ロールで、ベース・リソース・バンドルから文字列を選択すると、アプリケーションのアップグレード時に問題が発生する可能性があるため選択しないでください。

## 10.8 カスタマイズを使用したMAFアプリケーションのアップグレード

カスタマイズはベース・アプリケーションとは別に保存されているため、安全にアップグレートができます。カスタマイズは変更を保持するため、これらの変更をアプリケーションの新しいバージョンに適用して、アプリケーションをアップグレードできます。MAFアプリケーション・アーカイブ(`.maa`)ファイルによって、MAFアプリケーションをアップグレードするためのメカニズムが提供されます。`.maa`ファイルからアプリケーションを作成する場合、`.maa`ファイルの更新バージョンを使用してアプリケーションをアップグレードできます。

「アーカイブからモバイル・アプリケーションをアップグレード」ウィザードを使用すると、アップグレードの前に行われたカスタマイズを保持しながら新しいバージンにアプリケーションをアップグレードできます。

始める前に

MAFアプリケーション・アーカイブ(`.maa`)ファイルについて理解しておいてください。詳細は、第27.6項「モバイル・アプリケーション・アーカイブ・ファイルの作成」および第27.7項「署名のないデプロイメント・パッケージの作成」を参照してください。

`.maa`ファイルにパッケージ化され、アップグレードに使用されるアプリケーションのアプリケーションIDが、適用されるアプリケーションと同じであることを確認してください。また、アップグレードの対象となるアプリケーションより新しいバージョン番号である必要があります。

MAFアプリケーションのアップグレード手順:

1. `.maa`ファイルからMAFアプリケーションを作成します。

2. 第10.7項「リソース・バンドルでのカスタマイズの有効化」の説明に従って、MAFアプリケーションにカスタマイズを適用します。

3. 「アプリケーション」をクリックして、アーカイブからモバイル・アプリケーションを選択を選択します。

4. `.maa`ファイルを参照して選択します。`.maa`にパッケージ化されたアプリケーションが、現在のアプリケーションと同じ(または古い)バージョンであったり、異なるアプリケーションIDである場合、ウィザードによりアップグレードは中止されます。

   図10-13 .maaファイルの選択

5. 手動マージが必要なファイルの「サマリー」ページを確認します。図10-14に示すように、MAFでは、`Temp`ディレクトリにアプリケーションの初期バージョン(バージョン1)が保存されます。「サマリー」ページにもログ・ファイルの一時的な場所が表示されます。

   図10-14 アプリケーションのアップグレード情報

6. アップグレードが正常に完了すると、JDeveloperは再起動します。異なるバージョンの構成ファイルに調整が必要な場合、JDeveloperにより通知されます(図10-15を参照)。

   図10-15 手動マージ通知

アップグレード中に、MAFでは、バージョン1のアプリケーションとバージョン2 (アップグレードしたバージョンのアプリケーション)の両方に対してカスタマイズできないファイル・セットがコピーされます。これらのファイルには、`connections.xml`ファイル、`adf-config.xml`ファイルなどがあります。MAFによって、バージョン1とバージョン2の`connections.xml`ファイルと`adf-config.xml`ファイルに差異が検出されると、これらのファイルの両方のコピーを保持し、マージ・ログ・ファイルに対してエントリを記述します。バージョン番号がある場合、MAFではファイル名にバージョン番号を追加してバージョン1を区別します。バージョン番号がない場合、MAFでは`_old`をファイル名に追加します(`図10-15`のconnections_old.xmlを参照)。必要に応じて、この差異を新しいバージョンに手動でマージできます。図10-16に示すように、MAFでは、「サマリー」ページに表示された一時的な場所にマージ・ファイル・ログを配置します。MAFでは、ファイルに`workspace name``_``timestamp`という名前を付けます。

図10-16 マージ・ログ・ファイル

### 10.8.1 アプリケーションをアップグレードする場合のJDeveloperでの処理

`Temp`ディレクトリへのバージョン1のコピー、およびバージョン1とバージョン2のアップグレード不可の構成ファイルのコピーの作成に加えて、「アーカイブからモバイル・アプリケーションをアップグレード」ウィザードを使用してアプリケーションをアップグレードする場合、MAFでは次のことも実行します。

- 各プロジェクトのライブラリおよびリソース・バンドル設定を、に保存します。プロジェクト・ファイル名が入力されたマップに保存します。

- ワークスペースのリソース・バンドル設定を保存します。

- 登録したカスタマイズ・クラスを`adf-config.xml`ファイルに保存します。

- バージョン2の`.maa`ファイルを一時ディレクトリにインポートします。

- バージョン1へのアップグレードに使用される`.maa`ファイルからアプリケーションをコピーします。

- バージョン2の各プロジェクト(`.jpr`)ファイルを、登録したリソース・バンドルおよびライブラリ依存マップで更新します。ライブラリの新しいバージョンにより以前のバージョンがオーバーライドされます。ただし、バージョン1で使用されるライブラリと同じ名前を共有している場合、バージョン1ライブラリは変更されません。

- バージョン2のワークスペース(`.jws`)ファイルを、登録したリソース・バンドル設定で更新します。

- バージョン2の`adf-config.xml`ファイルを更新し、カスタマイズ・クラスを登録します。

### 10.8.2 FARのアップグレードに関する必知事項

アプリケーションの作成に使用された元の`.maa`ファイル内にパッケージ化されていないFARファイルがアプリケーションに含まれる場合(または、アプリケーションのアップグレードに使用される`.maa`ファイルに含まれる場合)、FARファイルを個別にアップグレードする必要があります。たとえば、`.maa`ファイルからアプリケーションを作成し、FARファイルを追加してカスタマイズを実行できます。「リソース」ウィンドウから更新したFARを追加することによって新しいバージョンのFARを使用するために、アプリケーションをアップグレードできます(第8.2項「MAFアプリケーションでのFARコンテンツの使用方法」を参照)。