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