Политики Weblogic WorkManager через войну в ejb-jar - PullRequest
0 голосов
/ 04 октября 2011

У меня есть сервлет, который использует defaultWM для Weblogic. Этот сервлет в свою очередь вызывает ejb. Этот ejb связан с другим WM (WM_EJB). Что я хотел бы знать, когда поток поступает для обработки через сервлет, использует ли сервлет defaultWM и затем переносит тот же контекст WM в вызов ejb? или есть переключатель?

т.е.

  1. Внешний запрос к ServletA - ServletA настроен с DefaultWM
  2. ServletA обрабатывает запрос и вызывает EJB.helloWorld ()
  3. EJB.helloWOrld () настроен с помощью WM_EJB workmanager

Использует ли весь процесс DefaultWM или переключает вызов EJB.helloWorld ()

Мои извинения, если на этот вопрос ответили где-то еще, я не смог найти ответ на поток WM.

1 Ответ

1 голос
/ 07 октября 2011

Я проводил некоторые исследования по этому вопросу, и мой ответ таков: 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 за один раз

...