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:

  1. Öffnet die Transaktion beim Methoden-Aufruf
  2. Committet beim normalen Return
  3. 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.