特定の検証メソッドを編集し、ビジネス・ロジックを指定できます。まず、エンティティ・オブジェクト・ウィザードを使用し、エンティティ・オブジェクトにメソッドを追加します。属性レベルの規則を作成するには、ウィザードを使用してエンティティ・オブジェクトにアクセッサ・メソッドを追加します。アクセッサ・メソッドの一般的な名前は、get
Attribute またはset
Attribute です。ここで、Attribute はエンティティの属性の名前に置き換えます。
Business Components for Javaフレームワークにより、これらのメソッドのシグネチャが定義され、スケルトン・コードが生成されます。これに、検証ロジックを実装するコードを追加します。たとえば、Emp
エンティティ・オブジェクトの場合、フレームワークでは、Sal
属性を検証するためのsetSal
メソッドを生成します。
属性レベルの検証コードを作成するには、エンティティ・オブジェクトのset
Attribute メソッドを編集します(エンティティ・オブジェクト・ウィザードを使用し、スケルトンを生成します)。デフォルトでは、スケルトン・メソッドにはEntity.setAttributeInternal
へのコールが含まれます。このコールの前にカスタム検証コードを挿入します。
たとえば、Customer
エンティティ・オブジェクトに、顧客のクレジット・カード番号を表すcreditCardNumber
という名前の属性があるとします。番号を検証するために、次のコードにより合計桁数が計算され、指定した値と桁数が比較されます。合計がその値より小さい場合は、メソッドにより例外がスローされます。それ以外の場合、カード番号は有効であるため、setAttributeInternal
がコールされ、検証プロセスが続行されます。
public class Customer extends oracle.jbo.rt.Entity {
...
public void setCreditCardNumber(String cardNo) {
int checkSum = 0;
// Minimum value chosen arbitrarily for this example.
int MIN_VAL = 100;
// Assume the following card number format:
// "1234567890123456"
for (int i = 0; i < cardNo.length(); i++) {
checkSum += Integer.parseInt(cardNo.substring(i, i + 1));
}
if (checkSum < MIN_VAL) {
throw new JboException("Invalid card number");
}
// Continue the validation process.
// Generated calls follow.
setAttributeInternal(CREDTICARDNUMBER, cardNo)
}
...
}
次のメソッドの例では、配布IDの設定前に一意のキー値が必要であるという規則が実行されます。値が一意でない場合、メソッドにより例外がスローされます。それ以外の場合は、検証プロセスが続行されます。
public void setDistributionId(Number quantity) {
Object[] reqDistKey = new Object[1];
reqDistKey[0] = this.distId;
// If the key exists, then it's not unique.
if (getDefinitionObject()
.findInstance((ApplicationModuleImpl)getApplicationModule(),
new Key(reqDistKey)) != null ){
throw new JboException("Must be unique");
}
// Generated calls follow.
setAttributeInternal( DISTRIBUTIONID, quantity );
}