EJB и асинхронная обработка - PullRequest
2 голосов
/ 09 июня 2010

Мне нужно выполнить некоторые вещи асинхронно после вызова метода EJB.Эта потребность, кажется, удовлетворяется в EJB 3.1, но, к сожалению, мы еще не пришли и должны использовать версию 3.0.

Что бы вы предложили как самый простой способ и есть ли предостережения?Я могу думать о следующих подходах:

  • JMS (возможно, излишнее)
  • TimerService (выглядит достаточно просто)
  • Spring TaskExecutor (как это настроено)

Это должно работать на одном сервере Weblogic.Не будет никакой огромной нагрузки или массивной параллельной обработки, я просто хочу, чтобы это было красиво и просто.

Ответы [ 2 ]

2 голосов
/ 09 июня 2010

WorkManager разработан для этой цели и изначально поддерживается WebSphere и WebLogic.Существуют и другие реализации для других серверов приложений.

Он предназначен для асинхронной работы, но при этом позволяет серверу управлять потоками.

2 голосов
/ 09 июня 2010

Сначала вы должны решить, хотите ли вы, чтобы асинхронный объект был обработан или нет. То есть, если обычная транзакция EJB-метода терпит неудачу, асинхронная вещь все еще запускается или нет.

JMS и TimerService являются транзакционными. Spring TaskExecutor, вероятно, нет (я должен проверить это дважды).

С помощью Timer вы можете отложить выполнение (даже с 0) вещи, чтобы после возвращения метода EJB асинхронная вещь выполнялась сразу же в фоновом режиме. Если асинхронный сбой не выполняется, служба таймера пытается выполнить его несколько раз.

С JMS у вас нет строгого контроля над тем, когда вещь будет обработана. Как только сообщение отправлено, вы знаете, что оно будет в конечном итоге обработано, но брокер теоретически свободен отложить обработку для управления загрузкой.

Я не знаю вашего конкретного случая использования, но использование TimerService кажется подходящим, если нагрузка не является проблемой, плюс она проста в использовании.

...