[ Inhaltsverzeichnis ]
 
Inhalt

1 Einleitung
1.1 Für wen dieses Buch ist
1.2 Für wen dieses Buch nicht ist
1.3 Ein Wort an Sie als Projektleiter/Projektmitglied
1.4 Organisation des Buches
1.5 Konventionen
1.5.1 Gleichberechtigung von Mann und Frau
1.5.2 Notation
1.5.3 Literaturverweise
1.5.4 Quellcode
1.5.5 Piktogramme
1.6 Verwendung von Anglizismen
1.7 Begleitende Hilfestellungen
1.7.1 Verwendete Technologien und Produkte
1.7.2 Beispiele
1.7.3 Übungen
1.7.4 Musterlösungen
1.7.5 Die Begleit-Website

2 Verteilte Softwaresysteme
2.1 Einführung
2.1.1 Was ist ein verteiltes System?
2.1.2 Merkmale und Motivationsgründe verteilter Systeme
2.2 Komponenten
2.3 Kommunikation in verteilten Systemen
2.3.1 Entfernte Methodenaufrufe
2.3.2 Nachrichtenbasierte Kommunikation
2.4 Zusammenfassung

3 Einführung in Enterprise JavaBeans
3.1 Was ist oder sind „Enterprise JavaBeans“?
3.1.1 Synonyme Verwendung des Begriffs Enterprise JavaBeans
3.1.2 Technologische und architektonische Einordnung von Enterprise JavaBeans
3.1.3 EJB-Komponenten benötigen eine Laufzeitumgebung
3.1.4 Kerneigenschaften EJB-basierter Applikationen
3.2 Rollen im Entwicklungs- und Lebenszyklus
3.2.1 Enterprise Bean Provider
3.2.2 Application Assembler
3.2.3 Deployer
3.2.4 EJB Server Provider
3.2.5 EJB Container Provider
3.2.6 System Administrator
3.3 Zusammenfassung

4 EJB-Architektur
4.1 Allgemein
4.1.1 Java 2 Platform, Enterprise Edition (J2EE)
4.1.2 J2EE-Applikationsserver
4.1.3 EJB-Container
4.1.4 Schnittstellen definieren die Kommunikation
4.2 EJB-Typen im Überblick
4.2.1 Session Bean
4.2.2 Entity Bean
4.2.3 Message-driven Bean
4.2.4 Übersicht der Muster
4.3 Aufbau einer EJB
4.3.1 Home Interface
4.3.2 Component Interface
4.3.3 Bean-Klasse
4.3.4 Primary Key-Klasse
4.3.5 Deployment-Deskriptor
4.3.6 Elemente einer EJB-Komponente im Überblick
4.4 Aufrufmodelle
4.4.1 Synchron, entfernt
4.4.2 Synchron, lokal
4.4.3 Asynchron, nachrichtenbasiert
4.4.4 Aufrufmodelle und EJB-Typen im Überblick

5 Session Beans
5.1 Einführung
5.1.1 Charakteristik einer Session Bean
5.1.2 Stateless Session Beans
5.1.3 Stateful Session Beans
5.1.4 Stateless und Stateful Session Beans – ein Vergleich
5.2 Session Beans im Überblick
5.2.1 Elemente einer Session Bean
5.2.2 Die Bean-Instanz
5.2.3 Das Home-Objekt
5.2.4 Das EJB-Objekt
5.2.5 Erzeugen und Löschen von Enterprise JavaBeans
5.3 Home Interface
5.3.1 Remote Home Interface
5.3.2 Local Home Interface
5.4 Component Interface
5.4.1 Remote Interface
5.4.2 Local Interface
5.5 Bean-Klasse
5.5.1 Methoden aus dem Component Interface
5.5.2 Methoden des Home Interfaces
5.5.3 Methoden aus dem Interface javax.ejb.SessionBean
5.5.4 Der EJB-Kontext
5.6 Deployment
5.6.1 Erstellen des Deployment-Deskriptors
5.6.2 Packen und Generieren
5.6.3 Deployment der EJB
5.7 Beispiel: Entwicklung der Stateless Session Bean „FlugSuche“
5.7.1 Deployment der Stateless Session Bean
5.8 Zugriff mit dem Client
5.8.1 Zugriff auf den JNDI-Dienst
5.8.2 Verbinden zum Home Objekt
5.8.3 Referenz auf das EJB-Objekt holen
5.8.4 Aufruf von Geschäftsmethoden
5.8.5 Beenden der Verbindung zur EJB
5.8.6 Zusammenfassung
5.9 Beispiel: Clientzugriff auf eine Stateless Session Bean
5.9.1 Übersetzen und Ausführen des Clients
5.10 Übung: Entwicklung einer Stateless Session Bean
5.10.1 Das Home Interface
5.10.2 Das Remote Interface
5.10.3 Die Bean-Klasse
5.10.4 Deployment der Übungsaufgabe
5.10.5 Lösung
5.11 Beispiel: Entwicklung der Stateful Session Bean „Reservierer“
5.12 Übung: Entwicklung einer Stateful Session Bean
5.12.1 Die Bean Klasse
5.12.2 Der Deployment-Deskriptor
5.12.3 Deployment der Übungsaufgabe
5.12.4 Lösung
5.13 Lebenszyklus von Session Beans
5.13.1 Lebenszyklus von Stateless Session Beans
5.13.2 Lebenszyklus von Stateful Session Beans
5.14 Session Beans als Web Services
5.14.1 Web Services
5.14.2 Das Web Service Endpoint Interface
5.14.3 Beispiel
5.14.4 Ein Client für den Web Service „FlugSuche“

