Ich habe eine EJB an einer globalen Transaktion beteiligt. Es gibt einen Teil des Codes, der bei einem Fehler explizit zurückgesetzt werden soll, obwohl die gesamte Transaktion nicht fehlschlagen soll.Legit Rollback in einer verteilten Transaktion: möglich?
Als Rollback in einer CMT verboten habe ich ein BMT und versuchte, den folgenden Code:
connection.setAutoCommit(false);
Savepoint sp= connection.setSavepoint();
try{
//my code editing DB that could possibly fail
}catch(SomeException ex){
connection.rollback(sp);
}
Auf diese Weise ich meine lokale db Modifikation nur rückgängig machen, aber ich propagiere auch das nicht nach außen scheitern. Wie auch immer dieses Programm nicht mit so:
„Savepoint in einer verteilten Transaktion verboten ist“
Gibt es einen anderen Ansatz, um dieses Problem zu lösen?
Die neue Transaktion wird auch festgeschrieben, wenn sie funktioniert. Seien Sie sich jedoch bewusst, dass die neue Transaktion unabhängig von der ersten ist, und wenn etwas dazu führt, dass die erste Transaktion rückgängig gemacht wird (aus einem anderen Grund), wird die neue Transaktion weiterhin ausgeführt. – kaczyns