Files
pi_mcps/java/mss-failsafe/.github/transactions.instructions.md
Patrick Plate 1a0a56a626 chore(java): consolidate mss-failsafe to single canonical copy
Replace the stale multi-module java/mss-failsafe skeleton (old user-management
prototype) with the active single-module machine-safety inspection app that was
living in its own standalone repo at the repo root.

- Remove old java/mss-failsafe/ multi-module tree (mss, userdata, userManagement,
  mssfailsafe.datalayer, mssfailsafeWeblayer) incl. committed build artifacts
- Add the active app (PrimeFaces 11 / JSF 2.3 / Hibernate 5.6 / iText / POI)
  flattened into java/mss-failsafe/ as the only mss-failsafe in git
- Working tree captured = master tip 2a142b5 + in-progress uncommitted work
  (incl. .github/*.instructions.md AI-context files)
- Archive the standalone repo's 33-commit history in GIT_HISTORY_ARCHIVE.md
  since its .git was not migrated

This is the source of truth / base for the upcoming upgraded rewrite.
2026-06-13 19:55:28 +02:00

1.8 KiB
Executable File

Transactions Instructions

Aktualisiert: 2025-10-20

Kontext

Container-Managed Transaktionen (Java EE). Verwendung von @Transactional auf Manager-Methoden für Schreiboperationen.

Grundsätze

  • Jede persistierende Operation (create, edit, remove) innerhalb einer Transaktion.
  • save und saveAll bereits mit @Transactional versehen.
  • Leseoperationen können ohne Annotation auskommen (Default: kein Write-Lock nötig).

Batch Operationen

  • saveAll(Collection<T>): Ein Transaktionskontext für gesamte Collection -> entweder komplett erfolgreich oder Abbruch beim Fehler.
  • Optimierungspotential: Fehler sammeln, nicht sofort abbrechen.

Refresh

  • refresh(entity) führt merge aus; wenn id == null vorher persist -> bleibt innerhalb Transaktion falls aufgerufen durch save/saveAll.

Remove

  • remove(entity) ohne @Transactional in Basisklasse -> Empfehlung: Annotation hinzufügen in konkretem Manager wenn Delete-Fachlogik erweitert wird.

Edge Cases

  • Verschachtelte Aufrufe (save -> intern create/edit): Container handhabt Propagation (REQUIRED).
  • LazyInitializationException vermeiden: innerhalb Transaktion initialisieren.

Empfohlene Annotationen

  • Zusätzliche fachliche Write-Methoden stets mit @Transactional versehen.
  • Pure Read: Performancekritisch -> ggf. explizit @Transactional(Transactional.TxType.SUPPORTS) oder weglassen.

Fehlerfall Verhalten

  • Ungefangene RuntimeException -> Rollback durch Container.
  • Aktuell Exceptions geloggt & boolean false -> verhindert Rollback. Verbesserung: BusinessException throw + Rollback.

Generator Leitplanken

  • Keine eigenen manuell geöffneten Transaktionen (kein UserTransaction).
  • Konsistenz: Schreibmethoden annotieren, Leseoperationen nur bei Bedarf.