第5章 EJB サブシステムの調整
JBoss EAP は Jakarta Enterprise Bean をキャッシュして初期化時間を節約できます。これは、bean プールを使用して行います。
JBoss EAP では、bean インスタンスプール と bean スレッドプール の 2 種類の bean プールを調整できます。
適切な bean プールサイズは、ご使用の環境とアプリケーションによって異なります。予想される実際の条件を模倣する開発環境で、さまざまな bean プールサイズを試し、ストレステストを実行することが推奨されます。
5.1. Bean インスタンスプール
bean インスタンスプールは、ステートレスセッション bean (SLSB) およびメッセージ駆動型 bean (MDB) に使用されます。デフォルトでは、SLSB はインスタンスプールの default-slsb-instance-pool
を使用し、MDB はインスタンスプールの default-mdb-instance-pool
を使用します。
bean インスタンスプールのサイズによって、一度に作成可能な特定の EJB のインスタンス数が制限されます。特定の EJB の空きがない場合、クライアントはインスタンスが利用可能になるまでブロックおよび待機します。プールの timeout
属性に設定された時間内にクライアントがインスタンスを取得できないと、例外が発生します。
bean インスタンスプールのサイズは、derive-size
または max-pool-size
のいずれかを使用して設定されます。derive-size
属性を使用する場合、以下の値の 1 つを使用してプールサイズを設定できます。
-
from-worker-pools
: 最大プールサイズはシステム上で設定されたワーカープールすべての合計スレッドのサイズから派生することを意味します。 -
from-cpu-count
: 最大プールサイズはシステム上で利用可能なプロセッサーの合計数から派生することを意味します。必ずしも 1 対 1 のマッピングではなく、他の要因によって拡張される可能性があることに注意してください。
derive-size
が未定義の場合、max-pool-size
の値が bean インスタンスプールのサイズに使用されます。
derive-size
属性は、max-pool-size
に指定された値をすべて上書きします。max-pool-size
値を有効にするには、derive-size
を未定義にする必要があります。
特定のインスタンスプールを使用するよう EJB を設定することができます。これにより、各 EJB タイプが使用できるインスタンスをより細かく制御できます。
5.1.1. Bean インスタンスプールの作成
ここでは、管理 CLI を使用して新たに bean インスタンスプールを作成する方法を説明します。また、管理コンソールを使用して bean インスタンスプールを設定することもできます。 この場合、Configuration タブで EJB サブシステムを選択し、Bean Pool タブを選択します。
新しいインスタンスプールを作成するには、以下のコマンドの 1 つを使用します。
派生した最大プールサイズで bean インスタンスプールを作成する場合:
/subsystem=ejb3/strict-max-bean-instance-pool=POOL_NAME:add(derive-size=DERIVE_OPTION,timeout-unit=TIMEOUT_UNIT,timeout=TIMEOUT_VALUE)
以下の例は、CPU 数から派生した最大サイズと、2 分のタイムアウトを指定して、
my_derived_pool
という名前の bean インスタンスプールを作成します。/subsystem=ejb3/strict-max-bean-instance-pool=my_derived_pool:add(derive-size=from-cpu-count,timeout-unit=MINUTES,timeout=2)
明示的な最大プールサイズで bean インスタンスプールを作成する場合:
/subsystem=ejb3/strict-max-bean-instance-pool=POOL_NAME:add(max-pool-size=POOL_SIZE,timeout-unit=TIMEOUT_UNIT,timeout=TIMEOUT_VALUE)
以下の例は、30 個の最大インスタンスと、30 秒のタイムアウトを指定して、
my_pool
という名前の bean インスタンスプールを作成します。/subsystem=ejb3/strict-max-bean-instance-pool=my_pool:add(max-pool-size=30,timeout-unit=SECONDS,timeout=30)
5.1.2. Bean が使用するインスタンスプールの指定
特定の bean が使用する特定のインスタンスプールを設定するには、@org.jboss.ejb3.annotation.Pool
アノテーションを使用するか、bean の jboss-ejb3.xml
デプロイメント記述子を編集します。詳細は、Developing EJB Applicationsの jboss-ejb3.xml Deployment Descriptor Reference
を参照してください。
5.1.3. デフォルト Bean インスタンスプールの無効化
デフォルトの bean インスタンスプールは無効にすることができます。無効にすると、EJB はデフォルトでインスタンスプールを何も使用しません。代わりに、スレッドが EJB でメソッドを呼び出す必要があるときに新しい EJB インスタンスが作成されます。これは、作成された EJB インスタンスの数を制限したい場合に便利です。
デフォルトの bean インスタンスプールを無効にするには、以下の管理 CLI コマンドを使用します。
/subsystem=ejb3:undefine-attribute(name=default-slsb-instance-pool)
bean が 特定の bean インスタンスプールを使用するよう設定されている 場合、デフォルトのインスタンスプールを無効にしても、bean が使用するプールは影響を受けません。