Entity Bean(CMP)を実装するときの注意事項を示します。
EJB 1.1仕様およびEJB 2.0仕様では,setEntityContextメソッドでのリソースマネジャへのアクセスは許されていません。
プライマリキーとして複合プライマリキーを使用する以外で,ユーザ定義型のCMPフィールドを使用できません。
Collection型のCMRフィールドやCollection型のCMRフィールドのIteratorを使用する場合,CMRフィールドを取得したときのトランザクションの範囲内で,CMRフィールドやIteratorへアクセスできます。次のコーディング例のcallTeamメソッドでは,CMRフィールドのgetterメソッドであるgetPlayersメソッドと,それに続くIteratorを使用した操作をすべて同一トランザクション内で実行する必要があります([a]から[b]の間)。
public void callTeam() {
:
//[a]
Collection playersInTeam = team.getPlayers();
Iterator i = playersInTeam.iterator();
while (i.hasNext()) {
LocalPlayer p = (LocalPlayer) i.next();
:
}
//[b]
}
このコーディング例をトランザクション外で実行した場合は,IllegalStateException例外が発生します。これを避けるために,トランザクション内で実行されるようにCMTなどで設定してください。
CMRのcascade-deleteを使用する場合,次の制限があります。
CMP Entity BeanのDDの<prim-key-class>タグにインタフェースおよび抽象クラスを指定した場合,デプロイ時にエラーメッセージKDJE42039-Eが出力され,デプロイ処理はエラー終了されます。
ホームインタフェースを使用してEntity Beanを呼び出す場合,ホームインタフェースのcreateメソッドを呼び出してリファレンスを取得しますが,Entity Beanの呼び出しが完了したあとに,必ずremoveメソッドを呼び出してリファレンスを解放してください。
リファレンスを解放しない場合,J2EEサーバ上のメモリを消費したままの状態になります。
EJB QLのfinderメソッドまたはselectメソッドの引数の型として,配列を指定できません。