0

Weblogic 用の defaultWM を採用しているサーブレットがあります。このサーブレットは、ejb を呼び出します。この ejb は別の WM ( WM_EJB ) に関連付けられています。私が知りたいのは、スレッドがサーブレットを介して処理されるときに、サーブレットは defaultWM を使用し、同じ WM コンテキストを ejb 呼び出しに運ぶのですか? またはスイッチはありますか?

すなわち

  1. ServletA への外部リクエスト -- ServletA は DefaultWM で構成されています
  2. ServletA はリクエストを処理し、EJB.helloWorld() を呼び出します
  3. EJB.helloWOrld() は WM_EJB ワークマネージャーで構成されます

プロセス全体で DefaultWM を使用するか、それとも EJB.helloWorld() への呼び出しをオンにするか

これが別の場所で回答された場合は申し訳ありませんが、WM フローへの回答が見つかりませんでした。

4

1 に答える 1

1

私はこれについていくつかの調査を行ってきましたが、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 つだけに制限するタスクを実行していることを示しています。

于 2011-10-07T11:49:54.590 に答える