エンティティ・オブジェクトの拡張

エンタープライズ・アプリケーションを開発し、デプロイした後に、新しい機能または特性の追加が必要になる場合があります。ビジネス・コンポーネントは再利用可能で、既存のコンポーネントをニーズに合せてカスタマイズできます。たとえば、デプロイしたアプリケーションにEMPエンティティ・オブジェクトが含まれている場合、電話番号、勤続年数、年金、および年金の種類に基づいて給与の源泉徴収を計算するためのビジネス・ロジックなどの追加情報に対応するために、この定義の拡張が必要な場合があります。これは、エンティティ・オブジェクトをカスタマイズする1つの例にすぎません。次の場合も、エンティティ・オブジェクトをカスタマイズします。

データベース表の準備

アプリケーションのエンティティ・オブジェクトでデータベース内の表を参照するのと同様に、拡張エンティティ・オブジェクトでも表を参照します。拡張エンティティ・オブジェクトをサポートする表を提供するには、次の2つの方法があります。

または

アプリケーションで、親および拡張エンティティ・オブジェクトの両インスタンスを同時に扱う場合、最も簡単な方法は、各エンティティ・オブジェクトがそれぞれデータベース表を持つことです。この場合には、拡張エンティティ・オブジェクトにデータベース表を提供するには、次の2つの方法があります。

Figure that shows extending an existing entity object then forward generating the    database table, as described in the preceding paragraph.

エンティティ・オブジェクトの拡張

次の例では、前述の2番目の方法(ウィザードを使用してエンティティ・オブジェクトを拡張し、その後で順方向生成を使用してデータベース内に表を作成する方法)を示します。この例では、プロジェクトの作成、オリジナル・コンポーネントのパッケージのインポート、および拡張コンポーネントを定義するためのパッケージの作成が終了しているものとします。

ベンダー(たとえば、オラクル社)が、従業員データを処理するEmpコンポーネントを販売し、Solutions Techという(架空の)会社がそれをカスタマイズするとします。開発者は、次の手順に従って、NewEmpというカスタム・コンポーネントを作成します。

  1. カスタマイズしたエンティティ・オブジェクトを含めるパッケージを右クリックし、「新規エンティティ・オブジェクト」を選択します。エンティティ・オブジェクト・ウィザードが開きます。
  2. 「名前」ページで、新規エンティティ・オブジェクトの名前(NewEmpEx)を「名前」フィールドに入力します。柔軟性を高めるために、このページでは「名前」「パッケージ」「拡張エンティティ」および「スキーマ・オブジェクト」フィールドが編集可能になっていることに注意してください。
  3. 「拡張エンティティ」フィールドの隣にある「参照」ボタンをクリックし、「親」ダイアログを開きます。「親」ダイアログ・ボックスを使用し、NewEmpExの拡張元のエンティティ・オブジェクトを選択します。この場合は、Empを選択して「OK」をクリックします。ベース・オブジェクトはプロジェクトのパッケージにあることに注意してください。
  4. 「次へ」をクリックし、「属性」ページおよび「属性の設定」ページに進みます。これらのページを使用し、NewEmpExのその他の機能を指定します。たとえば、「新規エンティティ属性」ダイアログ(「属性」ページで「新規」をクリックすると、開きます)を使用し、Number型のYearsOfService属性を作成します。既存のエンティティ・オブジェクトの属性に変更を加えている場合は、「表からの新規作成」を使用します。「属性」ページでは、属性のセット全体ではなく、新規またはオーバーライドされた属性のみ表示されることに注意してください。
    これらのページで定義する属性は、XMLのコンポーネント定義NewEmpEx.xmlに格納されます。
  5. オプションで、「Java」ページを使用し、拡張エンティティ・オブジェクトのJavaクラスを生成できます。これにより、ドメイン固有のJavaロジックを追加する機能が提供されます。Javaの継承は、Javaのソース・コードのextendsキーワードを使用し、ウィザードで自動的に行われます。Solutions Techで事前に作成されているビジネス・ロジックをオーバーライドする場合、このファイルを編集できます。
  6. 「終了」をクリックすると、新規NewEmpExエンティティ・オブジェクトが作成されます。フレームワークにより、拡張エンティティ・オブジェクトに対する .javaおよび .xmlファイルが作成されます。
  7. パッケージを右クリックし、「データベース・オブジェクトの作成」を選択します。「データベース・オブジェクトの作成」ダイアログで、NewEmpEx「作成するオブジェクト」側へ移動し、「OK」をクリックします。NewEmpExに対応する表がデータベースに作成されます。

拡張エンティティ・オブジェクトを既存の表から作成

