Sie sind auf Seite 1von 13

Oliver Ihns, Dierk Harbeck, Stefan M.

Heldt, Holger Koschek

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

Die Evolution der Enterprise JavaBeans 1.1.1 1.1.2 1.1.3

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

Aufbau des Buches 1.2.1 1.2.2

1.3

Konventionen 1.3.1 1.3.2 1.3.3 1.3.4 1.3.5 1.3.6

1.4

Die Beispielapplikation Ticket2Rock 1.4.1 1.4.2 1.4.3

I viii

Inhaltsverzeichnis

1.5 1.6
2

Verwendete Technologien und Produkte Die Website zum Buch


Leichtgewichtige, POJO-basierte Enterprise-Applikationen

29 30
31

2.1 2.2 2.3 2.4

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

POJOs und POJIs 2.5.1 2.5.2 2.5.3

2.6

Inversion of Control und Dependency Injection 2.6.1 2.6.2 2.6.3

2.7

Annotationen und Deployment-Deskriptoren 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5

2.8
3

Configuration by Exception
EJB-Komponentenarchitektur

3.1 3.2

Kurz gefasst Grundlegende Konzepte 3.2.1 3.2.2 Komponentenarchitektur Java

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

bersicht der EJB-Typen

Aufrufmodelle

Session Beans

4.1 4.2 4.3 4.4

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

Stateful Session Beans 4.5.1 4.5.2

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

4.12 Timer Service


5 Session Beans als Web Service

5.1 5.2 5.3 5.4

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

Szenarien beim Einsatz von Web Services Ein Web-Service-Client


Message-Driven Beans

6.1 6.2 6.3

Kurz gefasst Der Blick zurck Nachrichtenbasierte Kommunikation 6.3.1 6.3.2 Charakteristika und Vorteile Kommunikationsmodelle

147 147 148 150 151

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

Charakteristika von Message-Driven Beans 6.5.1 6.5.2

6.6 6.7 6.8

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

6.10 Timer Service 6.11 Ein JMS-Client 6.12 Message Linking


7 Entity Beans

7.1 7.2 7.3


8

Kurz gefasst Der Blick zurck Aus Entity Beans werden Persistent Entities
Persistenzabbildung

181 181 182


183

8.1 8.2 8.3 8.4

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

Persist my POJO! 8.5.1 8.5.2

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

Deployment-Deskriptoren 8.7.1 8.7.2

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

Abbildung in Datenbanktabellen 8.10.1 Table 8.10.2 Column

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

Abfragen mit JPQL

9.1 9.2 9.3

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

Java Persistence Query Language (JPQL) 9.4.1 9.4.2 9.4.3

xiv

Inhaltsverzeichnis

9.4.4 9.4.5 9.4.6 9.4.7


10

ORDER BY GROUP BY HAVING Schreibende Massenoperationen

311 312 312 313


315

Der Lebensraum der Enterprise Beans

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

315 316 316 317 317 317 318 318

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

357 357 358

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

12.5 Interzeptoren fr Geschftsmethoden 12.5.1 Definition 12.5.2 Verwendung 12.5.3 InvocationContext

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

12.10 Sind Interzeptoren und Entity Listener aspektorientiert?. . 402


13 Timer Service 405

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

419 419 420 421 422

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)

422 422 424 425 426

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

Testen Testen Testen Testen Testen Testen Testen Testen

von von von von von von von von

Stateless Session Beans Stateful Session Beans Message-Driven Beans Persistent Entities Transaktionen Interzeptoren Lebenszyklusmethoden Timer-Services

Migration von EJB 2.x nach 3.0

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

455 455 456 456 458 461

I xviii

Inhaltsverzeichnis

16.3.4 16.3.5 16.3.6 16.3.7

Migration Migration Migration Migration

von von von von

Message-Driven Beans Entity Beans Data Transfer Objects Clients

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

Das könnte Ihnen auch gefallen