У меня есть 3 решения:
< ol>
[*]MessageReceiver.receive() (ждет бесконечно, текущая реализация. Но это не рекомендуемый способ получения сообщений от AMQ; на самом деле я вижу застрявшие сообщения в очереди. Но я могу свободно выдавать исключение приложения после линии get() и все тесты пройдены)
[*]Bean, управляемый сообщениями + некоторый локальный кеш: отправитель сообщения отправляет сообщение, затем вводит его цикл while(), проверяющий кэш-компонент, пришел ли ответ. Цикл может быть с Thread.sleep() или без него. Тем временем MDB получает сообщение и помещает ответ в кэш-компонент. Поэтому я использую этот кэш-компонент для синхронизации.
Он работает, и MDB — рекомендуемый способ получения сообщений в EJB, но я либо ввожу while() миллион раз в течение двух секунд ожидания (я вижу это запах кода), либо управляю потоком самостоятельно(
Код: Выделить всё
Thread.sleep()
- решение 1), но с @Asynchronous я вижу это похожее как 1), потому что Future.get() будет блокироваться на неопределенный срок, а получение сообщений без MDB не рекомендуется, но я сам не управляю потоком. Я также могу свободно бросать.
Что мне делать?
Подробнее здесь: https://stackoverflow.com/questions/792 ... y-from-jms