Как работают исключения приложений, когда родительский и дочерний классы аннотированы? - PullRequest
0 голосов
/ 21 января 2019

Я имею в виду JSR 318: Enterprise JavaBeansTM, версия 3.1 в этих вопросах.

В главе 14 (Обработка исключений).Ниже приведен пример.И я это понимаю.

@ApplicationException(rollback=true)
public class ExceptionA extends RuntimeException

public class ExceptionB extends ExceptionA

@ApplicationException(inherited=false, rollback=false)
public class ExceptionC extends ExceptionB

public class ExceptionD extends ExceptionC

ExceptionA is an application exception with transaction rollback.

ExceptionB is an application exception with transaction rollback.

ExceptionC is an application exception without transaction rollback.

ExceptionD is not an application exception.

Мой вопрос: что происходит, когда классы аннотируются, как показано ниже, и ExceptionB выбрасывается?Откатится ли транзакция?

@ApplicationException
public class ExceptionA extends RuntimeException

@ApplicationException(rollback=true)
public class ExceptionB extends ExceptionA

1 Ответ

0 голосов
/ 22 января 2019

В вашем примере (или вопросе)

@ApplicationException // rollback attribute defaults to false, so tx will no rollback
public class ExceptionA extends RuntimeException

@ApplicationException(rollback=true) // tx will be marked for rollback
public class ExceptionB extends ExceptionA

Другим важным моментом является то, что по умолчанию RuntimeExceptions всегда помечает транзакцию для отката!Итак, вы должны быть осторожны с ними ... позвольте мне объяснить:

// Because it is not annotated, applies default behaviour... this is,
// the exception will be wrapped in EJB Exception and the transaction
// will marked for rollback (because it is a RuntimeException)
public class ExceptionA extends RuntimeException {
}

// The exception will be thrown like it is (not wrapped)
// and the tx will no marked for roll back (even if it is a RuntimeException)
// rollback defaults to false and inherited attribute defaults to true
@ApplicationException
public class ExceptionB extends ExceptionA {
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...