Возможна ли связь между экземплярами EJB3 (связь между компонентами Java EE)? - PullRequest
0 голосов
/ 17 апреля 2010

Я разрабатываю часть приложения Java EE 6, состоящего из EJB3-компонентов. Частью требований являются множественные параллельные (скажем, несколько сотен) продолжительных (в течение нескольких дней) поисков баз данных. Отдельные поиски имеют разные параметры поиска (время начала, время окончания, фильтр запросов). Параметры могут изменяться со временем.

В настоящее время я думаю о следующем:

  • SearchController (компонент сеанса без состояния) формулирует набор параметров поиска, отправляет его на SearchListener через JMS
  • SearchListener (компонент, управляемый сообщениями) получает параметры поиска, создает экземпляр SearchWorker с параметрами
  • SearchWorker (SLSB) многократно ищет в базе данных; когда он что-то находит, результат отсылается через JMS, и поиск продолжается; когда заданное «конечное время» достигнуто, оно заканчивается

Что мне сейчас интересно:

  • Есть ли проблема с экземплярами EJB3, работающими в течение нескольких дней? (Кроме этого мне нужно иметь возможность иметь дело с перезапусками контейнеров ...)
  • Как узнать, сколько и какие экземпляры EJB SearchWorker в данный момент запущены?
  • Можно ли общаться с ними индивидуально (аналогично отправке сигнала System V в процесс Unix), например, отправить новые параметры, завершить экземпляр и т. д.

1 Ответ

0 голосов
/ 23 апреля 2010

Если вы держите огромный ResultSet открытым в течение длительного периода времени, вы, вероятно, столкнетесь либо с таймаутами транзакций, либо с проблемами блокировки базы данных.

Нет встроенного механизма для определения того, какие экземпляры bean-компонентов выполняются в методе, поэтому вам необходимо добавить свой собственный механизм. Ваш продукт может иметь какой-то мониторинг производительности, который позволяет вам узнать, сколько компонентов каждого типа в настоящее время выполняет метод.

Что касается межпотоковой связи, вам необходимо реализовать собственную синхронизацию и периодически проверять метод bean-компонента. Вы выйдете за рамки стандартного EJB, поскольку каждый параллельный вызов бизнес-метода будет выделять новый SLSB из пула.

...