#weblogic #workmanagers
#weblogic #workmanagers
Вопрос:
У меня есть сервлет, который использует defaultWM для Weblogic. Этот сервлет, в свою очередь, вызывает ejb. Этот ejb связан с другим WM ( WM_EJB ). Что я хотел бы знать, когда поток поступает для обработки через сервлет, использует ли сервлет defaultWM, а затем переносит тот же контекст WM в вызов ejb? или есть переключатель?
т.е.
- Внешний запрос к ServletA — ServletA настроен с DefaultWM
- СервлетА обрабатывает запрос и вызывает EJB.HelloWorld()
- EJB.HelloWorld() настроен с помощью WM_EJB workmanager
Использует ли весь процесс DefaultWM или он включает вызов EJB.HelloWorld()
Мои извинения, если на этот вопрос был дан ответ где-то еще, я не смог найти ответ на WM flow.
Ответ №1:
Я провел некоторые исследования по этому вопросу, и мой ответ заключается в том, что 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, называемые «Start EJB» и «end EJB», имеют разные временные метки для потоков 6 и 8. Они находятся внутри EJB.
Это показывает, что EJB WorkManager выполняет свою задачу по ограничению количества параллельных потоков только до 1 за раз