1a0a56a626
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.
2.7 KiB
Executable File
2.7 KiB
Executable File
How-To: Projekt erweitern
Neuer Fachbereich (Beispiel: InspectionReport)
1. Entity anlegen
- Paket:
model.report. - Klasse:
InspectionReport extends AbstractEntity. - Felder:
date,inspector,machine,remarks. - Named Queries definieren (z.B.
FIND_BY_MACHINE).
2. Manager
@Stateless
@Named
public class InspectionReportManager extends AbstractManager<InspectionReport> {
@PersistenceContext(name = "pu_person")
EntityManager em;
public InspectionReportManager() { super(InspectionReport.class); }
@Override protected EntityManager getEntityManager() { return em; }
// Fachmethoden: findByMachine(Long id)
}
3. Controller
@ViewScoped
@Named
public class InspectionReportController extends AbstractController<InspectionReport> {
@EJB InspectionReportManager reportManager;
@Inject MachineController machineController;
public InspectionReportController() { setSelected(new InspectionReport()); setCreated(new InspectionReport()); }
@Override protected AbstractManager<InspectionReport> getManager() { return reportManager; }
@Override public void clearEntries() { setSelected(new InspectionReport()); setCreated(new InspectionReport()); getEntities().clear(); }
public void saveReport(){ reportManager.save(getSelected()); successMessage(); }
}
4. UI Seite
- Pfad:
webapp/report/inspection.xhtml. - Binding:
#{inspectionReportController}. - Komponenten: Formular für Felder + Speichern Button.
5. Navigation
- Menüeintrag in globaler Navigationsstruktur (Tree oder Topbar) – analog
createMachineMenu()Ansatz.
6. Tests
- Persistenz Test: Speichern + Laden.
- Manager Fachmethode Test.
Erweiterung vorhandener Funktionalität
- Beispiel: Neue PDF Sektion → Ergänze Hilfsmethode in
AbstractController(sofern allgemein). Falls spezifisch für eine Domäne, eher Hilfsklasse im Domain-Paket.
Konsistenz-Checkliste
- Entity extends
AbstractEntity - Manager extends
AbstractManager - Controller extends
AbstractController - Negative IDs für neue Objekte vor Persist (falls in Listen)
- Internationale Zeichen (UTF-8) – POM setzt Encoding
- Logging bei Fehlern
Deployment Hinweise
- Sicherstellen, dass neue Named Queries beim Serverstart verfügbar (Entity korrekt gescannt).
- Falls neue Ressourcen (Logos, Templates) → in
resourcespflegen.
Typische Stolpersteine
- LazyInitializationException: Lösung
refresh(entity)oder explizite Initialisierung im Manager. - Doppelte Referenzen beim Klonen: IDs auf
nullsetzen. - Fehlende Transaktion: Sicherstellen
@Transactionaloder EJB Standard.
Aktualisiert: 2025-10-20