6 Entity Beans
6.1 Einführung in Entity Beans
6.1.1 Charakteristik einer Entity Bean
6.1.2 Konkurrierende Zugriffe
6.1.3 Entity Bean vs. Session Bean
6.2 Elemente einer Entity Bean
6.2.1 Home Interface
6.2.2 Component Interface
6.2.3 Bean-Klasse
6.2.4 Primary Key
6.2.5 Timer Service
6.2.6 Deployment
6.2.7 Zugriff mit dem Client
6.3 Lebenszyklus von Entity Beans
6.3.1 Zustand „Does not exist“
6.3.2 Zustandsübergang von „does not exist“ nach „pooled“
6.3.3 Zustand „pooled“
6.3.4 Zustandsübergang von „pooled“ nach „ready“
6.3.5 Zustand „ready“
6.3.6 Zustandsübergang von „ready“ nach „pooled“
6.4 Einführendes Beispiel
6.5 Bean-Managed Persistence
6.5.1 Erzeugen von BMP Entity Beans
6.5.2 Synchronisation mit der Persistenzschicht
6.5.3 Finden von vorhandenen BMP Entity Beans
6.5.4 Löschen von BMP Entity Beans
6.5.5 Checkliste BMP Bean-Klasse
6.6 Datenbank Connection Pooling
6.7 BMP-Beispiel
6.8 BMP-Übungsaufgabe
6.8.1 Die Bean-Klasse
6.8.2 Deployment der Übungsaufgabe
6.8.3 Lösung
6.9 Container-Managed Persistence
6.9.1 Dependent Value-Klassen
6.9.2 Unterschiede zwischen CMP und BMP
6.9.3 Erzeugen von CMP Entity Beans
6.9.4 Synchronisation mit der Persistenzschicht
6.9.5 Löschen von CMP Entity Beans
6.9.6 Finden vorhandener CMP Entity Beans
6.9.7 Checkliste CMP Bean-Klasse
6.10 Enterprise JavaBeans Query Language
6.10.1 SELECT
6.10.2 FROM
6.10.3 WHERE
6.10.4 ORDER BY
6.11 CMP-Beispiel
6.12 CMP-Übungsaufgabe
6.12.1 Die Bean-Klasse
6.12.2 Die Deployment-Deskriptoren
6.12.3 Deployment der Übungsaufgabe
6.12.4 Lösung
6.13 Container-Managed Relationships
6.13.1 Kardinalität in Beziehungen
6.13.2 Richtung von Beziehungen
6.13.3 Deklaration von Beziehungen
6.13.4 Strategien beim Laden von Beziehungsgeflechten
6.13.5 Kaskadierendes Löschen in Beziehungen
6.13.6 EJB QL – Navigation in Beziehungen
6.14 Erweitertes CMP/CMR Beispiel
6.15 CMR-Übungsaufgabe
6.15.1 Die Bean-Klasse
6.15.2 Die Deployment-Deskriptoren
6.15.3 Deployment der Übungsaufgabe
6.15.4 Lösung

7 Message-driven Beans
7.1 Messaging
7.1.1 Modelle der nachrichtenbasierten Kommunikation
7.2 Java Message Service
7.2.1 Das Service Provider Interface
7.2.2 Die JMS API
7.3 Charakteristik einer Message-driven Bean
7.3.1 Transaktionalität
7.3.2 Typen von Message-driven Beans
7.4 Elemente einer Message-driven Bean
7.5 Bean-Klasse
7.5.1 Das Interface javax.ejb.MessageDrivenBean
7.5.2 Das Interface javax.jms.MessageListener
7.5.3 Connector Interfaces
7.5.4 Checkliste – Bean Klasse
7.6 Deployment
7.6.1 Der Standard-Deployment-Deskriptor
7.6.2 Der herstellerspezifische Deployment-Deskriptor
7.7 Beispiel
7.7.1 Beispiel einer JMS Message-driven Bean
7.7.2 Beispiel einer Connector-based Message-driven Bean
7.8 Übung: Entwicklung einer JMS Message-driven Bean
7.8.1 Die Bean-Klasse
7.8.2 Deployment der Übungsaufgabe
7.8.3 Lösung
7.9 Lebenszyklus von Message-driven Beans
7.10 Message Linking
7.11 Message-driven Beans als Web Services
7.11.1 OnewayListener JAXM-Message-driven Beans
7.11.2 ReqRespListener JAXM-Message-driven Beans
7.11.3 JAXM-basierte Nachrichtenübertragung

