Frage

Ich verwende Spring 2.5 Transaktionsmanagement und ich habe folgende Set-up:

Bean1

@Transactional(noRollbackFor = { Exception.class })
public void execute() {
  try {
    bean2.execute();
  } catch (Exception e) {
    // persist failure in database (so the transaction shouldn't fail)
    // the exception is not re-thrown
  }
}

Bean2

@Transactional
public void execute() {
  // do something which throws a RuntimeException
}

Der Fehler wird nie in DB von Bean1 bleibt, weil die gesamte Transaktion zurückgesetzt wird.

Ich will nicht hinzufügen noRollbackFor in Bean2, weil es in vielen Orten verwendet wird, die Logik Griff Laufzeit Ausnahmen nicht richtig haben.

Gibt es eine Möglichkeit, meine Transaktion zu vermeiden, nur rückgängig gemacht werden, wenn Bean2.execute () von Bean1 genannt wird?

Ansonsten Ich denke, meine beste Option ist mein Fehler innerhalb einer neuen Transaktion zu bestehen? Alles andere reinigen kann ich tun?

War es hilfreich?

Lösung

Dies ist eine der Einschränkungen von Anmerkungen ... Ihre Klasse nicht wieder verwendbar ist!

Wenn Sie Ihre Transaktionen in der XML-Konfiguration würde, wäre, wenn möglich gewesen.

Angenommen, Sie XML-Konfiguration verwenden: wenn es nicht teuer Ressourcen verbrauchen, können Sie eine andere Instanz von Bean2 für die Verwendung des Codes erstellen können Sie angegeben haben. Das heißt, können Sie konfigurieren gewesen, wie Sie oben angegeben, und eine ohne Rollback für Ausnahme.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top