#java #transactions #jboss #java-ee-8
Вопрос:
Мы используем код в общедоступном методе, который аннотирован @javax.transaction.Транзакционный вызов из другого класса.
Код выполняется с Java EE на JBoss 7.2 и Wildfly 15.
При исключениях времени выполнения транзакции откатываются правильно, как и ожидалось. Когда я вручную выбрасываю новую ошибку OutOfMemoryError (в качестве теста!) или ошибку утверждения, возникает ошибка, но транзакция фиксируется. Ожидание-это откат.
С точки зрения реализации я вижу org.jboss.jts//com.arjuna.ats.jta.cdi.транзакционный.Транзакционные* классы в моей трассировке стека.
Есть идеи, почему это так и как принудительно выполнить откат также при ошибках?
Ответ №1:
Это происходит потому, что по умолчанию для отката помечены только исключения среды выполнения и ее подклассы. Вы можете указать rollbackOn
свойство при использовании аннотации, чтобы указать исключения, для которых должен произойти откат.
Надеюсь, документация поможет.
Комментарии:
1. Спасибо за этот полезный совет. Это объясняет, почему происходит откат. Я следил за этим, но не получал отката для OOM даже с помощью @Transactional(откат = OutOfMemoryError.class) — независимо от этого я на самом деле хотел бы @Transactional(откат = Throwable.class)