Warum bin ich immer ein SpringFramework UnexpectedRollbackException?
Ich erhalte die folgende Spring-Framework Fehlermeldung:
Invocation of getLogoForGlobalConext() in class $Proxy44 threw exception
org.springframework.transaction.UnexpectedRollbackException:
Transaction rolled back because it has been marked as rollback-only
at template/includes/macros.vm line 1651, column 43
Öffnete ich macros.vm
und blickte Zeile 1651 und es sieht wie folgt aus:
#set ($globalLogo = $spaceManager.getLogoForGlobalContext());
Aus meiner Forschung es sieht aus wie $Proxy44
ist eigentlich die $spaceManager
variable (oder eine Instanz von DefaultSpaceManager.java
).
Diese Meldung erscheint nach dem Zufallsprinzip und wenn die web-app versucht zu laden Sie ein Bild/attachment sitzen irgendwo auf dem web-server /Datenbank.
Dem attachmentmanager unterliegt Spring Transaktionsmanagement und für die folgenden Transaktions-Attribute werden verwendet, wenn ein Bild/Anhang heruntergeladen wird:
- Vermehrung - für alle Methoden in der Anlagen-manager
- Vermehrung und Lesen-nur - für alle Methoden in der Anlagen-manager, beginnend mit "get".
Der Attribute sind definiert in Frühling-Rahmen, Kapitel 9. Transaktions-management.
Was ich denke ist, ich brauche, um einen timeout auf den Transaktionen (wie setzen Sie ihn auf unendlich).
InformationsquelleAutor user1068636 | 2012-01-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es stellt sich heraus eine der getter-Methoden wurde die Durchführung einer in Datenbank schreiben. Konkret ging es um die Aktualisierung der cache mit einigen Informationen alle paar Minuten. Wenn Sie dieses update aufgetreten ist, die
UnexpectedRollbackException
geworfen wurde. Da diese Transaktion soll "nur Lesen", wie definiert durch die Transaktion Attribute bereits erwähnt, wir dürfen keine updates durchführen, während eine get-operation.Änderte ich die get-Methode nicht durchführen jegliche updates in den cache und einfach zu benutzen, den cache, auch wenn es abgelaufen ist, und der Fehler geht Weg.
Hoffe, dies hilft jemand anderes.
InformationsquelleAutor user1068636