automatisches Rollback

Greenhorn_80

Grünschnabel
Hallo,

Folgende Frage:
Innerhalb der Methode einer SessionBean, die mittels EntityBeans in eine Datenbank schreibt, wurde eine NullPointerException geworfen. Dabei ist mir aufgefallen, dass der JBoss (3.2.7) eine Art selbstständiges Rollback implementiert hat, denn alle bis zum Zeitpunkt der Exception geschriebenen Zeilen wurden wieder aus der Datenbank entfernt. Ich habe keinerlei Transaktionsmanagement konfiguriert. Nun meine Frage: Führt der JBoss bei jeder Exception in einer SessionBean automatisch ein Rollback durch?

mfg
gh_80
 
Hallo,

welchen Transaction-type hast du denn im ejb-jar.xml deklariert? Steht dort Container?
Wenn ja und du sonst nichts definiert hast wird beim Aufruf deiner SessionBean Methode eine neue Transaction gestartet (könnte also implizit auf RequiresNew gesetzt sein). Arbeitest du innerhalb deiner Methode dann mit irgendwelchen EntityBeans und kommt es dort zu einer Exception rollt JBoss die Transaktion die beim Aufruf der Sessionbean Methode erzeugt wurde zurück -> alle bis dahin innerhalb dieser Transaktion erfolgten Datenmanipulationen werden dann rückgängig gemacht). Sprich, alle Manipulationen an EntityBeans innerhalb der Sessionbean Methode werden innerhalb dieser Transaktion ausgeführt.

Gruß Tom
 
Hi Thomas,

vielen Dank für die Antwort.
Der Transaction-type ist, wie Du bereits vermutet hast, auf Container gesetzt. Da ich darüber hinaus keine weiteren Einstellungen vorgenommen habe, wird also jede Methode der SessionBean als neue Transaktion ausgeführt.
Ich habe mal zum Test im <container-transaction> Element für eine Methode dieser SessionBean das trans-attribute Required festgelegt. Trotzdem führt eine Exception auch innerhalb der anderen Methoden der SessionBean weiterhin zu einem Rollback. Ich vermute mal, dass diese weiterhin als RequiresNew ausgeführt werden.
Um nur eine Methode einer SessionBean als Transaktion zu deklarieren, ohne das die übrigen dem Attribut RequiresNew folgen, muss also für alle Methoden explizit festgelegt werden, welches trans-attribute diese verwenden sollen?


mfg
 
Hallo!

das trans-attribute Required festgelegt. Trotzdem führt eine Exception auch innerhalb der anderen Methoden der SessionBean weiterhin zu einem Rollback. Ich vermute mal, dass diese weiterhin als RequiresNew ausgeführt werden.

Also wenn du an einer Methode das Transaktionsattribut required hinterlegst wird verlangt, dass diese Methode innerhalb einer Transaktion ausgeführt wird. Liegt keine Transaktion um den Aufruf "herum", so wird analog zu RequiresNew eine neue Transaktion gestartet. Liegt eine Transaktion "drum herum", dann wird diese auch für den Aufruf verwendet.
Requiresnew sagt aus, dass bei / vor dem betreten der Methode eine neue Transaktion aufgemacht werden muss. Eine dann umschließende Transaktion würde für die Zeit der neuen Transaktion ausgesetzt (suspended) werden.

Um nur eine Methode einer SessionBean als Transaktion zu deklarieren, ohne das die übrigen dem Attribut RequiresNew folgen, muss also für alle Methoden explizit festgelegt werden, welches trans-attribute diese verwenden sollen?
Imho Ja.

Gruß Tom
 

Neue Beiträge

Zurück