У меня есть простой вариант использования в конфигурации Java JMS в контейнере Weblogic 11g (с использованием инфраструктуры Spring 3.x для внедрения зависимостей и EJB 2.x для MDB и декларативного управления транзакциями в ejb-jar.xml).
- Прочитать сообщение из очереди-1
- Размаршалировать сообщение в java-объект
- сохранить немаршалированный объект java в таблицу базы данных
- отправить сообщение (содержащее идентификатор объекта с шага 3) в следующую очередь-2
- прочитать сообщение в очереди-2 (и загрузить объект из базы данных на основе его идентификатора объекта)
Моя проблема заключается во многих случаях, на шаге 5 я обнаруживаю, что идентификатор объекта еще не существует в базе данных, я генерирую исключение, сообщение возвращается в цикл и повторяется, в конечном итоге object_id появляется в базе данных и сообщение на шаге 5 успешно обрабатывается.
Рабочий процесс, охватывающий этапы 1–4 (реализованный в MDB), имеет разграничение транзакций, сделанное как «ТРЕБУЕТСЯ» в ejb-jar.xml, и фабрика соединений поддерживает XA. Это означает, что рабочий процесс (этап 1–4) должен выполняться в транзакции, которая фиксируется, когда сообщение в конечном итоге отправляется в очередь 2 на этапе 4.
Тогда почему во многих случаях шаг 5 не находит идентификатор объекта в базе данных. Есть ли способ заставить это избежать или уменьшить получение этой ошибки на шаге 5.