Referenzierung Spring documentation:Best Practices für die Transaktionen in Spring 3/Hibernate Rollback
Alle Runtime wird Rollback auslösen, und jede geprüfte Ausnahme nicht
javapractices.com Referenzierung
Ungeprüfter Ausnahmen:
- repräsentieren Fehler im Programm (Bugs) - oft ungültige Argumente an eine nicht-private Methode übergeben. Um Zitat aus dem Java-Programmierung Sprache, von Gosling, Arnold und Holmes: „Ungeprüfter Laufzeit Ausnahmen Bedingungen darstellen, die im Allgemeinen sprechen, reflektieren Fehler in Ihrem Logik des Programms und nicht vernünftigerweise von zur Laufzurückgewonnen werden kann Zeit . "
- sind Subklassen von Runtime, und sind in der Regel mit Illegal, Nullpointer implementiert, oder Illegal
- ein Verfahren ist nicht verpflichtet, eine Politik für die ungeprüften Ausnahmen durch ihre Umsetzung (und sie fast immer tun, nicht geworfen zu etablieren so)
Checked Ausnahmen:
- repräsentieren ungültige Bedingungen in Bereichen außerhalb des unmittelbaren con trol von das Programm (ungültige Benutzereingabe, Datenbankprobleme, Netzwerkausfälle, fehlen Dateien)
- sind Unterklassen von Exception
- ein Verfahren, eine Politik zu etablieren ist verpflichtet, für alle Ausnahmen durch ihre Umsetzung geworfen geprüft (entweder die geprüfte Ausnahme passiert weiter nach oben den Stapel oder handhabt es irgendwie)
Wenn während meiner Geschäftslogik ich ein Problem entdecken, und ich möchte die Änderungen rückgängig zu machen, ich habe einen neuen Run werfen Zeitausnahme? Es ist nicht wirklich eine RuntimeException (unchecked Ausnahme), da ich es in der Logik identifiziert habe. Oder verstehe ich diese Konzepte vielleicht falsch?
Meine eigentliche Frage, was das Beste Praktiken zum Walzen einer Transaktion in meiner @Transactional Service-Methoden zurück?
Wie kann ich etwas von meiner Methode zurückgeben, wenn ich werfe eine Ausnahme? Darüber hinaus ist das Auslösen einer Ausnahme ziemlich kostspielig. Ist es nicht möglich, die Transaktion manuell rückgängig zu machen, ohne eine Ausnahme auszulösen? –
@GuillaumePolet Man könnte dem entgegenwirken, dass wenn man absichtlich Dinge im Rahmen eines nicht-außergewöhnlichen Geschäftsprozessablaufs zurückführt, die mit Rollbacks in einem RDBMS verbundenen Kosten um Größenordnungen irgendwelche realen oder wahrgenommenen Kosten einer Ausnahme auf einem modernen Server übersteigen JVM, und das ganze Design sollte überarbeitet werden. Unabhängig davon, ob Sie die Funktionsweise deklarativer Transaktionen nicht mögen ... benutzen Sie sie nicht. Das Feature ist keineswegs Ihre einzige Option. Sie können weiterhin normale alte Ruhe-Sitzungs-Transaktionen verwenden. – Affe