Files
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

2.6 KiB
Executable File
Raw Permalink Blame History

Coding Guidelines

Allgemein

  • Sprache: Deutsch in UI-Messages, Englisch im Code (Klassennamen etc.).
  • Einrückung: 4 Spaces (NetBeans Standard). Keine Tab-Mischung.
  • Zeilenlänge: Empfehlung max. 140 Zeichen.
  • Vermeide überflüssige System.out.println nutze Logger.

Packages

  • business.<domain> für Manager/Logik.
  • controller.<domain> für JSF Backing Beans.
  • model.<domain> für Entities/Enums.

Benennung

  • Manager endet auf Manager (CRUD + Fachlogik).
  • Controller endet auf Controller.
  • Entities nutzen Substantive singular (SecurityArea, DangerPoint).
  • Enums nutzen PascalCase Konstanten (APPROACH_SPEED, hier bereits gemischt beibehalten vorhandene Fälle, Konsistenz bei neuen).

Fehlerbehandlung

  • Aktuell: Logging + bool Rückgabe. Bei neuen komplexen Methoden: Ziehe eigene Exceptions in Betracht (BusinessException).
  • Niemals stack trace verlieren immer loggen. Falls Benutzerfeedback nötig → Message über Controller.

Persistenz

  • Vor Persist neuer Entity: ID muss null sein (oder negativ Fake-ID nur temporär). Setze beim finalen Speichern negative IDs auf null.
  • Verwende AbstractManager.refresh(entity) um Lazy Collections zu initialisieren.

Transaktionen

  • Schreibmethoden erhalten @Transactional. Beim EJB Stateless reicht oft Container-Transaktion; Annotation verstärkt Klarheit.

Performance

  • Sammel-Speicheroperationen bevorzugt saveAll(Collection<T>) statt Schleifen mit einzelnen Flushes.
  • Beim Klonen großer Objektgraphen prüfen: Nur notwendige Collections initialisieren.

UI / JSF

  • Vermeide direkte Änderungen an listengebundenen Collections ohne Aktualisierung des Backing Beans (PrimeFaces kann sonst nicht updaten).
  • Nutze klare Dialog-Helper (closeDialogs) statt roher JavaScript Strings.

PDF

  • Konsistenz: Verwende iText7 API für neue Funktionen. Markiere Altcode (iText5) für spätere Entfernung.

Sicherheit

  • Keine sensiblen Daten in Logs.
  • Prüfe vor Löschaktionen, dass referenzielle Integrität gewährleistet (vor Entfernen Beziehungen lösen, wie im deleteSelected() umgesetzt).

Tests (Empfehlung)

  • JUnit + Arquillian für EJB/Entity Tests.
  • Test-Namensschema: <ClassName>Test.
  • Mindestens: CRUD, Klonen, Fragebogen hinzufügen/entfernen.

Kommentar-Stil

  • Klassenheader: Kurze Beschreibung Funktion/Zweck.
  • Methoden: JavaDoc nur bei komplexer Logik / öffentlich verwendeten APIs.

Anti-Pattern vermeiden

  • "God Controller" trenne Verantwortlichkeiten (nicht alles in einem Controller ansammeln).
  • Direkte UI-Logik im Manager vermeiden.

Aktualisiert: 2025-10-20