ビジネス・コンポーネントの検証は、JavaBeansのPropertyChange
メカニズムに準拠しています。属性が変更された場合、VetoableChange
イベント通知が行われ、次にPropertyChange
通知が行われます。PropertyChangeEvent
オブジェクトは、その属性が属するエンティティ・オブジェクト参照を含むイベント、および検証中の属性に設定される新規の値とともに渡されます。Validatorは、VetoableChangeListener
イベントを実装し、属性記述子内のリスナー・リストに追加されるため、属性が変更されるとその変更はValidatorに通知されます。setCurrentRow
コールによりビュー・オブジェクト内の現在の行が変更された場合、Business Components for Javaフレームワークによりエンティティ・オブジェクト検証が起動されます。
エンティティ・オブジェクトを検証するために、Validatorオブジェクトが作成され、VetoableChangeListener
としてエンティティ・オブジェクトに付加されます。エンティティ・オブジェクトのvalidate
メソッドがコールされると、リスナーがアクティブになり、リスナーがvalidate
メソッドを実行し、失敗するとVetoableChangeException
がスローされます。
エンティティ・オブジェクトには、publicメソッドvalidate
が1つあり、行の現在の状態が変更された場合とコミット時の両方にコールされます。validate
メソッドのロジックは次のとおりです。
validateEntity
をコールします。このメソッドはオーバーライドできますが、フレームワークの検証メカニズムを起動する独自のコードの前にsuper.validate
をコールする必要があります。Entity.validate()
はオーバーライドできない(finalである)ことに注意してください。
コンポジットでは、validateEntity
により、エンティティ・オブジェクトのvalidateChildren
がコールされます。エンティティ・オブジェクトはそれ自体が関連元エンティティ・オブジェクトで、各所有Associationにアクセスし、関連先のエンティティ・オブジェクトを調べます。関連先エンティティ・オブジェクトが無効とマークされている場合、アクセス中のエンティティ・オブジェクトがvalidate
メソッドをコールします。
このエンティティ・オブジェクトに付加された宣言規則について検証を行います。
無効なフラグをリセットするか、または無効なエンティティの所有者リストからエンティティ・オブジェクトを削除するには、setValidated(true)
をコールします。エンティティ・オブジェクトが最上位レベルのエンティティ・オブジェクトの場合、無効なエンティティ・オブジェクトのトランザクション・リストからこれを削除します。
次の図では、属性値がビジネス・ロジック層に設定された際に実行されるイベントおよびメソッド・コールの順序を示しています。
次の図では、エンティティ・オブジェクトがコンポジット関係の一部である場合について表しています。この場合には、フレームワークは最上位レベルのエンティティ・オブジェクトをロックしようとします。