Hallo zusammen,
ich habe gerade Schwierigkeit, mein Verständis zu Transaktion Management zu vollenden:
Wie man sieht, in der Bean-Methode createEmployee() wird die Methode einer anderen Bean aufgerufen(mit der Transaktionsattribute REQUIRED).
Da in der Methode createEmploye() ja eine Arithmetic-Exception kommt, soll alles was DAVOR passierte, ZURÜCKGEROLLT werden. Somit wird die Methode createEmployeeDetail(), was zuvor bereits ausgeführt wurde, zurückgerollt.
Meine Frage:
Wie entscheidet der Container, WAS zurückgerollt wird und WAS nicht? Denn: offensichtlich wird die Anweisung:
ja weiterhin ausgeführt.
Ich vermute: Was zurückgerollt wird, entscheidet sich dadurch, ob dieses Etwas eine Transaktion braucht oder nicht. Falls all die Anweisungen KEINE Transaktion brauchen, werden sie auch NICHT zurückgerollt. System.out.println ist ein Beispiel, dies kann ja unmöglich zurückgerollt werden.
Liege ich mit diesem Verständnis eigentlich richtig?
Vielen Dank.
Viele Grüße aus Rheinland,
Eure Ratna
ich habe gerade Schwierigkeit, mein Verständis zu Transaktion Management zu vollenden:
Code:
@Stateless
@TransactionManagement(TransactionManagementType.CONTAINER)
public class EmployeeDetailBean implements EmployeeDetailLocal {
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public void createEmployeeDetail() {
System.out.println("creating Employee Detail: ");
...
}
}
Code:
@Stateless
public class EmployeeBean implements EmployeeLocal {
@EJB
private EmployeeDetailLocal employeeDetailBean;
public void createEmployee() {
// Create employee here
employeeDetailBean.createEmployeeDetail();
int zaehler = 5;
int nenner = 0;
int ergebnis = zaehler/nenner;
}
}
Wie man sieht, in der Bean-Methode createEmployee() wird die Methode einer anderen Bean aufgerufen(mit der Transaktionsattribute REQUIRED).
Da in der Methode createEmploye() ja eine Arithmetic-Exception kommt, soll alles was DAVOR passierte, ZURÜCKGEROLLT werden. Somit wird die Methode createEmployeeDetail(), was zuvor bereits ausgeführt wurde, zurückgerollt.
Meine Frage:
Wie entscheidet der Container, WAS zurückgerollt wird und WAS nicht? Denn: offensichtlich wird die Anweisung:
Code:
System.out.println("creating Employee Detail: ");
Ich vermute: Was zurückgerollt wird, entscheidet sich dadurch, ob dieses Etwas eine Transaktion braucht oder nicht. Falls all die Anweisungen KEINE Transaktion brauchen, werden sie auch NICHT zurückgerollt. System.out.println ist ein Beispiel, dies kann ja unmöglich zurückgerollt werden.
Liege ich mit diesem Verständnis eigentlich richtig?
Vielen Dank.
Viele Grüße aus Rheinland,
Eure Ratna