3.4.5.3.1. Откат вложенной транзакции
Если вложенная транзакция создана через getTransaction()
, то ее откат приведет к невозможности коммита охватывающей транзакции. Например:
void methodA() {
Transaction tx = persistence.createTransaction();
try {
methodB(); (1)
tx.commit(); (4)
} finally {
tx.end();
}
}
void methodB() {
Transaction tx = persistence.getTransaction();
try {
tx.commit(); (2)
} catch (Exception e) {
return; (3)
} finally {
tx.end();
}
}
1 | вызываем метод, создающий вложенную транзакцию |
2 | предположим, что здесь выбрасывается исключение |
3 | обрабатываем исключение и выходим |
4 | здесь будет выброшено исключение, так как транзакция помечена как rollback only |
Если же транзакция в methodB()
будет создана через createTransaction()
, то ее откат не окажет никакого влияния на коммит охватывающей транзакции в methodA()
.