# 📐 Java Architecture Patterns ![Java Architecture Banner](http://192.168.188.119:30008/pplate/pi_mcps/raw/branch/main/docs/wiki/images/java-architecture-banner.png) This page documents the shared architectural patterns used across all Java projects in this monorepo. These patterns also align with Patrick's professional work on the ADP Germany Paisy payroll system. ## JSF MVC Pattern All projects use JavaServer Faces (JSF) with the MVC pattern: ``` Browser (HTTP) → FacesServlet → XHTML View (Facelets) │ ▼ CDI Backing Bean (@Named) │ ▼ Service Layer (EJB / CDI) │ ▼ JPA Repository / EntityManager │ ▼ Database (MySQL / H2) ``` ## JPA Entity Mapping Standard JPA annotation patterns used across projects: ```java @Entity @Table(name = "users") public class User implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name = "username", nullable = false, unique = true) private String username; @OneToMany(mappedBy = "user", cascade = CascadeType.ALL, fetch = FetchType.LAZY) private List orders = new ArrayList<>(); // getters/setters } ``` ## Backing Bean Pattern CDI backing beans power the JSF views: ```java @Named @ViewScoped // or @SessionScoped / @RequestScoped public class UserBean implements Serializable { @Inject private UserService userService; private User currentUser; public String login() { currentUser = userService.authenticate(username, password); return currentUser != null ? "/user/welcome?faces-redirect=true" : null; } // getters/setters } ``` ## Security Layers ### Legacy: JAAS (wellmann-shop) ```xml Admin Pages /admin/* admin ``` ### Modern: Soteria / Jakarta Security (mss-failsafe) ```java @ApplicationScoped public class ApplicationSecurityConfig implements HttpAuthenticationMechanism { // Soteria CDI-based authentication } ``` ## Maven Multi-Module Pattern (mss-failsafe) ```xml mssfailsafe.datalayer userdata userManagement ``` ## XHTML Facelets Templating ```xml Default Content #{item.name} ``` ## Deployment Descriptor Pattern All projects target JBoss/WildFly with consistent descriptor files: | File | Purpose | |---|---| | `WEB-INF/web.xml` | Servlet config, security constraints, welcome files | | `WEB-INF/jboss-web.xml` | Context root, security domain mapping | | `WEB-INF/jboss-app.xml` | JBoss application descriptor | | `META-INF/persistence.xml` | JPA datasource JNDI reference | ## persistence.xml Pattern ```xml java:jboss/datasources/MySQLDS ``` ## Patrick's Java Specializations Based on professional and homelab experience: | Domain | Depth | Notes | |---|---|---| | JPA / EclipseLink | ⭐⭐⭐⭐⭐ | Authored custom annotation parsers | | JSF / PrimeFaces | ⭐⭐⭐⭐⭐ | Built wellmann-shop solo | | JAXB | ⭐⭐⭐⭐ | XML binding for payroll formats | | Maven | ⭐⭐⭐⭐ | Multi-module, plugins | | Jakarta EE | ⭐⭐⭐⭐ | CDI, Security, JTA | | Spring Boot | ⭐⭐⭐ | CannaManage SaaS target stack |