4.3.4 Entity Bean(CMP)実装時の注意事項
Entity Bean(CMP)を実装するときの注意事項を示します。
- 〈この項の構成〉
(1) setEntityContextメソッドでのリソースマネジャへのアクセスについて
EJB 1.1仕様およびEJB 2.0仕様では,setEntityContextメソッドでのリソースマネジャへのアクセスは許されていません。
(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を使用する場合,次の制限があります。
-
cascade-deleteでEntity Beanをremoveする場合,呼び出し元となるクライアントプログラムは,最初にremoveされるBeanのremoveメソッドのメソッドパーミッションだけでなく,cascade-deleteの対象となるすべてのBeanでの,コンポーネントインタフェースのremoveメソッドのメソッドパーミッションを持つように設定されている必要があります。
-
cascade-deleteの対象となるすべてのBeanでの,コンポーネントインタフェースのremoveメソッドのトランザクション属性は,Requiredに設定してください。
-
cascade-deleteを指定している関係が複数のBeanを循環するように設定されている場合,循環した関係にあるすべてのBeanでremoveメソッドの実行は保証されません。
(5) プライマリキークラスへのインタフェース指定について
CMP Entity BeanのDDの<prim-key-class>タグにインタフェースおよび抽象クラスを指定した場合,デプロイ時にエラーメッセージKDJE42039-Eが出力され,デプロイ処理はエラー終了されます。