検証サイクルについて

ビジネス・コンポーネントの検証は、JavaBeansのPropertyChangeメカニズムに準拠しています。属性が変更された場合、VetoableChangeイベント通知が行われ、次にPropertyChange通知が行われます。PropertyChangeEventオブジェクトは、その属性が属するエンティティ・オブジェクト参照を含むイベント、および検証中の属性に設定される新規の値とともに渡されます。Validatorは、VetoableChangeListenerイベントを実装し、属性記述子内のリスナー・リストに追加されるため、属性が変更されるとその変更はValidatorに通知されます。setCurrentRowコールによりビュー・オブジェクト内の現在の行が変更された場合、Business Components for Javaフレームワークによりエンティティ・オブジェクト検証が起動されます。

エンティティ・オブジェクトを検証するために、Validatorオブジェクトが作成され、VetoableChangeListenerとしてエンティティ・オブジェクトに付加されます。エンティティ・オブジェクトのvalidateメソッドがコールされると、リスナーがアクティブになり、リスナーがvalidateメソッドを実行し、失敗するとVetoableChangeExceptionがスローされます。

エンティティ・オブジェクトには、publicメソッドvalidateが1つあり、行の現在の状態が変更された場合とコミット時の両方にコールされます。validateメソッドのロジックは次のとおりです。

  1. validateEntityをコールします。このメソッドはオーバーライドできますが、フレームワークの検証メカニズムを起動する独自のコードの前にsuper.validateをコールする必要があります。Entity.validate()はオーバーライドできない(finalである)ことに注意してください。

  2. コンポジットでは、validateEntityにより、エンティティ・オブジェクトのvalidateChildrenがコールされます。エンティティ・オブジェクトはそれ自体が関連元エンティティ・オブジェクトで、各所有Associationにアクセスし、関連先のエンティティ・オブジェクトを調べます。関連先エンティティ・オブジェクトが無効とマークされている場合、アクセス中のエンティティ・オブジェクトがvalidateメソッドをコールします。

  3. このエンティティ・オブジェクトに付加された宣言規則について検証を行います。

  4. 無効なフラグをリセットするか、または無効なエンティティの所有者リストからエンティティ・オブジェクトを削除するには、setValidated(true)をコールします。エンティティ・オブジェクトが最上位レベルのエンティティ・オブジェクトの場合、無効なエンティティ・オブジェクトのトランザクション・リストからこれを削除します。

次の図では、属性値がビジネス・ロジック層に設定された際に実行されるイベントおよびメソッド・コールの順序を示しています。

sequence of events and method calls

次の図では、エンティティ・オブジェクトがコンポジット関係の一部である場合について表しています。この場合には、フレームワークは最上位レベルのエンティティ・オブジェクトをロックしようとします。

composition relationship