macht
Code: Select all
// Within a @Transactional(REQUIRED) block
Connection con = getConnection(...) (1)
// do some sql updates (2)
try {
// Start @Transactional(REQUIRES_NEW) block
Connection con2 = getConnection(...) (3)
// do some more sql updates (4)
throw new Exception();
// End REQUIRES_NEW block
} catch (Exception ignored) {
}
// End Required block
< /code>
Die Erwartung wäre, dass unser Testfall mit den SQL -Updates aus (2) in der Datenbank sichtbar ist, die SQL Sollte innerhalb einer anderen Transaktion ausgeführt werden, die auf die Ausnahme zurückgeführt werden sollte. Es treten keine Rollbacks auf. Aus dem Aussehen sind Con und Con2 das gleiche Objekt oder zumindest auf dieselbe zugrunde liegende Wildfly -Transaktion. Und nur als Referenz: Wenn alle Bean- und TransaktionAntationen auf Jakarta -Anmerkungen umgestellt werden, funktioniert es auch. Der Block ist ein Rückruf, der in einer separaten Frühlingsbohne ausgeführt wird, die mit @Transactional
Was haben wir falsch gemacht? Wie können wir eine zweite Verbindung erhalten, die an den inneren Transaktionskontext gebunden ist? Grund. Es scheint, dass der Frühling sich weigert, eine Transaktion zu öffnen, sobald eine offene Verbindung besteht.