8 Timer Service
8.1 Einführung
8.2 Die Timer Service API
8.2.1 Das Interface javax.ejb.TimedObject
8.2.2 Das Interface javax.ejb.TimerService
8.2.3 Das Interface javax.ejb.Timer
8.3 Timer Service und Transaktionen
8.4 Timer Service und EJB-Typen
8.4.1 Stateless Session Bean Timer
8.4.2 Entity Bean Timer
8.4.3 Message-driven Bean Timer
8.5 Beispiel

9 Transaktionen
9.1 Grundlagen der Transaktionsverarbeitung
9.1.1 Die ACID-Eigenschaften von Transaktionen
9.1.2 Transaktionale Isolation
9.1.3 Transaktionsmodelle
9.1.4 Der TP-Monitor
9.1.5 Zusammenfassung
9.2 EJBs und Transaktionen
9.2.1 Der Applikationsserver als TP-Monitor
9.2.2 Deklarative Abgrenzung von Transaktionen
9.2.3 Programmatische Abgrenzung von Transaktionen
9.2.4 Deklarativ oder Programmatisch?
9.2.5 Transaktionen und Exceptions
9.2.6 EJBContext Rollback-Methoden
9.2.7 Transaktionale Stateful Session Beans
9.2.8 JMS in Transaktionen
9.2.9 EJBs und transaktionale Isolation
9.2.10 Übung

10 EJB-Konfiguration
10.1 Einführung
10.2 Referenzen auf Connection Factories
10.2.1 JNDI-Namens-Mapping beim Deployment
10.2.2 Message Destination References
10.3 Beispiel Referenzen auf Connection Factories
10.4 Übungsaufgabe Referenzen auf Connection Factories
10.4.1 Die Deployment-Deskriptoren
10.4.2 Die Bean-Klasse
10.4.3 Deployment der Übungsaufgabe
10.4.4 Lösung
10.5 Referenzen auf EJBs
10.5.1 JNDI-Namens-Mapping beim Deployment
10.6 Beispiel Referenzen auf EJBs
10.7 Übungsaufgabe Referenzen auf EJBs
10.7.1 Der Deployment-Deskriptor
10.7.2 Die Bean-Klasse
10.7.3 Deployment der Übungsaufgabe
10.7.4 Lösung
10.8 Referenzen auf Web Services
10.8.1 JNDI-Namens-Mapping beim Deployment
10.9 Environment Properties
10.10 Beispiel Environment Properties
10.11 Übungsaufgabe Environment Properties
10.11.1 Der Deployment-Deskriptor
10.11.2 Die Bean-Klasse
10.11.3 Deployment der Übungsaufgabe
10.11.4 Lösung
10.12 Abschluss

11 Sicherheit
11.1 Einführung
11.2 Deklarative Sicherheit
11.2.1 Schritt 1: Security Role deklarieren
11.2.2 Schritt 2: Method Permission deklarieren
11.2.3 Unchecked Methods
11.2.4 Exclude List
11.3 Programmatische Sicherheit
11.3.1 Schritt 1: Security Role deklarieren
11.3.2 Schritt 2: Security Role Reference deklarieren
11.3.3 Schritt 3: Autorisierung im Programmcode durchführen
11.4 Deklarativ oder programmatisch?
11.5 Die Sicherheitsidentität einer EJB
11.6 Authentifizierung und Autorisierung mit JAAS
11.7 Beispiel
11.8 Übungsaufgabe
11.8.1 Der Deployment-Deskriptor
11.8.2 Deployment der Übungsaufgabe
11.8.3 Lösung
11.9 Abschluss

12 Index

13 Literaturverzeichnis

 

1
2
2
2
3
5
5
5
5
5
6
7
7
8
9
10
19
20

21
22
23
25
28
31
33
41
42

45
46
48
48
50
51
56
57
58
58
59
60
61
61

63
65
66
72
73
79
82
83
86
87
88
89
90
108
134
137
137
139
140
142
145
149
151

153
155
155
156
157
160
161
162
164
164
165
167
169
169
173
176
177
180
183
184
186
187
189
192
192
200
202
202
207
207
208
209
211
211
212
213
215
217
217
218
218
218
219
220
220
228
229
229
230
230
230
230
232
235
236
239
240
241

245
247
247
249
252
254
255
262
263
278
283
283
284
287
288
288
288
289
290

291
291
301
303
307
311
314
316
318
319
321
322
323
324
324
325
326
332
333
334
335
338
339
344
346
347
350
350
360
360
361
363
363
364
364
366
366
373
374
376
376
380
380
381
382
383

385
387
389
392
392
392
395
398
398
400
400
401
403
404
404
405
405
410
410
410
417
419
420
420
421
422
424
428
429
430
430

433
434
434
435
436
438
439
439
439
440
440
441

445
446
447
450
454
457
459
459
461
464
483
500
500
501
504
508
513
515

519
521
524
529
531
531
532
532
534
534
535
535
540
541
542
542
543
543
544
545
548
548
551
552
552
553
554
554
555

557
558
559
560
560
564
565
566
567
568
568
570
571
574
576
579
580
581
582
582

583

591