我一直在对此进行一些调查,我的回应是 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