クライアントから要求がある前にBeanのインスタンスを生成しておくことでアクセス時のインスタンス生成処理時間が省略され、処理性能が向上します。
Enterprise Beanインスタンスのプーリング機能は、以下のEnterprise Beanで利用されます。
Stateless Session Bean
Message-driven Bean
以下に、Stateless Session BeanとMessage-driven Beanインスタンスのライフサイクルとプールについて説明します。
Stateless Session Beanの場合、クライアントからBeanに対して要求があると、EJBコンテナはプールからBeanインスタンスを1つ取得し、そのインスタンスに対してビジネスメソッドを実行します。
Message-driven Beanの場合、メッセージが届くと、同様にプールからBeanインスタンスを取得し、そのインスタンスに対してメッセージリスナーメソッドを実行します。実行完了時にインスタンスをプールに戻します。
EJBタイマーによるコールバック処理の場合にも同様に、プールからインスタンスを取得しタイマーコールバックメソッドを実行し、実行完了時にインスタンスをプールに戻します。
以下の表にプーリング機能を制御するチューニング項目を説明します。
チューニング項目 | 効果 |
---|---|
初期および最小プールサイズ | インスタンスをあらかじめ生成しておくことにより、プールされているインスタンスを利用してすぐに実行できるため処理性能が向上します。 |
最大プールサイズ | プールの最大値によりメモリ使用量を制御できます。 |
プールサイズ変更量 | クライアントからの要求数の急増によってメソッド実行可状態のインスタンスが足りなくなった場合でも、プールサイズの即時拡張により、インスタンス生成処理によるレスポンス遅延が軽減されます。 |
プールアイドルタイムアウト | 不要になった過度のインスタンスを破棄することによりメモリの最適化ができます。 |
注意
プールの監視は指定値の間隔で実施しますが、起動後に1回行った後はEJBアプリケーションの使用状況を確認し、使用されていないBeanインスタンスはプールサイズを調整しません。
Message-driven Beanはインスタンスごとにセッションを使用してメッセージを受信します。そのため、プールの最大値を2以上に設定するとメッセージ順序性が保証されません。
プール設定は、Enterprise Beanごとに指定できます。定義詳細については、以下を参照してください。
「3.2.1.3 Interstage EJB application deployment descriptor (glassfish-ejb-jar.xml)」の<ejb><bean-pool>タグ
Enterprise Beanのキャッシュ設定を指定しない場合は、IJServerクラスタの値が使用されます。この値は、asadminコマンドを使用して変更できます。詳細については、以下を参照してください。