CMT
CMT (Container Managed Transactions) bedeutet: Der WildFly-Container öffnet und schließt Transaktionen automatisch.
Du schreibst niemals
tx.begin()/tx.commit().
I. Wie funktioniert es?
Bei einer @Stateless-Bean ist CMT der Default. Der Container:
- Öffnet die Transaktion beim Methoden-Aufruf
- Committet beim normalen Return
- Rollbackt bei RuntimeException
II. Exception-Verhalten
| Exception-Typ | Wirkung |
|---|---|
| RuntimeException / unchecked | ROLLBACK ✓ |
| Checked Exception | KEIN Rollback (Default!) |
@ApplicationException(rollback=true) |
ROLLBACK |
Warning
Eine Checked Exception (IOException, SQLException) löst keinen Rollback aus! Wenn du das willst: throw new RuntimeException(...).
III. CMT vs. BMT
| CMT (default) | BMT (@TransactionManagement(BEAN)) |
|
|---|---|---|
| Wer regelt TX? | Container | Du (UserTransaction) |
| Default für @Stateless | ✅ | ❌ |
.NET-Vergleich
Wie ein TransactionScope, aber der Scope ist die EJB-Methode.