アプリケーション・モジュールは、データ・モデルの論理コンテナと、アプリケーション・タスクのサポートに必要なオプションのプログラミング・ロジックを提供します。データ・モデルには、アプリケーションで使用されるビュー・オブジェクトだけでなく、クライアントで必要なマスター/ディテールの自動整合を行うビュー・リンクも含まれます。
新規または既存のビュー・オブジェクトを結合して別の構成にし、新規のデータ・ビューを操作する場合は、新規のアプリケーション・モジュールを作成し、ビューとそれらの関係をデータ・モデルに追加するほうが簡単です。ただし、既存のデータ・モデルを補強して利用する場合は、アプリケーション・モジュールを拡張します。
一般的に、アプリケーション・モジュールの拡張は、元のデータ・モデルでは何も関連付けられていないが、アプリケーションのコンテキストにおいては有益な新規の最上位レベルのビューを追加する場合に行います。アプリケーション・モジュールの拡張は、他に次のような場合でも行われます。
アプリケーション・モジュールに対して異なる初期化コードを実装する場合
データ・モデルを拡張し、新規のビュー・オブジェクトまたはディテール・ビュー・オブジェクト(またはその両方)を含める場合
アプリケーション・モジュールに新規のサービスまたは機能を追加する場合
拡張アプリケーション・モジュールは、元のアプリケーション・モジュールと同じデータ・モデルおよびプログラミング・ロジックを継承します。拡張アプリケーション・モジュールを使用することにより、既存のアプリケーションにより提供されるすべてのサービスおよび機能にアクセスできます。新規の最上位レベルのビュー・オブジェクトおよびディテール・ビュー・オブジェクト、ビュー・リンクおよびプログラミング・コードの形式で新規のデータ・ビューを追加することにより、データ・モデルを自由に変更できます。アプリケーション・モジュールを拡張する際の制限事項は、元のデータ・モデルの機能を削除できないということのみです。
例として、データ・モデルに加えることができる変更を次の図に示します。この図の記号VOは、元のデータ・モデルに属すビュー・オブジェクトを表します。記号VOは、追加されたビュー・オブジェクトを表します。ビュー・オブジェクトを追加し、ビュー・オブジェクト間に新規のリンク(赤色の部分)を作成できます。元のデータ・モデル(黒色の部分)は変更されていないことに注意してください。
拡張アプリケーション・モジュールを作成するには、元のアプリケーション・モジュールに次のような変更を加えます。
新規のビュー・オブジェクトまたは拡張ビュー・オブジェクトを最上位レベルのビューまたはディテール・ビューとして作成し、これらのオブジェクトの間にリンクを作成し、異なるデータ・スライスを返すようオブジェクトをデータ・モデルに追加します。
データ・モデル内の異なる構成でリンクされている既存のビュー・オブジェクトを使用します。
元のアプリケーション・モジュールの実装ファイルでは隠されていたか存在しなかった新規のアプリケーション・モジュール・メソッド、ビュー・オブジェクト・メソッドまたはビュー行メソッドを公開します。
カスタマイズしたアプリケーション・モジュールを含めるパッケージを右クリックし、「新規アプリケーション・モジュール」を選択します。アプリケーション・モジュール・ウィザードが開きます。
「名前」ページで、拡張アプリケーション・モジュールの名前(NewModuleEx
)を「名前」フィールドに入力します。柔軟性を高めるために、このページでは、「名前」、「パッケージ」および「拡張アプリケーション・モジュール」フィールドが編集可能になっています。
「拡張アプリケーション・モジュール」フィールドの隣にある「参照」ボタンをクリックし、「親」ダイアログを開きます。元のコンポーネントのパッケージを開き、拡張するアプリケーション・モジュールの名前を選択します。「OK」をクリックし、ダイアログを閉じます。「名前」ページで「次へ」をクリックし、「データ・モデル」ページに進みます。
「データ・モデル」ページで、既存のデータ・モデルに追加する最上位レベルのビュー・オブジェクトおよびディテール・ビュー・オブジェクトを選択します。データ・モデルにオブジェクトを追加する方法の詳細は、「アプリケーション・モジュールのデータ・モデルでのビュー・オブジェクトおよびビュー・リンクの指定」を参照してください。「次へ」をクリックし、「Java」ページに進みます。
「Java」ページで、「Javaファイルの生成」チェックボックスをチェックし、アプリケーション・モジュールの動作をカスタマイズするために編集可能なJavaファイルを生成します。通常、クライアント層に公開するメソッドはこのファイルに追加します。
このチェックボックスのチェックを外した場合は、XMLファイルのみが生成されます。「終了」をクリックし、拡張アプリケーション・モジュールを生成します。
JDeveloperにより、ナビゲータ・ウィンドウ内に、拡張アプリケーション・モジュールの .xml
ファイルと、オプションで .java
ファイルが生成されます。
NewModuleEx
アプリケーション・モジュールは、ソース・コードを変更せずに、Package27Module
アプリケーション・モジュールの機能を拡張して作成されています。JDeveloperによりNewModuleEx
の .xml
ファイルと、オプションで .java
ファイルが生成され、このファイルはパッケージ化されたアプリケーション内にシームレスに統合できます。これで、NewModuleEx
アプリケーション・モジュールを実行時に使用できるようになります。アプリケーション・モジュール・メソッドの追加など、.java
ファイルに機能を追加し、クライアントで使用できるようそれをエクスポートする場合もあります。その場合、元のアプリケーション内のPackage27Module
のすべてのインスタンスのかわりにこのアプリケーション・モジュールを使用できます。
拡張アプリケーション・モジュールのXMLファイルには、そのデータ・モデルに追加されたビュー・オブジェクトとビュー・リンクしかリスト表示されないので注意してください。次に、NewModuleEx.xml
のコード・サンプルを示します。
1 <?xml version="1.0" encoding='WINDOWS-1252'?>
2 <!DOCTYPE AppModule SYSTEM "jbo_03_01.dtd">
3 <AppModule
4 Name="NewModuleEx"
5 Extends="package27.Package27Module"
6 ComponentClass="Extender.NewModuleExImpl" >
7 <DesignTime>
8 <Attr Name="_isCodegen" Value="true" />
9 <Attr Name="_deployType" Value="0" />
10 <Attr Name="_exportName" Value="NewModuleEx" />
11 </DesignTime>
12 <ViewUsage
13 Name="NewDeptViewEx"
14 ViewObjectName="Extender.NewDeptViewEx" >
15 </ViewUsage>
16 <ViewUsage
17 Name="NewEmpViewEx"
18 ViewObjectName="Extender.NewEmpViewEx" >
19 </ViewUsage>
20 <ViewLinkUsage
21 Name="NewViewLinkEx"
22 ViewLinkObjectName="Extender.NewViewLinkEx"
23 SrcViewUsageName="Extender.NewModuleEx.NewDeptViewEx"
24 DstViewUsageName="Extender.NewModuleEx.NewEmpViewEx" >
25 <DesignTime>
26 <Attr Name="_isCodegen" Value="true" />
27 </DesignTime>
28 </ViewLinkUsage>
29 </AppModule>
4から6行: Name
フォールドおよびExtends
フィールドは、拡張アプリケーション・モジュールの名前(NewModuleEx
)および拡張する元のアプリケーション・モジュールの名前(package27.Package27Module
)を示します。ComponentClass
フィールドは、拡張アプリケーション・モジュールの実装ファイル(*Impl
ファイル)の名前を示します。
12から14、17、18行: ViewUsage
タグ内のName
フィールドおよびViewObjectName
フィールドは、拡張アプリケーション・モジュールのデータ・モデルに追加されたビュー・オブジェクトの名前および完全なパッケージ名を示します。
20から24行: ViewLinkUsage
タグ内のName
フィールドおよびViewLinkObjectName
フィールドは、拡張ビュー・リンクの名前および完全なパッケージ名を示します。SrcViewUsageName
フィールドおよびDstViewUsageName
フィールドは、ビュー・リンクのリンク元ビュー・オブジェクトおよびリンク先ビュー・オブジェクトの名前を示します。