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