Interstage Java EEではEntity Beanインスタンスの管理でコミットオプションB(トランザクション間にレディーインスタンスをキャッシュする)を使用しています。
Beanインスタンスのキャッシュには2種類の状態が存在します。
トランザクション内のキャッシュ
トランザクション内で使用したインスタンスはすべてキャッシュし保持されます。トランザクション完了後はトランザクション間のキャッシュとして保持されます。
ただし、ロールバックが発生した場合、そのキャッシュはpassivateされます。
トランザクション間のキャッシュ
トランザクション完了後もそのEntity Beanインスタンスのキャッシュは保持され、別のトランザクションで再利用されます。このとき、データはデータベースと同期化されます。
トランザクション間のキャッシュについてはキャッシュのチューニング項目で管理をします。
Entity BeanインスタンスのライフサイクルはEJBの規約に説明されています。
Entityオブジェクトのアイデンティティーと関連付けられているEntity BeanインスタンスはStateful Session Beanと同様にキャッシングされます。ただし、Entity Beanインスタンスはデータベースにpassivateされます、passivateの選択内容の削除ポリシーとしては常にFIFOポリシーが使用されます。削除タイムアウトは動作しません。またpassivateされる閾値が異なります(「Entity BeanとStateful Sesesion Beanのキャッシングの相違点」参照)。その他のチューニング項目については、「9.8.8 EJBコンテナの定義項目」の「Enterprise Beanインスタンスのキャッシング」を参照してください。
Entityオブジェクトのアイデンティティーと関連付けられていないBeanインスタンスはStateless Session BeanとMessage-driven Beanと同様にプーリングされます。チューニング項目については、「9.8.8 EJBコンテナの定義項目」の「Enterprise Beanインスタンスのプーリング」を参照してください。
Entity BeanとStateful Sesesion Beanのキャッシングの相違点
以下の表でEntity BeanとStateful Sesesion Beanのキャッシングの相違点を説明します。
| Entity Bean | Stateful Session Bean |
---|---|---|
最大キャッシュサイズの閾値 | 「Entity Beanの閾値」を参照してください。 | 「9.8.8 EJBコンテナの定義項目」の「Enterprise Beanインスタンスのキャッシング」を参照してください。 |
最大キャッシュサイズに0を入力した場合の最大キャッシュサイズ | 8192 | 無限大 |
キャッシュアイドルタイムアウトによるpassivate | 対象のインスタンスは1個を残してすべてpassviateされます。 | 対象のインスタンスがすべてpassivateされます。 |
Entity Beanの閾値
最大キャッシュサイズの項目にある閾値の算出はStateful Session BeanとEntity Beanで異なります。Entity Beanの閾値は以下の式で算出されています。(入力する数値によっては多少誤差が出ます)
キャッシュのサイズ変更量が最大キャッシュサイズを超えている場合
閾値 = 1
キャッシュのサイズ変更量が最大キャッシュサイズを超えていない場合
閾値 = 最大キャッシュサイズ - キャッシュのサイズ変更量 + 1
キャッシュのサイズ変更量が0の場合
閾値 = 最大キャッシュサイズ × 0.75 + 1