Транзакция откатывается в случае, если вы выбросили RuntimeException
или любое исключение, у которого аннотация @ApplicationException
с атрибутом rollback
установлена в true
, поэтому:
@ApplicationException(rollback=true)
public class MyException extends Exception {
// ...
}
откатит текущийтранзакция.
По умолчанию ApplicationException не выполняет откат вашей транзакции.
Если вы не хотите, чтобы methodB откатывал вашу транзакцию, вы можете либо изменить поведение отката вашей ApplicationException
, либо запретитьсовместное использование транзакций.
Последнее достигается путем изменения TransactionAttribute
метода B, т. е. на RequiresNew
.Тогда транзакция methodA (Tx1) будет приостановлена, и в случае, если methodB генерирует исключение, которое приводит к откату его транзакции (Tx2), вы все равно можете перехватить его в methodA и предотвратить откат вашей транзакции methodA (Tx1).