私はこれについていくつかの調査を行ってきましたが、Weblogic は *DefaultWM から、定義されている場合は EJB_WM* と言うコンポーネントの WorkManager に切り替えるというものです。
実行スレッドは同じままであることを忘れないでください。つまり、リクエストが受信されると、同じスレッドがサーブレットを実行し、次に EJB を実行します。
私のサンプル アプリでは、index.jsp に対して 50 の同時呼び出しを発生させていますが、 ではweblogic-ejb-jar.xml
、EJB だけに対してこの制約を定義しました。
<work-manager>
<name>WorkManagerA</name>
<max-threads-constraint>
<name>MyMaxThreadCount</name>
<count>1</count>
</max-threads-constraint>
</work-manager>
index.jsp 内の異なるスレッド 6 と 8 で 2 つの並列呼び出しを示すログを確認できます。
INDEX.JSP - Current ThreadName Is: [ACTIVE] ExecuteThread: '6' for queue: 'weblogic.kernel.Default (self-tuning)'
INDEX.JSP - Current ThreadName Is: [ACTIVE] ExecuteThread: '8' for queue: 'weblogic.kernel.Default (self-tuning)'
いくつかのログステートメント
Calling EJB from index.jsp 1317985368088[ACTIVE] ExecuteThread: '6' for queue: 'weblogic.kernel.Default (self-tuning)'
Start EJB 1317985368088[ACTIVE] ExecuteThread: '6' for queue: 'weblogic.kernel.Default (self-tuning)'
end EJB 1317985368088[ACTIVE] ExecuteThread: '6' for queue: 'weblogic.kernel.Default (self-tuning)'
Calling EJB from index.jsp 1317985368088[ACTIVE] ExecuteThread: '8' for queue: 'weblogic.kernel.Default (self-tuning)'
Start EJB 1317985368104[ACTIVE] ExecuteThread: '8' for queue: 'weblogic.kernel.Default (self-tuning)'
end EJB 1317985368104[ACTIVE] ExecuteThread: '8' for queue: 'weblogic.kernel.Default (self-tuning)'
タイムスタンプ (System.currentTimeMillis()) が示すように、index.jsp はスレッド 6 および 8 から同時に 1317985368088 呼び出されましたが、「Start EJB」および「end EJB」と呼ばれる System.out.println ステートメントは異なるスレッド 6 と 8 のタイムスタンプ。これらは EJB 内からのものです。
これは、EJB WorkManager が並列スレッド数を一度に 1 つだけに制限するタスクを実行していることを示しています。