「イベント受信」ページを使用して、エンティティ・オブジェクトでリスニングするイベントを選択します。イベントが起動されると、エンティティ・オブジェクトが、指定されたメソッドをコールすることにより応答します。
イベントの配信方法を指定できます。イベントは、プログラム・ロジック(addListener
)で受信されているエンティティ・オブジェクトのインスタンスに配信するか、選択されたAssociationを使用することにより、発行側に関連付けられているエンティティ・オブジェクトに配信できます。イベント配信にAssociationを使用するには、まずAssociationを作成し、AssociationウィザードまたはAssociationエディタの「Associationプロパティ」ページでアクセッサを生成する必要があります。また、エンティティ・オブジェクトを、1つのAssociationと直接関連付ける必要もあります。複数のAssociationを横断することはできません。
addListener
を使用してプログラムで受信する必要があります。LocChanged
を受信する場合、DeptとEmp間の、Emp
を返すすべてのAssociationがこのリストに表示されます。 エンティティ・オブジェクトの「イベント発行」ページで定義したイベントを受信できます。イベントの受信時に実行するメソッドを指定します。エディタでメソッドのコールを追加する場合は、「イベント受信」ページを使用する前にメソッドを定義します。
この例では、Deptエンティティ・オブジェクトが従業員給与の変更を受信および応答するようにする方法を示します。EmpおよびDeptがd2e
というパッケージ内に定義されており、Empエンティティ・オブジェクトが、「エンティティ・オブジェクトのイベントの発行」で説明されているように、SalaryChange
イベントを発行すると想定します。まず、イベントの起動時に実行するメソッドを定義します。次に、イベントを受信します。
Empエンティティ・オブジェクト・インスタンスがSalaryChange
イベントを起動した際に実行するメソッドを実装します。コード・エディタを使用し、calcDeptTotal
メソッド(メソッド名は任意)をDeptエンティティ・オブジェクトの .java
ファイルに追加します。oracle.jbo.domain.Number
をインポートし、次のコードをDeptImpl.java
のDept
クラス定義に貼り付けます。
public Number calcDeptTotal(Number EMPNO,
Number NewSalary,
Number DEPTNO) {Number total = new Number(0);
RowIterator emps = this.getEmp();
EmpImpl empRow = null;
emps.reset();
while (emps.hasNext()) {
empRow = (EmpImpl)emps.next();
total = total.add(empRow.getSal());
}System.out.println("TOTAL ->"+total);
return total;}
ナビゲータで、Deptエンティティ・オブジェクトをダブルクリックします。
エンティティ・オブジェクト・エディタで、「イベント受信」タブをクリックします。
「発行(Publish)されるイベント」リストで「SalaryChange」を選択し、右矢印をクリックして「受信(Subscribe)するイベント」リストに移動します。
「受信(Subscribe)するイベント」リストで「SalaryChange」を選択し、「新規」をクリックします。
「新規メソッド」ダイアログで、「メソッド」ドロップダウン・リストから「calcDeptTotal」を選択します。
エディタにより、Empno、SalおよびDeptno属性が「使用可能」リストに追加されます。
二重右矢印をクリックし、Empno、SalおよびDeptnoを「使用可能」リストから「選択済」リストに移動します。Empnoが「選択済」リストの先頭にない場合は、選択し、上矢印ボタンをクリックしてリストの一番上に移動します。
「OK」をクリックして「新規メソッド」ダイアログおよびエンティティ・オブジェクト・エディタを閉じます。
ビジネス・コンポーネント・フレームワークにより、イベント受信用のJavaコードおよびXMLコードが生成されます。実行時、従業員給与が変更されると、Deptエンティティ・オブジェクトはcalcDeptTotal
を実行することにより応答します。