エンタープライズ Bean へのメソッドの起動は、メソッドの呼び出しを行うリモート・クライアントに対してのみキューイングされます。 リモート・クライアントの例として、エンタープライズ Bean から分離された Java 仮想マシン (JVM) (別のアドレス・スペース) で稼働する Enterprise JavaBeans (EJB) クライアントがあります。 これに対し、EJB クライアント (サーブレットまたは別のエンタープライズ Bean) が、EJB メソッドが実行されるのと同じ JVM 内で、EJB クライアント が実行されるのと同じスレッドにインストールされている場合は、キューイングは発生しません。
リモート Enterprise Bean は、Internet Inter-ORB Protocol を介し たリモート・メソッ ド起動 (RMI-IIOP) を使用することによって通信を行います。RMI-IIOP で開始されるメソッド呼び出しは、サーバー・サイドのオブジェクト・リクエスト・ブローカー (ORB) によって処理されます。 スレッド・プールは、着信要求のキューの役割を 果たします。 ただし、リモート・メソッド要求が出され、スレッド・プール内に使用可能なス レッドがもうない場合は、新規のスレッドが作成されます。メソッド要求が完了した後で、そのスレッドは破棄されます。 したがって、リモート・メソッド要求の処理に ORB が使用されている場合は、無制限 のスレッドの使用によって、EJB コンテナーはオープン・キューとなります。
次の図は、エンタープライズ Bean の 2 つのキューイング・オプションを表しています。
スレッド・プールを構成する際は、EJB クライアントの呼び出しパターンを理解することが重要です。
サーブレットがリモート・エンタープライズ Bean を呼び出す回数が少なく、各メソッド呼び出しが比較的高速の場合は、
ORB スレッド・プール内のスレッド数を、
Web コンテナーのスレッド・プール・サイズの値よりも小さな値に設定することを検討してください。
ORB スレッド・プール値をどの程度増やすかは、Enterprise Bean を呼び出す同時サーブレット (つまり、クライアント) の数と、各メソッド呼び出しの存続期間との関数になります。メソッド呼び出しが長い場合や、アプリケーションが ORB に長時間費や している場合は、ORB スレッド・プール・サイズを Web コンテナーのサイズと等しくす ることを検討します。 サーブレットが ORB に対して短期間または高速の呼び出しだけを行う場合は、サーブ レットは同じ ORB スレッドを再利用できる可能性があります。 この場合、ORB スレッド・プールを小さくでき、 場合によっては Web コンテナーのスレッド・プール・サイズ設定値の半分にすることもできます。
Tivoli Performance Viewer は、構成済みスレッドが使用される頻度を判断するための、最大パーセント と呼ばれるメトリックを表示します。 この値が常に 2 桁である場合は、ORB にボトルネックが生じている可能性があります。 スレッド数を増やしてください。