4.3.4 Entity Bean(CMP)実装時の注意事項

Entity Bean(CMP)を実装するときの注意事項を示します。

<この項の構成>
(1) setEntityContextメソッドでのリソースマネジャへのアクセスについて
(2) ユーザ定義型のCMPフィールドの使用についての注意
(3) CMRフィールド使用時のトランザクションに関する注意
(4) CMRのcascade-deleteの使用についての注意
(5) プライマリキークラスへのインタフェース指定について
(6) removeメソッドによるリファレンスの解放
(7) EJB QLのfinderメソッドまたはselectメソッドに関する注意

(1) setEntityContextメソッドでのリソースマネジャへのアクセスについて

EJB 1.1仕様およびEJB 2.0仕様では,setEntityContextメソッドでのリソースマネジャへのアクセスは許されていません。

(2) ユーザ定義型のCMPフィールドの使用についての注意

プライマリキーとして複合プライマリキーを使用する以外で,ユーザ定義型のCMPフィールドを使用できません。

(3) CMRフィールド使用時のトランザクションに関する注意

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などで設定してください。

(4) CMRのcascade-deleteの使用についての注意

CMRのcascade-deleteを使用する場合,次の制限があります。

(5) プライマリキークラスへのインタフェース指定について

CMP Entity BeanのDDの<prim-key-class>タグにインタフェースおよび抽象クラスを指定した場合,デプロイ時にエラーメッセージKDJE42039-Eが出力され,デプロイ処理はエラー終了されます。

(6) removeメソッドによるリファレンスの解放

ホームインタフェースを使用してEntity Beanを呼び出す場合,ホームインタフェースのcreateメソッドを呼び出してリファレンスを取得しますが,Entity Beanの呼び出しが完了したあとに,必ずremoveメソッドを呼び出してリファレンスを解放してください。

リファレンスを解放しない場合,J2EEサーバ上のメモリを消費したままの状態になります。

(7) EJB QLのfinderメソッドまたはselectメソッドに関する注意

EJB QLのfinderメソッドまたはselectメソッドの引数の型として,配列を指定できません。