必要に応じ、ejbPostCreate() メソッドは、実際の作成を実行します。そのため、インスタンス フィールドの必須検証を行うには通常、ejbCreate() メソッドが使用されます。ejbCreate() および ejbPostCreate() メソッドの引数リストは同じである必要があります。
次の ejbPostCreate() メソッドの実装ではまず、データベースへの接続を取得し、そのプライマリ キーによって表されるオブジェクトがデータベース内に存在するかどうかが調べられます。存在する場合は、Bean インスタンスのステートが設定されます。Select が結果を返さない場合は、オブジェクトが作成されてデータベースに挿入されます。
public void ejbPostCreate(final int accountId)
throws CreateException, RemoteException{
try{
final Statement statement =
ResourceManager.getConnection(“source1”).createStatement();
final ResultSet results = statement.executeQuery("SELECT value FROM
account WHERE id = " + _context.getPrimaryKey());
if (!results.next()){
statement.executeUpdate("INSERT INTO account (id, value) VALUES
("+_context.getPrimaryKey() +"," + _value +")");
}else{
_value = results.getInt(1);
results.close();
}
}
catch (final Exception exception){
exception.printStackTrace();
throw new RemoteException("create failed");
}
}
コンテナは、createSQL ステートメントを実行することによって作成引数の妥当性をチェックします。createSQL は、プライマリ キー フィールドが含まれている結果セットを返します。結果が返されない場合は、CreateException が返され、作成引数が無効であることを示します。
結果が返された場合は、コンテナにより、返されたフィールドを基にしてプライマリ キーが生成されます。さらにコンテナにより、そのプライマリ キーを持つオブジェクトがサーバ内に存在するかどうかが調べられます。
サーバ内にプライマリ キーが存在し、ejipt.isCreateSilent がtrue に設定されなかった場合は、javax.ejb.DuplicateKeyException が返されます。