第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 Applicationsjboss-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 が使用するプールは影響を受けません。