Beruflich Dokumente
Kultur Dokumente
EJB 3 professionell
Grundlagen- und Expertenwissen zu Enterprise JavaBeans 3 fr Einsteiger, Umsteiger und Fortgeschrittene
Unter Mitarbeit von Jo Ehm, Carsten Sahling und Roman Schlmmer Mit einem Geleitwort von Floyd Marinescu
dpunkt.verlag
Inhaltsverzeichnis
Geleitwort Vorwort
1 5
Fr wen ist dieses Buch? Von wem ist dieses Buch? Danksagungen Widmung Ihre Kommentare und Anmerkungen
1 Einleitung-Jetzt wird's leicht!
5 6 8 9 9
11
1.1
11
Der Fluch der Komplexitt 12 Kritik an den frheren EJB-Versionen 12 Ein neues Denken schafft eine neue Architektur . . . 13 14 15 16 21 21 22 22 22 23 23 24 24 25 26 Die Themenbereiche Die Kapitel: Struktur und Inhalte Notation Literaturverweise bzw. Referenzen Quellcode Piktogramme Verwendung von Anglizismen Gleichberechtigung in der Sprache Kurzbeschreibung Anwendungsflle Fachliche Entitten
1.2
1.3
1.4
I viii
Inhaltsverzeichnis
1.5 1.6
2
29 30
31
Kurz gefasst Der Blick zurck Einleitung Hauptziele fr EJB 3.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 Motive Einfach machen! Vereinfachung der Mikroarchitektur von EJB-Komponenten Vereinfachung des Entwicklungsprozesses Vereinfachung der Nutzung von EJB-Komponenten Neuentwicklung einer leistungsfhigen Persistenzlsung POJO POJI Unterschiede zwischen EJB 3.0 und EJB 2.x Ziele im Kontext von EJB 3.0 Auswirkungen auf die EJB-3.0-Architektur Hollywood, wir kommen! - ein Beispiel Einfhrung Deployment-Deskriptoren - so schlecht wie ihr Ruf? Annotationen Ein Pldoyer fr Deployment-Deskriptoren Der Deployment-Deskriptor hat das letzte Wort . .
31 31 32 35 35 36 36 37 38 39 40 40 41 41 42 43 44 44 46 46 47 47 51 52 52
55
2.5
2.6
2.7
2.8
3
Configuration by Exception
EJB-Komponentenarchitektur
3.1 3.2
55 55 56 57
Inhaltsverzeichnis
171
3.2.3 3.2.4 3.2.5 3.3 3.3.1 3.3.2 3.3.3 3.4 3.4.1 3.4.2 3.4.3 3.4.4
4
Java SE Der Java-EE-Applikationsserver Der EJB-Container Session Bean Message-Driven Bean Persistent Entity Aufrufmodell: synchron, entfernt Aufrufmodell synchron, lokal Aufrufmodell asynchron, nachrichtenbasiert Aufrufmodelle und EJB-Typen im berblick
59 59 61 67 68 69 71 71 72 76 . . . 79 84
85
Aufrufmodelle
Session Beans
Kurz gefasst Der Blick zurck Einfhrung Stateless Session Beans 4.4.1 4.4.2 4.4.3 Transaktionen Instanz-Pooling Web Services Aktivierung und Passivierung Transaktionen
85 85 86 87 88 89 89 89 91 92 92 93 94 95 96 97 98 98 98 99 99
4.5
4.6 4.7
Stateless und Stateful Session Beans im Vergleich Mikroarchitektur einer Session Bean 4.7.1 Namenskonventionen 4.7.2 Zusammenspiel der Elemente 4.7.3 Erzeugen von Session Beans 4.7.4 Lschen von Session Beans Lebenszyklus von Stateless Session Beans 4.8.1 4.8.2 4.8.3 4.8.4 Zustand does not exist bergang von does not exist zu method-ready pool Zustand method-ready pool bergang von method-ready pool zu does not exist
4.8
nr
Inhaltsverzeichnis
4.9
Lebenszyklus von Stateful Session Beans 4.9.1 4.9.2 4.9.3 4.9.4 4.9.5 Zustand does not exist bergang von does not exist zu methodready Zustnde method-ready und method-ready in TX Zustand passive bergang in den Zustand does not exist
100 101 101 101 102 103 104 107 110 115 118 119 121 122
123
4.10 Business Interface 4.11 Bean-Klasse 4.11.1 4.11.2 4.11.3 4.11.4 4.11.5 Deklarative Transaktionalitt Transaktionen in Handarbeit Transaktionen im Ausnahmezustand EJB-Kontext Checkliste
Kurz gefasst Der Blick zurck Was ist ein Web Service? Stateless Session Beans als Web Service 5.4.1 5.4.2 5.4.3 5.4.4 5.4.5 5.4.6 5.4.7 @WebService SOAPBinding @WebMethod Oneway WebParam WebResult HandlerChain
123 123 124 126 128 132 139 140 140 143 145 145 146
147
5.5 5.6
6
Kurz gefasst Der Blick zurck Nachrichtenbasierte Kommunikation 6.3.1 6.3.2 Charakteristika und Vorteile Kommunikationsmodelle
Inhaltsverzeichnis
6.4
Java Message Service (JMS) 6.4.1 6.4.2 Service Provider Interface JMS API JMS Message-Driven Beans Connector-based Message-Driven Beans
153 153 154 156 159 159 161 161 162 163 165 167 169 170 170 172 173 174
181
6.5
Lebenszyklus von Message-Driven Beans Transaktionalitt Bean-Klasse 6.8.1 @MessageDriven 6.8.2 @ActivationConfigProperty 6.8.3 Message-Listener-Interface 6.8.4 Beantworten von Nachrichten 6.8.5 Checkliste Deployment-Deskriptor
6.9
Kurz gefasst Der Blick zurck Aus Entity Beans werden Persistent Entities
Persistenzabbildung
Kurz gefasst Der Blick zurck Persistenz? Abbildung? Persistent Entities 8.4.1 8.4.2 8.4.3 8.4.4 Lightweight Persistent Domain Object Lebenszyklus Annotation oder Deployment-Deskriptor? Beispiel
183 183 184 186 187 188 188 189 189 189 190
8.5
Inhaltsverzeichnis
8.6
Grundkonzepte 8.6.1 8.6.2 8.6.3 8.6.4 Persistence Provider Entity-Manager Persistenzeinheit Persistenzkontext persistence.xml orm.xml
193 193 194 197 198 200 200 202 203 204 204 205 205 206 207 207 207 208 208 208 208 209 209 210 212 212 212 213 214 215 215 217 218 218 225
8.7
8.8
Arbeiten mit dem Entity-Manager 8.8.1 8.8.2 Dauerhaftes Speichern in der Datenbank (persist) Aktualisieren des persistenten Objektzustands (merge) 8.8.3 Lschen einer Persistent Entity (remove) 8.8.4 Finden einerPersistent Entity in der Datenbank (find, getReference) 8.8.5 Sofortiges Ausfhren der Datenbankoperation (flush) 8.8.6 Blockieren einer Persistent Entity (lock) 8.8.7 Aktualisieren des Zustands der Objektinstanz (refresh) 8.8.8 Leben im Persistenzkontext (clear, contains) . . . . 8.8.9 Abfragen (create...Query) 8.8.10 Transaktionen (joinTransaction) 8.8.11 Zugriff auf den Persistence Provider (getDelegate) 8.8.12 Beenden des Entity-Managers (close)
8.9
Abbildung von Datentypen 8.9.1 8.9.2 8.9.3 8.9.4 8.9.5 8.9.6 Zugriff auf persistente Felder Einfache Datentypen (@Basic) Eingebettete Objekte (@Embeddable) Groe Objekte (@Lob) Datum und Zeit (Temporal) Aufzhlungen (Enumerated)
8.10
8.11
Primrschlssel 8.11.1 Einfache Primrschlssel (@Id) 8.11.2 Zusammengesetzte Primrschlssel (IdClass, Embeddedld) 8.11.3 Generierung von Primrschlsseln
Inhaltsverzeichnis
xiii
8.12 Abbildung von Objektbeziehungen 8.12.1 Die glorreichen Sieben 8.12.2 Unidirektionale Eins-zu-Eins-Beziehung 8.12.3 Bidirektionale Eins-zu-Eins-Beziehung 8.12.4 Unidirektionale Eins-zu-Viele-Beziehung 8.12.5 Bidirektionale Eins-zu-Viele-Beziehung 8.12.6 Unidirektionale Viele-zu-Eins-Beziehung 8.12.7 Bidirektionale Viele-zu-Eins-Beziehung 8.12.8 Unidirektionale Viele-zu-Viele-Beziehung 8.12.9 Bidirektionale Viele-zu-Viele-Beziehung 8.12.10Kaskadieren von Persistenzoperationen 8.13 Eingebettete Objekte 8.14 Abbildung auf mehrere Datenbanktabellen 8.14.1 Single-Table-Mapping 8.14.2 Multi-Table-Mapping 8.15 Vererbung und Polymorphie 8.15.1 Erben und Vererben 8.15.2 single table per class hierarchy strategy (SINGLEJTABLE) 8.15.3 single table per concrete entity class strategy (TABLE_PER_CLASS) 8.15.4 joined subclass strategy (JOINED) 8.16 Fetching-Strategien 8.16.1 8.16.2 8.16.3 8.16.4
9
231 231 234 237 239 243 246 247 247 249 252 255 258 258 259 263 264 266 272 275 280 281 281 282 285
287
Eager Load Lazy Load Deklaration der Fetching-Strategie Lazy Load und Detached Objects
Kurz gefasst Der Blick zurck Abfragen 9.3.1 9.3.2 9.3.3 Queries Named Queries Native Queries SELECT FROM WHERE
287 287 288 288 294 295 300 300 305 308
9.4
xiv
Inhaltsverzeichnis
10.1 Kurz gefasst 10.2 Der Blick zurck 10.3 Der Enterprise Naming Context 10.4 Konfigurationsalternativen ' 10.4.1 Annotationen 10.4.2 Deployment-Deskriptoren 10.4.3 Kombination von Annotationen und Deployment-Deskriptoren 10.5 Arbeiten mit dem ENC 10.5.1 10.5.2 10.5.3 10.5.4 10.5.5
Bestckung mittels Deployment-Deskriptoren . . . 319 Bestckung mittels Annotationen 320 Zugriff via JNDI-Lookup 320 Zugriff via EJBContext 321 Dependency Injection mit DeploymentDeskriptoren 322 10.5.6 Dependency Injection mit Annotationen 323 326 327 327 332 337 340 343 348 352 352
357
10.6 Auswirkungen auf den Softwaretest 10.7 Ressourcen-Typen 10.7.1 10.7.2 10.7.3 10.7.4 10.7.5 10.7.6 10.7.7 10.7.8
11
Enterprise Beans (@EJB) Extern verwaltete Ressourcen (Resource) Resource Environment Entries (@Resource) Umgebungsvariablen (Resource) Persistenzkontext (@PersistenceContext) Persistenzeinheiten (@PersistenceUnit) Message Destinations Web Services (@WebServiceRef)
Callback-Mechanismen
11.1 Kurz gefasst 11.2 Der Blick zurck 11.3 Inversion of Control
Inhaltsverzeichnis
xv I
11.4 Deklaration einer Callback-Methode 11.4.1 11.4.2 11.4.3 11.4.4 Callback-Annotationen Deklaration im Deployment-Deskriptor Fr jede Bean die passenden Callbacks Regeln fr Callback-Methoden
359 359 360 362 362 364 365 366 368 368 369 370 371 371 372 372 372 373 376 376 377 377
379
11.5 Aufrufreihenfolge fr Callback-Methoden 11.6 Callbacks fr Stateless Session Beans 11.6.1 @PostConstruct 11.6.2 PreDestroy 11.7 Callbacks fr Stateful Session Beans 11.7.1 @PostConstruct und @PreDestroy 11.7.2 PrePassivate 11.7.3 @PostActivate 11.8 Callbacks fr Message-Driven Beans 11.8.1 @PostConstruct und @PreDestroy 11.8.2 @PostActivate und @PrePassivate werden ignoriert 11.9 Callbacks fr Persistent Entities 11.9.1 11.9.2 11.9.3 11.9.4 11.9.5
12
Aufrufreihenfolge im Objektverbund @PrePersist und PostPersist PreUpdate und PostUpdate PreRemove und PostRemove PostLoad
Interzeptoren
12.1 Kurz gefasst 12.2 Der Blick zurck 12.3 Was ist aspektorientierte Programmierung? 12.4 Klassifikation 12.4.1 12.4.2 12.4.3 12.4.4 12.4.5 Interzeptoren fr Geschftsmethoden Interzeptoren fr Lebenszyklus-Ereignisse Default-Interzeptoren Entity Listener Default Entity Listener
379 380 380 382 383 383 384 384 385 385 385 387 390
I xvi
Inhaltsverzeichnis
12.5.4 Aufrufreihenfolge 390 12.5.5 Ausnahmebehandlung 392 12.5.6 @AroundInvoke-Methode in der Bean-Klasse . . . 392 12.6 Interzeptoren fr Lebenszyklus-Ereignisse 12.6.1 12.6.2 12.6.3 12.6.4 Definition Verwendung Aufrufreihenfolge Ausnahmebehandlung 393 393 394 394 395 396 397 397 399 400 401
12.7 Default-Interzeptoren 12.8 Entity Listener 12.8.1 Definition 12.8.2 Verwendung 12.8.3 Aufrufreihenfolge 12.9 Default Entity Listener
13.1 Kurz gefasst 13.2 Der Blick zurck 13.3 Timer Service API 13.3.1 Die Timeout-Methode 13.3.2 Das Interface javax.ejb.TimerService 13.3.3 Das Interface javax.ejb.Timer 13.4 Timer Service und Transaktionen 13.5 Timer Service und EJB-Typen 13.5.1 Stateless Session Bean Timer 13.5.2 Message-Driven Bean Timer 13.5.3 Timer und Entitten 13.6
14
405 406 407 409 410 412 413 413 414 415 416 417
419
Checkliste
Sicherer Zugriff auf EJB-Komponenten
14.1 Kurz gefasst 14.2 Der Blick zurck 14.3 berblick 14.4 Authentifizierung 14.5 Sicherheitsrollen
Inhaltsverzeichnis
xvii
14.6 Verwendung von Rollen 14.6.1 RolesAllowed 14.6.2 PermitAll 14.6.3 DenyAll 14.7 Ausfhren in einem anderen Kontext (@RunAs)
14.8 Identitt von Message-Driven Beans und Timer Services. . 427 14.9 Programmgesteuerter Zugriff auf den Security-Kontext. . . 427 14.10 Regeln fr Security-Annotationen
15 Testen von EJB-Komponenten
429
431
15.1 Kurz gefasst 15.2 Dies ist kein Buch ber Softwaretests! 15.3 Der Blick zurck 15.4 Warum testen? 15.5 Wann testen? 15.6 Wie und wo testen? 15.6.1 Akzeptanztests und fachliche Tests 15.6.2 Integrative Tests 15.6.3 Last- und Performanztests 15.7 Testen von Enterprise Beans 15.7.1 15.7.2 15.7.3 15.7.4 15.7.5 15.7.6 15.7.7 15.7.8
16
431 431 432 433 433 435 436 436 437 438 440 441 442 443 448 449 452 454
455
Stateless Session Beans Stateful Session Beans Message-Driven Beans Persistent Entities Transaktionen Interzeptoren Lebenszyklusmethoden Timer-Services
16.1 Kurz gefasst 16.2 Der Blick zurck 16.3 Sanfte Migration 16.3.1 Gleichzeitiger Betrieb von 2.x~ und 3.0-Komponenten 16.3.2 Kommunikation zwischen 2.x- und 3.0-Komponenten 16.3.3 Migration von Session Beans
I xviii
Inhaltsverzeichnis
468 471 476 477 478 479 480 481 482 482 483 484 485 485 486 487 487 488 489 489 490 490 491 492
495 499
16.4 Der Einfluss von EJB 3.0 auf J2EE-Entwurfsmuster 16.4.1 Business Delegate 16.4.2 Session Facade 16.4.3 Message Facade / Service Activator 16.4.4 EJB Command 16.4.5 EJB Home Factory / Service Locator 16.4.6 Business Interface 16.4.7 Data Transfer Object (DTO) / Value Object . . . 16.4.8 DTO Factory 16.4.9 Data Transfer Hash Map 16.4.10 Value List Handler 16.4.11 Generic Attribute Access 16.4.12 Data Transfer Row Set 16.4.13 Composite Entity 16.4.14 Dual Persistent Entity Bean 16.4.15 Data Access Command Bean / Data Access Object (DAO) 16.4.16 JDBC for Reading / Fast Lane Reader 16.4.17 Version Number 16.4.18 Muster zur Generierung von Primrschlsseln . 16.4.19 Fazit
17 18 Literatur - offline und online Stichwortverzeichnis