# AI Context Instructions ## Essentials - Base Classes: AbstractEntity, AbstractManager, AbstractController - Fake ID Mechanismus für neue Objekte - Hibernate.initialize für Lazy Collections # Architecture Instructions ## Typical Generation Tasks 1. Neue Domain (Entity/Manager/Controller/XHTML) 2. PDF Utility Erweiterung (iText7) 3. Sammel-Speichern (saveAll) bereitstellen 4. Klon-Operationen (IDs null setzen, Collections duplizieren kontrolliert) 5. Fragebogen Zuordnung (add/remove, available list) ## Edge Cases - Null Entities im save -> return false - Negative IDs beim remove -> zuerst persistieren oder aus UI entfernen - Concurrency Refresh: Nach batch Änderungen refreshSelected() ## Do / Don't - DO: Logging bei jeder Exception - DO: Konsistente Nutzung von @Transactional bei Schreiboperationen - DON'T: System.out oder ungefangene Exceptions durchreichen ohne Logging - DON'T: Business Logik direkt in XHTML Event Handler schreiben ## Upgrade Ideas - Exception Layer - Bean Validation - Service Layer zwischen Controller und Manager falls Logik wächst --- Aktualisiert: 2025-10-20 ## Purpose Verdichtete Architekturhinweise für automatische Code-Generierung und schnelle Orientierung. ## Stack - Java EE 8 (javax), WAR - JSF 2.3 + PrimeFaces 11 + PrimeFlex 2.0 - Hibernate JPA (Persistence Unit: pu_person) - Log4j2 ## Layer 1. View (XHTML) 2. Controller (JSF/CDI Beans, extends AbstractController) 3. Business (Stateless EJB Manager, extends AbstractManager) 4. Persistence (JPA Entities, extends AbstractEntity) ## Base Classes - AbstractManager: CRUD (save, saveAll, refresh, remove), flush nach Persist/Merge. - AbstractController: UI State (selected, created, entities), Messages, PDF Utilities, Fake-ID-Erzeugung. ## Entity Lifecycle UI - Neue Objekte: erhalten negative Fake-ID - Vor Persist: negative IDs -> null setzen - save/saveAll entscheidet anhand id == null zwischen persist/merge ## Lazy Loading - Refresh via AbstractManager.refresh(entity) + Hibernate.initialize(entity) - Für Collections: dedizierte reload Methoden (z.B. SecurityAreaManager.reloadWithQuestionnaires) ## PDF - iText7 bevorzugt; Altbestand iText5 (itextpdf 5.5.13) kann später entfernt werden. ## Logging & Fehler - LOGGER.error(e) bei Fehlern - Aktuell viele bool Rückgaben; Verbesserungspotential: BusinessException ## Erweiterung Pattern Entity -> Manager -> Controller -> XHTML ## Schulden / Verbesserungen - Mischung iText5/7 - Inkonsistente Fehlerbehandlung - Kein DTO Layer - Wenige Tests ## Empfehlungen für Generator - Bestehende Signaturen unverändert lassen - @Transactional nur bei Schreibmethoden hinzufügen - Collections initialisieren bevor darauf iteriert wird --- Aktualisiert: 2025-10-20