Transaktionsattribut; REQUIRED vs. NOT_SUPPORTED

oraclin25

Erfahrenes Mitglied
Hallo zusammen,

ich versuche gerade zu nachvollziehen, wie das ejb-Transaktionsmanagement funktioniert. Ich habe folgenden Code:
Code:
@TransactionAttribute(TransactionAttributeType.Required)
public Schule gebeSchuleAus(Nachricht nachricht) throws RatnasBasisException{
 Nachricht ergebnis = null;
 if (nachricht == null){
 throw new RatnasException("null");
 }
 ergebnis = holeSchule(nachricht); 
 return ergebnis;
}
 
@TransactionAttribute(TransactionAttributeType.REQUIRED)
private Schule holeSchule(Nachricht nachricht) throws RatnasBasisException{
 ergebnis schule = null;
 if(StringUtils.isBlank(nachricht.getID())){
 throw new FachlicheException("ID ist nicht vorhanden")
 }
 ...
 ...
 return schule;
}

Die gebeSchuleAus-Method callt die holeSchule-Methode. Für all diese Calls gibt es lediglich eine EINZIGE Transaktion T1. Wenn in der holeSchule-Methode eine Exception auftritt, dann wird alles zurückgerollt, was in T1 existiert.

Ich verändere den Code mal ganz minimal:
Code:
@TransactionAttribute(TransactionAttributeType.Required)
public Schule gebeSchuleAus(Nachricht nachricht) throws RatnasBasisException{
 Nachricht ergebnis = null;
 if (nachricht == null){
 throw new RatnasException("null");
 }
 ergebnis = holeSchule(nachricht); 
 return ergebnis;
}
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
private Schule holeSchule(Nachricht nachricht) throws RatnasBasisException{
 ergebnis schule = null;
 if(StringUtils.isBlank(nachricht.getID())){
 throw new FachlicheException("ID ist nicht vorhanden")
 }
 ...
 ...
 return schule;
}

Die holeSchule-Methode hat jetzt NOT_SUPPORTED als Transaktionsattribut.

Bitte korrigiert mich wenn mein Verständis zum Unterschied obiger Codes nicht stimmt:
1. Bei NOT_SUPPORTED in der holeSchule-Methode werden Sachen in dieser Methode NICHT zurückgerollt, wenn in dieser Methode etwas schief geht.
2. Transaktion T1 bekommt aber weiterhin eine Exception, die aus der holeSchule-Methode stammt(da holeSchule-Methode RatnasBasisException ausgibt und diese wird nach oben weitergereicht)

Stimmt soweit mein Verständnis? Gibt es weitere Unterschiede oder Bemerkungen dazu?

Vielen lieben Dank und viele Grüße aus Rheinland,

Eure Ratna
 
Zurück