拡張エンティティ・オブジェクトを既存の表から作成する場合は、次のステップに従ってください。

  1. カスタマイズしたエンティティ・オブジェクトを含めるパッケージを右クリックし、「新規エンティティ・オブジェクト」を選択します。エンティティ・オブジェクト・ウィザードが開きます。
  2. 「名前」ページで、新規エンティティ・オブジェクトの名前(NewEmpEx)を「名前」フィールドに入力します。柔軟性を高めるために、このページでは「名前」「パッケージ」「拡張エンティティ」および「スキーマ・オブジェクト」フィールドが編集可能になっていることに注意してください。
  3. 「拡張エンティティ」フィールドの隣にある「参照」ボタンをクリックし、「親」ダイアログを開きます。「親」ダイアログ・ボックスを使用し、NewEmpExの拡張元のエンティティ・オブジェクトを選択します。この場合は、Empを選択して「OK」をクリックします。ベース・オブジェクトはプロジェクトのパッケージにあることに注意してください。
  4. 「名前」ページの「データベース・スキーマ」ドロップダウン・リストで、スキーマ(拡張エンティティ・オブジェクトに基本的な定義を提供するスキーマ・オブジェクトが含まれているスキーマ)の名前を選択します。
  5. エンティティ・オブジェクトとして表すオブジェクトが含まれる表、ビュー、シノニムおよびスナップショットの適切な組合せを選択します。
  6. 「オブジェクトの選択」フィールドで、拡張エンティティ・オブジェクトに基本的な定義を提供するデータベース・オブジェクトの名前を選択します。
  7. オプションで、「Java」ページを使用し、拡張エンティティ・オブジェクトのJavaクラスを生成できます。これにより、ドメイン固有のJavaロジックを追加する機能が提供されます。Javaの継承は、Javaのソース・コードのextendsキーワードを使用し、ウィザードで自動的に行われます。Solutions Techで事前に作成されているビジネス・ロジックをオーバーライドする場合、このファイルを編集できます。
  8. 「終了」をクリックすると、新規NewEmpExエンティティ・オブジェクトが作成されます。フレームワークにより、拡張エンティティ・オブジェクトに対する .javaおよび .xmlファイルが作成されます。

生成された拡張エンティティ・オブジェクト・ファイルの理解

NewEmpExエンティティ・オブジェクトは、ソース・コードを変更せずに、Empエンティティの機能を拡張して作成されます。JDeveloperによりNewEmp.javaファイルと .xmlファイルが作成され、このファイルはパッケージ化されたアプリケーション内にシームレスに統合できます。この時点で、NewEmpExエンティティ・オブジェクトを、実行時に使用できますが、.javaファイルにビジネス・ロジックや検証などの機能の追加が必要な場合があります。その場合、元のアプリケーション内のEmpのすべてのインスタンスのかわりにこのビュー・オブジェクトを使用できます。アプリケーションでEmpのすべてのインスタンスのかわりにNewEmpExを使用する方法の詳細は、「ビジネス・コンポーネントの置換」を参照してください。

NewEmpExエンティティ・オブジェクトのXMLファイルには、元のエンティティ・オブジェクトと、拡張エンティティ・オブジェクトの定義の差異のみが含まれることに注意してください。次に、NewEmpEx.xmlのコード・サンプルを示します。


1   <?xml version="1.0" encoding='WINDOWS-1252'?>
2 <!DOCTYPE Entity SYSTEM "jbo_03_01.dtd">

3 <Entity
4 Name="NewEmpEx"
5 Extends="package27.Emp"
6 DBObjectType="table"
7 DBObjectName="NEWEMPEX"
8 AliasName="NewEmpEx"
9 BindingStyle="Oracle"
10 CodeGenFlag="20"
11 RowClass="Extender.NewEmpExImpl"
12 DefClass="Extender.NewEmpExDefImpl" >
13 <DesignTime>
14 <Attr Name="_isCodegen" Value="true" />
15 <Attr Name="_superClass" Value="package27.EmpImpl" />
16 <AttrArray Name="_publishEvents">
17 </AttrArray>
18 </DesignTime>
19 <Attribute
20 Name="Serviceinyear"
21 Type="oracle.jbo.domain.Number"
22 ColumnName="SERVICEINYEAR"
23 ColumnType="NUMBER"
24 SQLType="NUMERIC"
25 Precision="2"
26 Scale="0"
27 TableName="EMP1" >
28 <DesignTime>
29 <Attr Name="_DisplaySize" Value="0" />
30 </DesignTime>
31 </Attribute>
32 </Entity>

4から7行: NameExtendsDBObjectTypeおよびDBObjectNameフィールドには、拡張コンポーネントの名前(NewEmpEx)、拡張元コンポーネントの名前(package27.Emp)、参照するスキーマ・オブジェクトのタイプ(table)およびデータベース・オブジェクトの名前(NEWEMPEX)が含まれています。

20から30行: Attributeタグには、拡張エンティティ・オブジェクトに設計時に追加された属性の情報が含まれています。元の属性の情報は、元のコンポーネント(package27.Emp)から取得されます。このタグに元のエンティティ・オブジェクトの属性情報が含まれるのは、「属性」ページの「表からの新規作成」でエンティティを選択し、その後「属性の設定」ページで定義を変更した場合のみになります。


ビジネス・コンポーネントの拡張

 

Copyright © 1997, 2004, Oracle. All rights reserved.