Ниже мое требование: 1. MDB получает сообщение
Запускает асинхронный метод в другом сессионном компоненте - асинхронный, потому что этот метод будет длинным потоком, и мы не хотим удерживать поток MDB в течение длительного времени.Асинхронный метод читает записи из БД, обрабатывает их и вызывает # 3.
Записывает в другой MQ, а затем вставляет некоторые данные в БД. POSTING TO MQ и DB INSERT должно быть в одна транзакция.
Вот реализация:
Для # 1 - Использование управляемой контейнером транзакции MDB без какого-либо атрибута транзакции.
Для # 2 - Сессионный компонент без сохранения состояния - управляемый контейнер, асинхронный , но атрибут транзакции как NOT_SUPPORTED (не поддерживается, так как это длительный поток, поэтому не нужно, чтобы транзакция была задержана по тайм-ауту).
Для # 3 - компонент сеансов без сохранения состояния (вызывается из # 2 длякаждая запись, которая читается в 2 - выполняется в цикле) - атрибут транзакции - REQUIRES_NEW , поскольку этот метод отправляет сообщения в MQ и вставляет в БД.
Проблемы:
Исключение времени выполнения - когда я выбрасываю исключение времени выполнения из # 3, следующие записи не обрабатываются - сессионный компонент просто завершается.
Исключение - при создании пользовательскогоисключение, сообщение в очередине восстанавливается при сбое вставки БД.
Каков наилучший способ реализации или решения этой проблемы.
Я приложил все усилия, чтобы сообщить подробности - благодарю за любую помощь поэто.