Java EE kompakt - Power Workshop Seminarunterlage Version: 2.02 Version 2.02 vom 28. April 2015
Dieses Dokument wird durch die veröffentlicht.. Alle Rechte vorbehalten. Alle Produkt- und Dienstleistungs-Bezeichnungen sind Warenzeichen oder eingetragene Warenzeichen der jeweiligen Firmen und beziehen sich auf Eintragungen in den USA oder USA-Warenzeichen. Weitere Logos und Produkt- oder Handelsnamen sind eingetragene Warenzeichen oder Warenzeichen der jeweiligen Unternehmen. Kein Teil dieser Dokumentation darf ohne vorherige schriftliche Genehmigung der weitergegeben oder benutzt werden. Die besitzt folgende Geschäftsstellen Adressen der Westernmauer 12-16 D-33098 Paderborn Tel.: (+49) 0 52 51 / 10 63-0 An der alten Ziegelei 5 D-48157 Münster Tel.: (+49) 02 51 / 9 24 35 00 Marlene-Dietrich-Str. 5 D-89231 Neu-Ulm Tel.: (+49) 07 31 / 9 85 88 550 Kreuzberger Ring 13 D-65205 Wiesbaden Tel.: (+49) 06 11 / 7 78 40 00 Wikingerstraße 18-20 D-51107 Köln Tel.: (+49) 02 21 / 8 70 61 0 Internet: http://www.ordix.de Email: training@ordix.de Seite 2 Version: 2.02
Inhaltsverzeichnis 1 Überblick - Java EE Plattform... 10 1.1 Java-EE-Architektur (4-Schichten-Architektur)... 11 1.2 4-Schichten-Architektur... 12 1.3 Java EE Plattform... 13 1.4 Java-EE Spezifikationen (JSR 342)... 14 1.5 Java-EE-Applikationsserver... 15 1.6 EJB-Komponentenarchitektur... 16 1.7 EJB-Container... 17 1.8 Easy Packaging... 18 1.8.1 Easy packaging Ear-Datei... 19 1.8.2 EAR-Datei... 20 1.8.3 Easy packaging War-Datei... 21 1.8.4 Beispiel: Easy (War) packaging... 22 2 Enterprise Java Beans... 23 2.1 Enterprise Java Beans... 24 2.2 Aufrufmodelle von Clients... 25 2.3 Session Beans... 26 2.3.1 Mikroarchitektur einer Session-Bean... 27 2.3.2 Bean-Klasse... 28 2.3.3 Business-Interface... 29 2.3.4 No-Interface Client View (No-Interface View)... 30 2.3.5 Beispiel: Lokaler Zugriff - @EJB... 31 2.3.6 Annotation @LocalBean... 32 2.3.7 Bean-Instanz... 33 2.3.8 Transaktionskontext... 34 2.3.9 Beispiel: Deklarative Transaktionalität... 35 2.4 Asynchrone Session Beans... 36 2.4.1 Asynchrone Methodenaufrufe... 37 2.4.2 Asynchronität in Java-EE... 38 2.4.3 Asynchrone Session Bean... 39 2.4.4 Client Kommunikation... 40 2.4.5 Nebenläufiger Task... 41 2.4.6 Asynchrone (Stateful) Session Beans... 42 2.4.7 Annotation @AccessTimeout... 43 2.5 Stateless Session Beans... 44 2.5.1 Lebenszyklus... 45 2.5.2 Instanz-Pooling... 46 2.5.3 Exception... 47 2.6 Stateful Session Beans... 48 2.6.1 Eigenschaften... 49 2.6.2 Lebenszyklus... 50 2.6.3 Exception... 51 2.6.4 Beenden der Konversation... 52 2.6.5 Passivierung... 53 2.6.6 Passivierungskandidaten... 54 2.6.7 Automatische Freigabe Timeout... 55 2.6.8 Interface SessionSynchronization... 56 2.7 Singleton... 57 2.7.1 Singleton-Pattern... 58 2.7.2 Singleton Session Bean... 59 2.7.3 Lebenszyklus... 60 2.7.4 Initialisierung... 61 2.7.5 Initialisierung Abhängigkeiten... 62 2.7.6 Nebenläufigkeit... 63 2.7.7 Container-Managed Nebenläufigkeit... 64 2.7.8 Singleton Session Bean - Loopback-Calls... 65 Version: 2.02 Seite 3
2.7.9 Session-Bean Fazit... 66 3 Message Driven Beans... 67 3.1 Messaging... 68 3.1.1 Prinzip des Messaging... 69 3.1.2 Point-to-Point... 70 3.1.3 Publish-and-Subscribe... 71 3.2 Java-Message-Service (JMS)... 72 3.3 Queue-Konfiguration Quick and Dirty für JBoss 7.x... 73 3.4 JMS-Client: Connection und Session aufbauen... 74 3.5 JMS-Client: MessageProducer / MessageConsumer... 75 3.6 Client-Zugriff, Details... 76 3.6.1 ConnectionFactory... 76 3.6.2 Connection... 77 3.6.3 Session... 78 3.6.4 Queue... 79 3.6.5 MessageProducer... 80 3.6.6 MessageConsumer... 81 3.6.7 QueueBrowser... 82 3.7 Message-Header... 83 3.7.1 Properties... 83 3.7.2 Message Type... 84 3.8 Beispiel: JMS-EJB-Client... 85 3.9 Message Driven Bean... 86 3.10 JMS im J2EE-Server... 87 3.11 Transaktionalität... 88 3.12 Integration von JMS und EJB... 89 3.13 Typen von Message-Driven Beans... 90 3.14 Bean-Klasse... 91 3.15 Beispiel: MDB... 92 3.16 Konfigurationseigenschaften der MDB... 93 3.17 Message Selector... 94 3.18 Lebenszyklus von Message-Driven Beans... 95 4 Best Practices... 97 4.1 Komponenten der EJB-Anwendung... 98 4.2 Komponenten der Facade... 99 4.2.1 Facade... 100 4.3 Dependency Injection... 101 4.4 Beispiel Fassade... 102 4.5 Interzeptoren... 103 4.5.1 Business Methoden Interzeptoren... 104 4.6 Service Bean... 105 4.6.1 Beispiel Service Bean... 106 4.7 Data Access Layer... 107 5 EJB-Container Dienste... 108 5.1 Zugriff auf EJBs über JNDI... 109 5.1.1 Namen und Verzeichnisdienst... 110 5.1.2 Standardisierung - Portable JNDI-Namen... 111 5.1.3 JNDI-Namen Besonderheiten... 112 5.1.4 Beispiel 1: JNDI Zugriff auf EJB - Single View... 113 5.1.5 Beispiel 2: JNDI Zugriff auf EJB - Multiple Views... 114 5.1.6 Beispiel 3: DI mit Portable JNDI-Namen... 115 5.1.7 Zugriff auf JNDI Clientseitig... 116 5.2 Timer Service... 117 5.2.1 Timer Service... 118 5.2.2 Programmgesteuerte Timer... 119 5.2.3 Timeout Methode... 120 Seite 4 Version: 2.02
5.2.4 Persistente Timer... 121 5.2.5 Automatische Timer... 122 5.2.6 Zeitpläne... 123 5.2.7 Beispiel: Zeitpläne... 124 5.2.8 Beispiel: Programmgesteuertes Timer... 125 5.3 Interzeptoren... 127 5.3.1 Aspektorientierte Programmierung (AOP)... 128 5.3.2 Interzeptoren in Java-EE... 129 5.3.3 Interzeptoren-Typen... 130 5.3.4 Interzeptoren in der EJB-Spezifikation... 131 6 Contexts and Dependency Injection... 134 6.1 Motivation... 135 6.2 Dependency Injection (DI)... 136 6.3 Warum CDI in Java EE?... 137 6.4 CDI in Java EE 6 (JSR 299)... 139 6.5 Schichtenübergreifende Injektion... 140 6.5.1 CDI Scope... 141 6.5.2 Der Begriff Bean in CDI... 142 6.5.3 Beispiel: Managed Bean 1.0 - CDI Bean... 143 6.5.4 Beans in Java EE 6 - EJB, REST, CDI,... 144 6.5.5 CDI Container Spezifische Dienste... 145 6.5.6 Beispiel: CDI-Bean... 146 6.6 Managed Beans Spezifische Annotationen... 147 6.7 Classpath beans.xml... 148 6.8 CDI Container Grundprinzipien und Hauptakteure... 149 6.9 Basis-Injection in CDI... 150 6.10 Beispiel: Method-Injection... 151 6.11 Qualifier... 152 6.11.1 Definition Qualifier... 153 6.11.2 Beispiel... 155 6.11.3 Built-In Qualifiers... 156 6.11.4 @Named Bean in EL... 157 6.11.5 @Any... 158 6.11.6 @New... 159 6.12 Interface Instance<T>... 160 6.12.1 Beispiel... 161 6.13 Stateful-Objekte... 162 6.13.1 Built-In Scope Stateful-Objekte... 163 6.13.2 @ConversationScoped... 164 6.14 CDI in Java SE... 165 6.15 Erzeugung von Bean Instanzen @Produces... 166 6.16 Beispiel: Consumer Producer... 167 6.17 Erzeugung anderer Instanzen @Produces... 168 6.18 Typsichere Java-EE-Resourcen Producer... 169 6.19 Typsichere Java-EE-Resourcen Consumer... 170 6.20 @Disposes... 171 6.21 CDI Events... 172 6.21.1 Prinzip... 172 6.21.2 POJOs... 173 6.21.3 Beispiel 1... 174 6.21.4 Beispiel 2... 175 6.22 Alternative Bean... 176 6.22.1 Beispiel... 177 6.22.2 Alternative Bean mit Angabe der Priorität... 178 6.23 Interceptors... 179 6.24 CDI Interzeptoren... 180 6.24.1 Aktivierung der CDI Interceptoren... 181 6.24.2 Composite Interceptor Binding... 182 6.25 CDI Decorator... 183 Version: 2.02 Seite 5
6.26 Stereotypen... 184 6.26.1 Beispiel: Ohne Stereotypes... 185 6.26.2 Beispiel: Einsatz von Stereotypes... 186 6.26.3 Built-In Stereotypes in JSF- @Model... 187 7 Java Persistence API... 188 7.1 Java Persistence API (JPA)... 189 7.2 Charakteristik von Entities... 190 7.3 JPA / Entities... 191 7.3.1 @Table... 192 7.3.2 @Column... 193 7.3.3 Zu persistierende Felder... 195 7.3.4 @Transient... 196 7.3.5 @Basic... 197 7.3.6 @Enumerated... 199 7.3.7 @Lob... 200 7.3.8 @Temporal... 201 7.4 Multi-table Mapping... 202 7.4.1 @SecondaryTable... 203 7.5 Eingebettete Objekte... 204 7.6 Primärschlüssel... 206 7.7 JPA-Konfiguration... 211 7.8 Der Entity Manager (1/6)... 212 7.9 Detachment... 215 7.10 Der Lebenszyklus einer Entity... 216 7.11 Operationen... 218 7.12 Callbacks bei Entities... 219 7.13 Abfragen... 220 8 Relationen... 225 8.1 Kardinalitäten... 226 8.2 One-to-One Beziehungen... 227 8.3 One-to-Many Beziehungen... 231 8.4 Many-to-Many Beziehungen... 234 8.5 Update von One-to-Many... 236 8.6 Kaskadieren von Operationen... 237 9 Vererbung... 239 9.1 Einleitung... 240 9.2 Strategien... 241 9.3 Vererbungshierarchie... 242 9.4 SINGLE_TABLE... 243 9.5 TABLE_PER_CLASS... 248 9.6 JOINED... 251 9.7 Mapped Superclass... 254 9.8 Transiente Klassen... 258 9.9 Polymorphe Abfragen... 259 9.10 Polymorphe Assoziationen... 262 9.11 Fallstricke... 263 10 Java Persistence API 2.0... 267 10.1 JPA 1.0 vs. JPA 2.0... 268 10.2 Neuigkeiten in JPA 2.0 Mapping... 269 10.3 Standard Properties in persistence.xml... 271 10.3.1 Beispiel: Persistence.xml in JPA 1.0... 272 10.3.2 Beispiel: Persistence.xml in JPA 2.0... 273 10.4 Einführung in die Criteria-API... 274 10.5 Metamodell-Klassen... 277 10.6 Hibernate Metamodell Generator... 279 Seite 6 Version: 2.02
10.7 Pfad/Join-Ausdrücke... 280 10.8 Bedingungen... 284 10.9 Parameter... 287 10.10 Rückgabewerte... 289 10.11 Fazit... 293 11 Java Server Faces 2.0... 295 11.1 MVC Model2 + Navigation... 296 11.1.1 View... 297 11.1.2 View Beispiel Ansicht... 298 11.1.3 View Beispiel... 299 11.1.4 JSF-View-Elemente... 300 11.1.5 Expression Language... 301 11.1.6 Model Konfiguration über Annotations... 302 11.1.7 Action-Methode... 303 11.1.8 Implizite Navigation... 304 11.2 Benutzeroberfläche... 305 11.2.1 Auswahl einer View-Komponente... 306 11.2.2 Basiselemente... 307 11.2.3 Anzeigen von Listen... 308 11.2.4 Komponente datatable... 309 11.2.5 Auswahl eines Elementes... 310 11.2.6 Eigenschaften der Auswahl-Elemente... 311 11.2.7 View zur Erzeugung von Auswahl-Elementen... 312 11.2.8 Model für die Personenauswahl... 313 11.2.9 Auswahl mehrerer Elemente... 314 11.2.10 Multiselect Eigenschaften... 315 11.2.11 Model für die Mehrfachauswahl... 316 11.3 Converter... 317 11.3.1 Was sind Converter?... 318 11.3.2 Standard-Converter... 319 11.3.3 IntegerConverter... 320 11.3.4 Number-Converter... 321 11.3.5 Optionen zum Number-Converter... 322 11.3.6 Converter erstellen... 323 11.3.7 Konvertierung programmieren - im Konstruktor... 324 11.3.8 Konvertierung programmieren - tostring()... 325 11.3.9 JSF-Converter... 326 11.4 Validierung... 327 11.4.1 Was ist Validierung?... 328 11.4.2 Welche Validatoren gibt es?... 329 11.4.3 required... 330 11.4.4 validatelength... 331 11.4.5 Validator programmieren... 332 11.4.6 Validator-Klasse... 333 11.4.7 Validator einsetzen... 334 11.4.8 Bean Validation... 335 12 Transaktionen... 338 12.1 Was ist eine Transaktion?... 339 12.2 Grundlegende Probleme... 340 12.3 ACID-Eigenschaften... 341 12.4 Isolation-Level... 342 12.5 Probleme bei Konkurrenzzugriff... 343 12.6 Lösung der Probleme... 344 12.7 Grenzen einer Transaktion... 345 12.8 Transaktionsmodelle... 346 12.9 Transaktionen und Applikations-Server... 347 12.10 EJBs und Transaktionen... 348 12.11 Container-Managed Transactions (CMT)... 349 Version: 2.02 Seite 7
12.12 CMT Transaktionsattribute... 350 12.13 Transaktionsattribute Required... 351 12.14 Transaktionsattribute Requires New... 352 12.15 Weitere Transaktionsattribute... 353 12.16 CMT Transaktionsgrenzen... 354 12.17 Bean-Managed Transactions (BMT)... 355 12.17.1 (BMT) - UserTransaction-Interface... 356 12.17.2 BMT Programmbeispiel... 357 12.18 CMT oder BMT?... 358 13 Bean Validierung 1.0... 359 13.1 Validierung... 360 13.1.1 Beispiel... 361 13.2 Vordefinierte Constraints... 362 13.3 Benutzerdefinierte Constraints... 364 13.4 Kaskadierung... 365 13.5 Validierungsgruppen... 366 13.5.1 Definition... 366 13.5.2 Anwendung... 367 13.6 Implizite Validierung in JPA... 368 13.7 Weitere Konfigurationsmöglichkeiten... 369 13.8 Explizite Validierung... 370 14 Security... 372 14.1 Aufgaben und Bestandteile... 373 14.2 Container Security... 374 14.3 Security Annotations... 375 14.4 Security Annotations (Beispiel)... 376 14.5 Security im DD ejb-jar.xml... 377 14.6 Security im Programmcode... 378 14.7 Zusammenfassung... 379 15 Batch Processing... 380 15.1 Motivation... 381 15.2 Stapelverarbeitung (Batch)... 382 15.3 Batch Applikationen... 383 15.4 Batch Processing (JSR 352)... 384 15.4.1 Batch Architektur... 384 15.4.2 JSR 352 - Batch Processing... 385 15.4.3 JSR 352 - Java Batch API... 386 15.4.4 JSR 352 - Java Batch API... 387 15.5 Batch Artefakte mit Java EE 7 (JSR 352)... 388 15.5.1 Batch Framework in Java EE 7... 388 15.5.2 Infrastruktur-Komponenten... 389 15.5.3 Struktur einer Batch Applikation (Job)... 390 15.5.4 Job - Konfiguration & Packaging... 391 15.5.5 Batch-Verarbeitung... 392 15.5.6 Batchlet... 393 15.5.7 Beispiel: Batchlet... 394 15.5.8 Chunk (Block)... 395 15.5.9 Standard Step Verarbeitung... 396 15.5.10 Batch Checkpoints... 397 15.5.11 Checkpoint-Policy (item)... 398 15.5.12 Checkpoint-Policy (custom)... 399 15.5.13 Checkpoint Algorithmus... 400 15.5.14 Chunk Verarbeitung mit Checkpointing... 401 15.5.15 Batch Konstrukt... 402 15.5.16 Chunk ItemReader... 403 15.5.17 Chunk ItemProcessor... 404 Seite 8 Version: 2.02
15.5.18 Chunk ItemWriter... 405 15.5.19 Parallelisierung - Partition-Map-Reduce... 406 15.5.20 Partition-Map-Reduce... 407 15.5.21 Partitionierung - statische Aufteilung... 408 15.5.22 Partitionierung - dynamische Aufteilung... 409 15.5.23 Parallelisierung durch Splits und Flows... 410 15.5.24 Properties und Parameter... 411 15.5.25 @BatchProperty... 412 15.5.26 Job XML Attribut-Substitution... 413 15.5.27 Job-Metadaten... 414 15.5.28 Batch Job starten und Status abfragen... 415 15.5.29 Batch Job Abfragen... 416 15.5.30 Batch Job Status... 417 15.5.31 Exceptions und Fehlerbehandlung... 418 15.5.32 Exceptions abfangen... 419 15.5.33 Injektion von JobContext, StepContext... 420 15.5.34 Listener... 421 16 Anhang: JAX-RS 1.0 Webservices... 422 16.1 REST... 423 16.2 RESTful Services mit Java EE... 424 16.3 Ressourcen... 425 16.4 JAX-RS Application... 426 16.5 Jersey Servlet in web.xml... 427 16.6 Application Class... 428 16.6.1 Beispiel... 429 16.7 Wichtige Annotationen... 430 16.7.1 @Path... 431 16.7.2 @Produces... 432 16.7.3 @Consumes... 433 16.8 Transformation von Daten... 434 16.9 HTTP Response Codes... 435 16.10 Services und Java-EE-Infrastruktur... 436 16.11 JAX-RS mit EJB-Unterstützung... 437 Version: 2.02 Seite 9