Имеем: Сервер Wildfly, управление транзакциями - контейнер. Используется XA транзакция.
MDB Bean получает сообщения из ActiveMQ. В процессе работы через бизнес-бин производит запись в БД. В случае успеха происходит коммит транзакции в БД и удаление сообщения из JMS. В случае неудачи - rollback. Все работает как нужно, но раздражают в лог файлах WILDFLY WARN от arjuna и ERROR от Hibernate.
Вопрос - как правильно в такой схеме работать с оптимистичными блокировками, если транзакциями управляет сервер приложений? Ведь фактически принятие решения о commit/rollback принимает сервер приложений за границами работы MDB?
Нет, это не так. Транзакциями управляет менеджер транзакций и в зависимости от архитектуры вашего приложения он решает каким образом происходит комит транзакций.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей