Inhalt | 6 |
Vorwort | 16 |
Danksagungen | 19 |
Über dieses Buch | 21 |
Teil 1 Der JBoss-Anwendungsserver | 28 |
1 Wählen Sie JBoss | 29 |
1.1 Einführung in JBoss | 30 |
1.1.1 Was ist JBoss? | 30 |
1.1.2 Die Produkte der JEMS-Linie | 32 |
1.1.3 Warum ist JBoss AS so populär? | 33 |
1.2 JBoss AS installieren | 35 |
1.2.1 Die Installation vorbereiten | 36 |
1.2.2 Von der Binärdistribution installieren | 37 |
1.2.3 Den JEMS-Installer verwenden | 38 |
1.3 Die Struktur der Installationsverzeichnisse | 40 |
1.3.1 Das bin-Verzeichnis | 40 |
1.3.2 Das client-Verzeichnis | 41 |
1.3.3 Das docs-Verzeichnis | 42 |
1.3.4 Das lib-Verzeichnis | 42 |
1.3.5 Das server-Verzeichnis | 42 |
1.3.6 Serverkonfigurationen verstehen | 43 |
1.3.7 Die Struktur der Konfiguration | 45 |
1.3.8 Die Konfiguration anpassen | 47 |
1.4 Den Server starten und anhalten | 48 |
1.4.1 Den Server starten | 48 |
1.4.2 Eine andere Konfiguration starten | 50 |
1.4.3 Prüfen, ob der Server läuft | 50 |
1.4.4 Den Server anhalten | 51 |
1.5 Anwendungen auf dem Server bereitstellen | 51 |
1.5.1 Die Anwendung erstellen | 52 |
1.5.2 Die Anwendung bereitstellen | 54 |
1.5.3 Eine bereitgestellte Anwendung entfernen | 55 |
1.6 Zusammenfassung | 56 |
1.7 Quellen | 57 |
2 JBoss AS verwalten | 58 |
2.1 Die Architektur von JBoss AS | 59 |
2.1.1 Der Microcontainer | 59 |
2.1.2 JMX | 61 |
2.2 Den Anwendungsserver konfigurieren | 63 |
2.2.1 Logging konfigurieren | 64 |
2.2.2 Verzeichnisspeicherorte konfigurieren | 68 |
2.2.3 Systemeigenschaften definieren | 69 |
2.3 Die Verwaltungstools | 71 |
2.3.1 Die JMX-Konsole | 71 |
2.3.2 Die Twiddle-Utility | 73 |
2.4 Einige interessante MBeans | 74 |
2.4.1 Systemeigenschaften anzeigen | 75 |
2.4.2 JNDI-Namespaces anzeigen | 75 |
2.4.3 Logging-Ebenen ändern | 76 |
2.4.4 Den Threadpool vergrößern | 77 |
2.4.5 Informationen über den Anwendungsserver beschaffen | 77 |
2.5 Zusammenfassung | 77 |
2.6 Quellen | 78 |
3 Anwendungen bereitstellen | 79 |
3.1 Bereitstellung verstehen | 80 |
3.1.1 Eine Anwendung bereitstellen | 80 |
3.1.2 Anwendungen verpacken | 81 |
3.1.3 Anwendungstypen | 82 |
3.1.4 Die Reihenfolge der Bereitstellung | 84 |
3.1.5 Optionen für die Bereitstellungskonfiguration | 85 |
3.2 Wie Klassen geladen werden | 88 |
3.2.1 Multiple Klassenlader | 89 |
3.2.2 Scoping von Klassen | 90 |
3.2.3 Loader-Repositories | 91 |
3.3 Häufige Bereitstellungsfehler beheben | 92 |
3.3.1 Class not found-Exception | 92 |
3.3.2 Doppelte JAR-Dateien | 93 |
3.3.3 Zip File-Fehler | 94 |
3.3.4 Class Cast-Exception | 94 |
3.4 Diverse Anwendungen bereitstellen | 95 |
3.4.1 Datenquellen bereitstellen | 95 |
3.4.2 Ein Hibernate-Archiv bereitstellen | 101 |
3.5 Zusammenfassung | 107 |
3.6 Quellen | 107 |
4 Sicherheit für Anwendungen | 108 |
4.1 Was ist Sicherheit? | 109 |
4.1.1 Anwendungssicherheit verstehen | 109 |
4.1.2 Authentifizierung verstehen | 111 |
4.1.3 Autorisierung verstehen | 112 |
4.1.4 Sicherheit konfigurieren | 114 |
4.1.5 Dynamische Login-Konfiguration | 116 |
4.1.6 Sicherheit auf dem Server protokollieren | 117 |
4.2 Sichere Kommunikation | 117 |
4.2.1 Symmetrische und asymmetrische Verschlüsselung | 118 |
4.2.2 Zertifikate und Quellen-Authentifizierung | 120 |
4.2.3 Zertifikate erstellen und signieren | 122 |
4.2.4 Die cacerts-Datei modifizieren | 123 |
4.2.5 Client-Authentifizierung mit Zertifikaten | 124 |
4.2.6 Eine SSL-fähige Sicherheitsdomäne konfigurieren | 126 |
4.3 Login-Module konfigurieren | 128 |
4.3.1 Das dateibasierte Login-Modul verwenden | 129 |
4.3.2 Das Datenbank-Login-Modul verwenden | 131 |
4.3.3 Das LDAP-Login-Modul verwenden | 132 |
4.3.4 Das identity-Login-Modul | 140 |
4.3.5 Login-Module stapeln | 141 |
4.3.6 Das Clientzertifikat-Login-Modul | 142 |
4.4 Zusammenfassung | 143 |
4.5 Quellen | 144 |
Teil 2 Anwendungsservices | 145 |
5 JBoss Web Server konfigurieren | 146 |
5.1 Webanwendungen verstehen | 147 |
5.1.1 Die Struktur einer Webanwendung | 147 |
5.1.2 Die Konfiguration von Webanwendungen | 148 |
5.2 JBoss Web Server konfigurieren | 152 |
5.2.1 Wichtige Verzeichnisse finden | 152 |
5.2.2 Exploring JBoss Web Server Configuration | 153 |
5.2.3 Die Konfigurationsdatei für den WAR-Deployer | 156 |
5.3 URL-Pfade konfigurieren | 157 |
5.3.1 Virtuelle Hosts aktivieren | 159 |
5.3.2 Kontextpfade konfigurieren | 161 |
5.3.3 Den Stammkontextpfad ändern | 163 |
5.4 Konnektoren konfigurieren | 165 |
5.4.1 Die Konnektorkonfiguration verstehen | 166 |
5.4.2 Nebenläufigkeit konfigurieren | 167 |
5.4.3 Timeouts konfigurieren | 168 |
5.4.4 Hostnamen und Port für einen Proxy konfigurieren | 168 |
5.5 Das Laden von Webklassen konfigurieren | 168 |
5.6 Ventile verwenden | 169 |
5.7 JavaServer Faces konfigurieren | 171 |
5.8 Zusammenfassung | 172 |
5.9 Quellen | 173 |
6 Sicherheit für Webanwendungen | 174 |
6.1 Websicherheit konfigurieren | 175 |
6.1.1 Sicherheit konfigurieren in web.xml | 176 |
6.1.2 Sicherheit konfigurieren in jboss-web.xml | 178 |
6.1.3 Sicherheit konfigurieren in server.xml | 178 |
6.2 Benutzer authentifizieren | 179 |
6.2.1 Web-Authentifizierungsstrategien verstehen | 181 |
6.2.2 Basisauthentifizierung | 182 |
6.2.3 Formularbasierte Authentifizierung | 184 |
6.2.4 Digest-Authentifizierung | 185 |
6.3 Benutzer autorisieren | 186 |
6.3.1 Autorisierung konfigurieren | 187 |
6.3.2 Zugriff für jeden authentifizierten Benutzer erlauben | 187 |
6.4 Webkommunikation verschlüsseln | 188 |
6.4.1 HTTPS einschalten | 189 |
6.4.2 Transportgarantien ermöglichen | 190 |
6.4.3 Gegenseitige Authentifizierung ermöglichen | 192 |
6.4.4 Browserzertifikate erstellen | 194 |
6.5 Clientzertifikat-Authentifizierung ermöglichen | 195 |
6.5.1 Gegenseitige Authentifizierung auf Protokollebene einschalten | 196 |
6.5.2 Die Authentifizierungsmethode einstellen | 196 |
6.5.3 Die JaasSecurityDomain-MBean angeben | 196 |
6.5.4 Die Sicherheitsdomäne angeben | 197 |
6.5.5 Von der Anwendung auf die Sicherheitsdomäne verweisen | 197 |
6.5.6 Eine Strategie, um den Prinzipal aus dem Zertifikat zu bilden | 198 |
6.5.7 Prinzipale und Rollen in den Autorisierungsdatenspeicher laden | 199 |
6.5.8 Das Clientzertifikat zum Truststore des Servers hinzufügen | 199 |
6.5.9 Ein Browserzertifikat erstellen | 200 |
6.6 Die Standardsicherheitsdomäne ändern | 200 |
6.7 Zusammenfassung | 201 |
6.8 Quellen | 201 |
7 Enterprise-Anwendungen konfigurieren | 202 |
7.1 EJBs verstehen | 203 |
7.1.1 Session Beans verstehen | 205 |
7.1.2 Hibernate und JPA verstehen | 206 |
7.1.3 Enterprise-Pakete verstehen | 207 |
7.2 Eine EJB-Anwendung erstellen | 209 |
7.2.1 Die Beispielanwendung programmieren | 209 |
7.2.2 Beispielanwendung verpacken und ausführen | 212 |
7.3 Die EJB-Konfiguration verstehen | 214 |
7.3.1 Was gehört wohin? | 214 |
7.3.2 EJB-Anwendungen konfigurieren | 215 |
7.3.3 Den EJB-Server konfigurieren | 218 |
7.4 Session Beans konfigurieren | 220 |
7.4.1 Die JNDI-Bindung ändern | 220 |
7.4.2 Eine Session Bean nachschlagen | 222 |
7.4.3 EJB-Container konfigurieren | 222 |
7.5 Die Entity-Persistenz konfigurieren | 225 |
7.5.1 Hibernate-Objekte injizieren | 225 |
7.5.2 Hibernate-Zuordnungen bereitstellen | 226 |
7.6 JMX-Service-Objekte erzeugen | 227 |
7.6.1 Ein Service-Objekt erzeugen | 227 |
7.6.2 Die Beispielanwendung ausführen | 229 |
7.6.3 Zugriff auf MBeans ohne Injektion | 229 |
7.7 Das Transportprotokoll konfigurieren | 230 |
7.7.1 Die Transportkonfiguration verstehen | 231 |
7.7.2 Den Transport ändern | 233 |
7.8 Sicherheit für EJBs | 234 |
7.8.1 EJB-Sicherheit durch Anmerkungen | 235 |
7.8.2 EJBs durch Konfiguration absichern | 237 |
7.8.3 Nichtintegrierte Sicherheit | 238 |
7.8.4 EJB-Kommunikation absichern | 240 |
7.9 Zusammenfassung | 242 |
7.10 Quellen | 243 |
8 JBoss-Messaging | 244 |
8.1 Messaging-Systeme verstehen | 245 |
8.1.1 Architekturen von Messaging-Systemen verstehen | 245 |
8.1.2 Die Messaging-Modelle verstehen | 246 |
8.1.3 Die JMS API verstehen | 247 |
8.1.4 Die Architektur von JBoss Messaging verstehen | 250 |
8.2 Eine JMS-Anwendung entwickeln | 251 |
8.2.1 Die Beispielanwendung programmieren | 251 |
8.2.2 Die Beispielanwendung verpacken und ausführen | 257 |
8.3 Nachrichtengesteuerte Beans verwenden | 258 |
8.3.1 Eine MDB anlegen | 259 |
8.3.2 Eine MDB verpacken | 262 |
8.3.3 Eine Deskriptordatei für die MDB | 262 |
8.4 Nachrichtengesteuerte POJOs verwenden | 264 |
8.4.1 Einen nachrichtengesteuerten POJO-Consumerimplementieren | 264 |
8.4.2 Einen nachrichtengesteuerten POJO-Producer implementieren | 265 |
8.4.3 Ein nachrichtengesteuertes POJO verpacken | 266 |
8.5 JBoss Messaging konfigurieren | 267 |
8.5.1 Eine Datenquelle konfigurieren | 267 |
8.5.2 Zugriffssteuerung konfigurieren | 269 |
8.5.3 Destinationen konfigurieren | 272 |
8.5.4 Die Anwendung aktualisieren | 273 |
8.5.5 Das geänderte Beispiel ausführen | 274 |
8.5.6 Die MDB aktualisieren | 275 |
8.5.7 Sicheren Nachrichtentransport konfigurieren | 275 |
8.6 Zusammenfassung | 279 |
8.7 Quellen | 279 |
9 Webservices konfigurieren | 280 |
9.1 Webservices verstehen | 281 |
9.1.1 Die Terminologie der Webservices | 282 |
9.1.2 SOAP-Bindungsstile | 283 |
9.2 Einen Webservice entwickeln | 283 |
9.2.1 Den Webservice programmieren | 283 |
9.2.2 Den Webservice verpacken | 284 |
9.2.3 Die WSDL manuell generieren | 286 |
9.2.4 Webservices mit dem Top-down-Ansatz entwickeln | 287 |
9.2.5 Den Client entwickeln | 288 |
9.2.6 Einen C#-Client programmieren | 290 |
9.2.7 Mehr zu SOAP-Bindungsstilen | 291 |
9.3 Anmerkungen in JBossWS | 293 |
9.3.1 Die WebContext-Anmerkung verstehen | 293 |
9.3.2 Die EndpointConfig-Anmerkung verstehen | 295 |
9.4 Sicherheit für Webservices | 296 |
9.4.1 Zugriff auf Webservices autorisieren | 296 |
9.4.2 Den Sicherheits-Realm definieren | 297 |
9.5 SOAP-Nachrichten verschlüsseln | 300 |
9.5.1 Zertifikate generieren | 300 |
9.5.2 Server sichern mit WS-Security | 301 |
9.5.3 Clients mit WS-Security absichern | 304 |
9.5.4 Nachrichten signieren mit WS-Security | 306 |
9.6 Zusammenfassung | 308 |
9.7 Quellen | 308 |
Teil 3 JBoss Portal | 309 |
10 JBoss Portal und Portlets | 310 |
10.1 Einführung in JBoss Portal | 311 |
10.1.1 JSR-168 verstehen | 312 |
10.1.2 Die Terminologie von Portalen | 313 |
10.1.3 JBoss Portal installieren | 314 |
10.1.4 JBoss Portal administrieren | 316 |
10.2 Ein Portlet erstellen | 317 |
10.2.1 Das Image-Portlet programmieren | 318 |
10.2.2 Die Quelldateien für die JSP programmieren | 323 |
10.2.3 Portlet-Deskriptoren verstehen | 327 |
10.2.4 Portlets erstellen und bereitstellen | 330 |
10.3 Eine Portlet-Instanz | 331 |
10.3.1 Instanzen erzeugen mit der portlet-instance.xml-Datei | 332 |
10.3.2 Instanzen erzeugen mit dem Admin-Portlet | 332 |
10.4 Portlet-Fenster deklarieren | 333 |
10.4.1 Portlet-Fenster in der *-object.xml-Datei deklarieren | 333 |
10.4.2 Portlet-Fenster mit dem Admin-Portlet deklarieren | 334 |
10.5 Zusammenfassung | 336 |
10.6 Quellen | 337 |
11 JBoss Portal konfigurieren | 338 |
11.1 Das Aussehen der Fenster konfigurieren | 338 |
11.1.1 Das Aussehen von Fenstern mit *-object.xml konfigurieren | 340 |
11.2 Der Umgang mit mehreren Bildern und Instanzen | 341 |
11.2.1 Mehrere Instanzen und Fenster mit Deskriptordateienkonfigurieren | 342 |
11.3 Der Umgang mit dem CMS- | 344 |
11.3.1 CMS-Beispieldaten sammeln | 344 |
11.3.2 Die neuen Inhalte anzeigen | 346 |
11.3.3 Zugriff auf CMS-Inhalte | 347 |
11.4 Sicherheit für das Portal | 348 |
11.4.1 Ein neues Konto anlegen | 349 |
11.4.2 Rollen verwalten | 349 |
11.4.3 Zugriffssteuerung verstehen | 350 |
11.5 Ein benutzerdefiniertes Portal entwickeln | 358 |
11.5.1 Die Anforderungen definieren | 358 |
11.5.2 Der Vorschlag | 359 |
11.5.3 Das Portal definieren | 359 |
11.5.4 Das Design anpassen | 362 |
11.5.5 CMS-Inhalte anpassen | 365 |
11.5.6 Das Portal verpacken | 366 |
11.6 Zusammenfassung | 368 |
Teil 4 In die Produktion gehen | 370 |
12 Clustering | 371 |
12.1 Clustering verstehen | 372 |
12.1.1 Lastverteilung | 372 |
12.1.2 Aufbau und Topologie eines Clusters | 375 |
12.1.3 Automatische Discovery und Multicasting | 377 |
12.1.4 Hochverfügbarkeit | 379 |
12.1.5 Replikation und Fehlertoleranz | 380 |
12.1.6 Zustandspassivierung | 384 |
12.1.7 Verteilung versus Clustering | 384 |
12.2 Einen einfachen Cluster einrichten | 386 |
12.2.1 Einen JBoss-Cluster einrichten | 386 |
12.2.2 Eine geclusterte EJB erstellen | 389 |
12.2.3 Die Anwendung bereitstellen | 389 |
12.2.4 Die geclusterte EJB aufrufen | 390 |
12.3 JBoss-Clustering verstehen | 391 |
12.3.1 Die Architektur von JGroups verstehen | 392 |
12.3.2 Die Clustering-Services von JBoss konfigurieren | 394 |
12.3.3 Den Protokollstapel konfigurieren | 397 |
12.4 JBoss Cache konfigurieren | 400 |
12.4.1 Die Konfigurationsdateien von JBoss Cache | 401 |
12.4.2 Was soll in den Cache gelangen? | 405 |
12.5 Zusammenfassung | 406 |
12.6 Quellen | 407 |
13 Clustering für JBoss AS Services | 408 |
13.1 HTTP-Lastverteilung | 409 |
13.1.1 Lastverteilung mit dem nativen Webserver | 409 |
13.1.2 Lastverteilung mit Hardware | 411 |
13.2 HTTP-Sitzungsreplikation | 411 |
13.2.1 Replikation konfigurieren | 412 |
13.2.2 Die Verwendung von Sitzungen verstehen | 412 |
13.2.3 Feldreplikation | 414 |
13.2.4 Passivierung konfigurieren | 415 |
13.3 Clustering von Session Beans | 416 |
13.3.1 Lastverteilung für Session Beans | 417 |
13.3.2 Zustandsbehaftete Session Beans replizieren | 418 |
13.4 Clustering von Entities | 419 |
13.4.1 Den Entity-Cache replizieren | 420 |
13.5 JNDI clustern | 423 |
13.5.1 Den HA-JNDI-Service verstehen | 423 |
13.5.2 HA-JNDI einschalten | 425 |
13.5.3 Auf HA-JNDI zugreifen | 426 |
13.5.4 HA-JNDI verwenden – ja oder nein? | 427 |
13.6 Zusammenfassung | 428 |
13.7 Quellen | 429 |
14 JBoss AS – Tuning | 430 |
14.1 Definition von Performance | 431 |
14.2 Eine Methode für das Performance-Tuning | 432 |
14.2.1 Ganzheitliches Performance-Tuning | 432 |
14.2.2 Testzyklus zur Performance-Analyse | 434 |
14.3 Hardware und Netzwerk tunen | 436 |
14.3.1 Die Geschwindigkeit der Netzwerkkarten einstellen | 437 |
14.3.2 Die Anzahl der CPUs auswählen | 438 |
14.3.3 Die Wahl zwischen 32 Bit und 64 Bit | 438 |
14.4 Das Betriebssystem tunen | 439 |
14.4.1 Prozessoraffinität verstehen | 439 |
14.5 Die JVM tunen | 442 |
14.5.1 Den Java-Heap verstehen | 442 |
14.5.2 Garbage Collection verstehen | 445 |
14.5.3 Garbage Collection-Daten sammeln | 447 |
14.5.4 Die Auswahl der Heap-Einstellungen | 454 |
14.5.5 Der Umgang mit Out-of-Memory-Exceptions | 456 |
14.5.6 Weitere Tuning-Optionen | 456 |
14.6 JBoss AS tunen | 457 |
14.6.1 Datenquellen konfigurieren | 458 |
14.6.2 Den Thread-Pool für HTTP-Anforderungen konfigurieren | 460 |
14.6.3 Das JSP-Servlet tunen | 461 |
14.7 Die Anwendung tunen | 462 |
14.7.1 System.gc vermeiden | 463 |
14.7.2 Einen Thread-Dump aufzeichnen | 463 |
14.8 Zusammenfassung | 466 |
14.9 Quellen | 467 |
15 In die Produktion gehen | 468 |
15.1 Eine Plattform auswählen | 469 |
15.1.1 Eine JVM auswählen | 469 |
15.1.2 Eine JBoss AS-Version aussuchen | 470 |
15.1.3 Eine Plattform auswählen | 473 |
15.2 Mehrere Anwendungsserver-Instanzen nebeneinanderbetreiben | 474 |
15.2.1 Dateikonflikte vermeiden | 475 |
15.2.2 Portkonflikte verhindern | 476 |
15.2.3 Mehrere Knoten herunterfahren | 483 |
15.3 Überflüssige Services entfernen | 483 |
15.4 Sicherheit für die Serveranwendungen | 485 |
15.4.1 Die Serveranwendungen entfernen | 485 |
15.4.2 Sicherheit für die Serveranwendungen | 485 |
15.4.3 Den Zugriff auf den lokalen Computer beschränken | 486 |
15.5 Die Standarddatenbank ändern | 487 |
15.5.1 Den EJB3-Timer-Service konfigurieren | 488 |
15.6 Den Anwendungsserver als Service starten | 489 |
15.6.1 Einen Dienst in Windows registrieren | 490 |
15.6.2 Mehrere Services registrieren | 491 |
15.6.3 Einen Service in Linux registrieren | 495 |
15.7 Die JSP-Kompilierung konfigurieren | 497 |
15.8 Zusammenfassung | 498 |
15.9 Quellen | 499 |
Anhang A JNDI-Namespaces | 500 |
Anhang B Wandel ist unvermeidlich | 505 |
Register | 516 |