0

我有一个使用 weblogic 的 defaultWM 的 servlet。该 servlet 又调用 ejb。此 ejb 与不同的 WM ( WM_EJB ) 相关联。我想知道的是,当一个线程进入通过 servlet 处理时,servlet 是否使用 defaultWM,然后将相同的 WM 上下文传递给 ejb 调用?还是有开关?

IE

  1. 对 ServletA 的外部请求——ServletA 配置了 DefaultWM
  2. ServletA 处理请求并调用 EJB.helloWorld()
  3. EJB.helloWOrld() 配置了 WM_EJB workmanager

整个过程是使用 DefaultWM 还是打开对 EJB.helloWorld() 的调用

如果在其他地方回答了这个问题,我深表歉意,我找不到 WM 流程的答案。

4

1 回答 1

1

我一直在对此进行一些调查,我的回应是 Weblogic *将从 DefaultWM 切换到组件的 WorkManager 说 EJB_WM* 如果定义了一个。

请记住,执行线程保持不变——因此一旦请求进入,同一个线程将执行 servlet,然后执行 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 回答