2010-10-11 5 views
0

У меня есть система, основанная на JMS-очередях, которые позволяют всей системе работать в асинхронном режиме.JMS sync request-reply from stateless EJB

Теперь для выполнения некоторых периодических задач мне нужно выполнить некоторые задачи, не требующие много времени, синхронизирующим образом, так что я могу сразу что-то сделать с результатом без использования базы данных для хранения запроса и сопряжения его с результатом (как с асинхронная операция).

Сам код не является проблемой, но тот факт, что EJB запускают транзакции контейнера, что означает, что код производителя.send() и consumer.receive() не будут выполняться последовательно (т.е. сообщение не отправляется, поэтому ничего получать в приемнике() несколько строк ниже).

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

Спасибо за ответы,

Бозо

ответ

1

Вы можете переключить компонент использовать Bean-Managed транзакции.

1

Вы должны знать контексты транзакций в EJB, которые влияют на отправку запросов/ответов через JMS.

«Решение заключалось бы в приостановлении транзакции, создании новой транзакции, отправке запроса, фиксации новой транзакции, непредвиденной первой транзакции и продолжении».

В приведенном ниже URL-адресе вы найдете описание проблемы и решение. Кстати, это относится и к контейнеру управляемого и фасоли удалась сделке ..

http://blogs.oracle.com/fkieviet/entry/request_reply_from_an_ejb

Смежные вопросы