Я проводил некоторые исследования по этому вопросу, и мой ответ таков: Weblogic * переключится с DefaultWM на WorkManager компонента, скажем, EJB_WM *, если он определен.
Помните, что поток выполнения остается прежнимпоэтому, как только поступит запрос, тот же поток выполнит сервлет, а затем EJB.
В моем примере приложения я запускаю 50 одновременных вызовов index.jsp, тогда как в weblogic-ejb-jar.xml
, Я определил это ограничение только для EJB
<work-manager>
<name>WorkManagerA</name>
<max-threads-constraint>
<name>MyMaxThreadCount</name>
<count>1</count>
</max-threads-constraint>
</work-manager>
Я вижу журналы, показывающие 2 параллельных вызова в разных потоках 6 и 8 в index.jsp
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 был вызван одновременно 1317985368088 из потоков 6 и 8, однако операторы System.out.printlnназываемые «Начальный EJB» и «Конечный EJB» имеют разные временные метки для потоков 6 и 8. Они находятся внутри EJB.
Это показывает, что EJB WorkManager выполняет свою задачуограничения числа параллельных потоков только на 1 за один раз