从war到ejb-jar的Weblogic WorkManager策略

时间:2011-10-04 17:19:00

标签: weblogic workmanagers

我有一个servlet,它使用defaultWM for Weblogic。这个servlet又调用了一个ejb。该ejb与不同的WM(WM_EJB)相关联。我想知道的是,当一个线程通过servlet进行处理时,servlet是否使用defaultWM然后携带相同的WM上下文到ejb调用?还是有转换?

  1. 对ServletA的外部请求 - ServletA配置为DefaultWM
  2. ServletA处理请求并调用EJB.helloWorld()
  3. EJB.helloWOrld()配置了WM_EJB workmanager
  4. 整个过程是使用DefaultWM还是切换到EJB.helloWorld()的调用

    如果在其他地方得到回答,我很抱歉,我无法找到WM流程的答案。

1 个答案:

答案 0 :(得分: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的任务