Я хочу, чтобы мой дочерний метод не выполнялся, если внешний метод завершится ошибкой (с использованием javax @TransactionAttribute) - PullRequest
0 голосов
/ 12 октября 2018

У меня есть метод, который Meth1 будет вызывать Meth2 из другого класса.Я хочу, чтобы Meth2 НЕ выполнялся в случае сбоя Meth1.

Оба имеют атрибут REQUIRED.С этим кодом, если Meth1 завершается с ошибкой во время сохранения (после успешного выполнения Meth2), изменения Meth2 сохраняются.

Я хочу, чтобы весь код выполнялся как целая транзакция, все или ничего.

Пример:

@TransactionAttribute(TransactionAttributeType.REQUIRED)
void meth1(){
    // ...some code
    otherClass.meth2();
    // ... some persistance that may fail
}

@TransactionAttribute(TransactionAttributeType.REQUIRED)
void meth2(){
    // some persistance
}

Спасибо!

1 Ответ

0 голосов
/ 13 октября 2018

В этом случае оба метода будут выполняться в одной транзакции.

Спецификация EJB 3.0 сообщает о REQUIRED:

Контейнер должен вызывать метод корпоративного компонента, атрибут транзакции которого установлен в значение REQUIRED с допустимым контекстом транзакции.

Если клиент вызывает метод корпоративного компонента, в то время как клиент связан с контекстом транзакции, контейнер вызывает метод корпоративного компонента в контексте транзакции клиента.

Если клиент вызывает метод корпоративного компонента, в то время как клиент не связан с контекстом транзакции, контейнер автоматически запускает новую транзакцию перед передачей вызова метода бизнес-методу корпоративного компонента.Контейнер автоматически включает все менеджеры ресурсов, к которым бизнес-метод обращается с помощью транзакции.Если бизнес-метод вызывает другие корпоративные компоненты, контейнер передает контекст транзакции с вызовом.Контейнер пытается зафиксировать транзакцию после завершения бизнес-метода.Контейнер выполняет протокол фиксации до того, как результат метода будет отправлен клиенту.

...