IT-Basecamp 2013 Real World Java EE Patterns Adam Bien 1
Indhold Lidt om mig Baggrund for valg af emnet Bogens opbygning Fra J2EE til JEE 5/6 Overflødiggjorte patterns Fremhæve et par patterns 2
Kenneth Sjøholm 40 år Uddannet folkeskolelærer i 1999 Arbejdede som lærer fra 1999-2005 Cand.it i 2008 fra ITU (softwareudvikling) Arbejdede i BEC fra 2008 2011 Startede i Lund&Bendsen i 2011 3
Emnevalg Har undervist i Core Java + Java EE (EJB + JPA) Finder design patterns vigtige og ønsker at blive meget klogere på dem samt kende deres eksistens Syntes bogen umiddelbart virkede interessant 4
Bogens opbygning 6 kapitler 1. A brief History of J2EE 2. Understanding Java EE Core Concepts 3. Rethinking the Business Tier 4. Rethinking the Integration Tier 5. Infrastructural patterns and utilities 6. Pragmatic Java EE Architectures 5
Bogens opbygning Kapitler om patterns følger dette pattern: 1. Problem 2. Krav 3. Løsning herunder konventioner gentænkning/refleksion interessenter og ansvar forskellige strategier 4. Test 5. Dokumentation 6. Konsekvenser 7. Relaterede patterns 6
Fra J2EE til JEE 5/6 Convention over configuration Dependency Injection Interceptors EJB 3 og JPA support (transaktionsstyring) Deklarativt fx. @Stateless 7
Overflødiggjorte patterns Design Pattern Service Locator (JNDI indkapsling) Composite Entities (CMP) Erstatning Dependency Injection JPA. Entiteter er blot POJO's Value Object Assembler (merge, transform, select ) Business Delegate (Lag ml. presentation og business tier) Domain Store (Transparent persistering af objektgraf) Value List Handler. (iteration over objektgraf) EntityManageren i JPA + detached objekter EJB3.x. Business interfacet kan injectes i presentation komponenten. EntityManageren kan ses som en standardiseret implementation af Domain Store) JPA entiteter kan detaches + Paginator pattern 8
Domæne drevet design Generelt fokuserer Adam Bien på så få lag som mulig Konkluderer at der kun er to nødvendige komponenter: PDO og Gateway. Stiller sig kritisk i forhold til DAO. 9
PDO Persistent Domain Object PDO = Entity med state + forretningslogik! PDO er passiv Bør kunne læses af forretningsfolk Highly cohesive Problem ved detachment (Serializable) og bør derfor kun kunne tilgås via en reference DTO. 10
Gateway Stateful session bean state på serveren (bundet til sessionen) webkomponent skal også være stateful @TransactionAttribute(NOT_SUPPORTED) EntityManagerens mode er EXTENDED Metoder der ændrer data skal have @TransactionAttribute(REQUIRED) Bruges sammen med PDO'er (via referencer), der udstilles direkte til presentation-laget Performer godt. 11
Paginator Ønsker at returnere en graf af objekter, der skal itereres over. Klienten ønsker kun en delmængde Lad klienten anvende EntityManageren implementation af Paginator direkte ingen DAO. Servicen kan implementere Iterator<List<X>>. query.setfirst(index * pagesize) query.setmaxresults(pagesize) Performer godt (små result sets) Data kan være gamle lige efter et fetch Bør bruge optimistisk låsning 12
Fluid Logic Dynamiske programmeringssprog kan agere med applikationen runtime gennem ScriptEngine (siden JDK 6) Vedligeholdelse af ofte ændret kode. Stor flexibilitet da scripts kan ændres og erstattes runtime Dårlig performance pga. runtime fortolkning Ingen typecheck mere test Sikkerhedsbrist (fx System.exit(1)) 13
Andre spændende patterns Design Pattern JCA Dependency Injection Extender Thread Tracker Problem, der løses Tilgang til inkompatible ressourcer i en transaktion Injection af ikke kompatible frameworks komponenter (fx Guice) Associering af en metode i en deadlock med tråden, der er stucked 14
Mening om bogen Fokuserer meget på overgangen fra J2EE til JEE (skrevet i 2009) En form for opslagsværk Udmærket beskrevet med små kodeeksempler Egen erfaring vil klart øge forståelsen af problemstillingerne 15