Stateful Session Beanの場合、クライアントの初期アクセスからRemove要求まで同一インスタンスを使用し、クライアントとの対話状態を保持するため、他Enterprise Beanに比べてメモリ使用量が多くなります。メモリ使用量を制御するため、要求実行中ではないBeanインスタンスをキャッシュする時間や数を調整することができます。
Stateful Session BeanインスタンスのライフサイクルはEJBの規約に説明されています。EJBコンテナはメソッド実行可状態のBeanインスタンスをキャッシュに格納します。クライアントからBeanのビジネスメソッドに対して再度要求がくると、Beanインスタンスをキャッシュから取得し、メソッドを実行して、実行完了後にインスタンスをキャッシュに戻します。同じBeanに対して再度要求がくると、該当のBeanインスタンスをキャッシュから取得し、メソッド実行完了後にキャッシュに戻します。
クライアントからBeanに対してRemove要求が発行されるとBeanインスタンスがキャッシュから削除され、インスタンスが破棄されます。
長時間使用されていないBeanインスタンスはファイルシステムにpassivateするため、不要なメモリの増加を防ぐことができます。このBeanに対して再度要求がくると、対話状態がファイルシステムから読み込まれBeanインスタンスをactivateし、メソッド実行完了後にキャッシュに戻します。
一定時間超過してもpassivateしたBeanに対して要求が発行されなかった場合、passivateしたBeanをファイルシステムから削除します。
注意
Stateful Session Beanの場合、EJBコンテナはIJServerクラスタの停止時にキャッシュしている全Beanインスタンスをpassivateします。ただしIJServerクラスタを強制停止した場合は、EJBコンテナはpassivateせずに終了します。
passivateする時にはBeanインスタンスを直列化してファイルシステムに格納します。このため、Beanインスタンスから参照するオブジェクトが直列化できる(java.io.Serializableインタフェースを実装するなど)必要があります。Beanインスタンスが直列化できない場合にはjava.io.NotSerializableException例外が発生してpassivateに失敗し、そのBeanインスタンスは削除されます。
以下の表にキャッシング機能を制御するチューニング項目を説明します。
チューニング項目 | 効果 |
---|---|
最大キャッシュサイズ | 同時にアクセスするクライアント数に設定することにより、使用していないBeanインスタンスをファイルシステムに退避するためメモリの使用量を削減できます。 |
キャッシュのサイズ変更量 | 要求のピークが終わって不要になったインスタンスを素早く破棄することによりメモリ消費を低減できます。 |
キャッシュアイドルタイムアウト | クライアントがBeanに対してRemove要求を発行し忘れている場合に、不要なBeanインスタンスが自動的に消去されるため、不要なメモリの増加を防ぐことができます。 |
削除タイムアウト | 長時間使用されていない不要なBeanインスタンスが消去されるため、資源の最適化ができます。 |
選択内容の削除ポリシー | 削除ポリシーをBeanの使用パターンに合わせると頻繁に使用されるBeanインスタンスのpassivateとactivate処理による性能劣化を縮小できます。 |
EJBコンテナがpassivateするインスタンスの保存場所は以下のチューニング項目で変更できます。
チューニング項目 | 効果 |
---|---|
セッション格納位置 | 例えば容量にゆとりがある任意のディスクドライブを指定して資源配置の最適化を図ったり、ファイルI/Oが速い任意のディスクドライブを指定することによりファイル化したBeanインスタンスの操作速度を向上させることができます。 |
デフォルトの格納場所とそのディレクトリ配下の構成については、「3.4.2 IJServerクラスタのファイル構成」を参照してください。ファイルはpassivateしたBeanインスタンスごとに作成され、Beanのactivate、削除タイムアウト、またはIJServerクラスタの削除時に削除されます。セション格納位置のディスク容量の見積もり方法については、「7.18.1 運用時に必要なディスク容量」を参照してください。
IJServerクラスタの停止時はファイルが削除されません。その場合、手動でファイルを削除できます。IJServerクラスタの運用中には作成されたファイルの削除やロックを行わないように注意してください。
キャッシュのチューニング設定はEnterprise Beanごとに指定できます。定義詳細については、以下のマニュアルを参照してください。
「4.2.3.3 Interstage EJB application deployment descriptor (sun-ejb-jar.xml)」の<ejb><bean-cache>タグ
Enterprise Beanのキャッシュ設定を指定しない場合はIJServerクラスタの値が使用されます。この値は、Interstage Java EE管理コンソール、およびasadminコマンドを使用して変更できます。詳細については、以下のマニュアルを参照してください。
Interstage Java EE管理コンソールヘルプ