7
www.it-administrator.de Juli 2011 49 PRAXIS I Workshop ava EE ist eine Ansammlung diver- ser Softwarekomponeten und Diensten, die quasi einen De-facto-Stan- dard bei der Entwicklung von Enterpri- se-Anwendungen darstellen. Durch klar definierte APIs können dabei Komponen- ten unterschiedlichster Hersteller problem- los miteinander agieren. Jede Java EE ba- sierte Anwendung benötigt natürlich eine entsprechende Umgebung, in der diese ablaufen kann und die die notwendigen Komponenten und Services zur Verfügung stellt, beispielsweise Transaktionsmanage- ment, Namens- und Verzeichnisdienste, Persistenz- und Deployment-Dienste so- wie ein Sicherheits-Framework (siehe Bild 1). Eine vollständige Liste findet sich in der Java EE-Spezifikation [1]. Im kommerziellen Umfeld existieren mit IBM Websphere und BEA WebLogic zwei weitverbreitete Schwergewichte entspre- chender Server-Implementierung. Mit JBoss steht solch ein Server als Open Sour- ce-Produkt unter der GNU Lesser General Public License (LGPL) zur Verfügung. Die- ser stellt alle notwendigen Softwarekom- poneten, Dienste und Container der Spe- zifikation zur Verfügung und erweitert diese um eigene, Server-spezifische, Konfigura- tionsmöglichkeiten. Beispielsweise enthält JBoss einen EJB-Container für Enterprise Java Beans (EJB) [2] oder einen Webserver auf Basis von Tomcat zum Bereistellen von Servlets und JavaServer Pages (JSP). Eine Community-Edition von JBoss, das inzwi- schen zu Red Hat gehört, steht unter [3] zum Download zur Verfügung. JBoss installieren Der JBoss Applikationsserver (AS) steht ebenfalls unter [3] als ZIP-Datei zum Download bereit. Bevor es jedoch an des- sen Installation geht, müssen Sie sicher- stellen, dass das System entweder über ein aktuelles Java Development Kit (JDK) oder ein Java Runtime Environment (JRE) verfügt. Frühere Versionen von JBoss AS benötigten zwingend ein JDK, da dieses über einen entsprechenden Compiler für Java-Code verfügt. Dieser ist zum Übersetzen von JSP-Dateien not- wendig. Aktuellen Versionen, also AS5 oder AS6, genügt jedoch auch ein JRE, da JBoss eine Eclipse-JDT Bibliothek mit ausgeliefert, die ebenfalls Java-Code über- setzen kann. Handelt es sich bei dem Sys- tem, auf dem Sie JBoss installieren wollen, jedoch um einen Entwicklungsrechner, so bevorzugen Sie wahrscheinlich den- J Java Enterprise-Anwendungen mit JBoss bereitstellen Webanwendungen auf dem Silber-tablett von Thorsten Scherf Das Entwickeln von Unternehmensanwendungen wird heutzutage immer umfangreicher und komplexer. Steht ein Entwickler vor der Aufgabe eine Unternehmensan- wendung zu programmieren, so stehen ihm hierfür im Wesentlichen zwei Software-Architekturen zur Verfü- gung. Auf der einen Seite existiert die von Microsoft entwickelte .NET- Plattform, auf der anderen Seite die herstellerunabhängige Java Platt- form, Enterprise Edition – aktuell auch als Java EE bekannt. Dieser Workshop gibt einen Einstieg in Java EE auf Basis des JBoss Applikationsservers. Bild 1: Ein Applikationsserver besteht aus verschiedenen Komponenten, die auf ein Enterprise-Informatiom- System (EIS) zurückgreifen können Quelle: 123RF

Java Enterprise-Anwendungen mit JBoss bereitstellen ...people.redhat.com/tscherf/articles/itadm_jboss.pdf · IBM Websphere und BEA WebLogic zwei weitverbreitete Schwergewichte entspre-chender

Embed Size (px)

Citation preview

Page 1: Java Enterprise-Anwendungen mit JBoss bereitstellen ...people.redhat.com/tscherf/articles/itadm_jboss.pdf · IBM Websphere und BEA WebLogic zwei weitverbreitete Schwergewichte entspre-chender

www.it-administrator.de Juli 2011 49

P R A X I S I W o r k s h o p

ava EE ist eine Ansammlung diver-ser Softwarekomponeten und

Diensten, die quasi einen De-facto-Stan-dard bei der Entwicklung von Enterpri-se-Anwendungen darstellen. Durch klardefinierte APIs können dabei Komponen-ten unterschiedlichster Hersteller problem-los miteinander agieren. Jede Java EE ba-sierte Anwendung benötigt natürlich eineentsprechende Umgebung, in der dieseablaufen kann und die die notwendigenKomponenten und Services zur Verfügungstellt, beispielsweise Transaktionsmanage-ment, Namens- und Verzeichnisdienste,Persistenz- und Deployment-Dienste so-wie ein Sicherheits-Framework (siehe Bild1). Eine vollständige Liste findet sich inder Java EE-Spezifikation [1].

Im kommerziellen Umfeld existieren mitIBM Websphere und BEA WebLogic zweiweitverbreitete Schwergewichte entspre-chender Server-Implementierung. MitJBoss steht solch ein Server als Open Sour-ce-Produkt unter der GNU Lesser GeneralPublic License (LGPL) zur Verfügung. Die-ser stellt alle notwendigen Softwarekom-poneten, Dienste und Container der Spe-zifikation zur Verfügung und erweitert dieseum eigene, Server-spezifische, Konfigura-tionsmöglichkeiten. Beispielsweise enthält

JBoss einen EJB-Container für EnterpriseJava Beans (EJB) [2] oder einen Webserverauf Basis von Tomcat zum Bereistellen vonServlets und JavaServer Pages (JSP). EineCommunity-Edition von JBoss, das inzwi-schen zu Red Hat gehört, steht unter [3]zum Download zur Verfügung.

JBoss installierenDer JBoss Applikationsserver (AS) stehtebenfalls unter [3] als ZIP-Datei zumDownload bereit. Bevor es jedoch an des-sen Installation geht, müssen Sie sicher-stellen, dass das System entweder über einaktuelles Java Development Kit (JDK)oder ein Java Runtime Environment(JRE) verfügt. Frühere Versionen von

JBoss AS benötigten zwingend ein JDK,da dieses über einen entsprechendenCompiler für Java-Code verfügt. Dieserist zum Übersetzen von JSP-Dateien not-wendig. Aktuellen Versionen, also AS5oder AS6, genügt jedoch auch ein JRE,da JBoss eine Eclipse-JDT Bibliothek mitausgeliefert, die ebenfalls Java-Code über-setzen kann. Handelt es sich bei dem Sys-tem, auf dem Sie JBoss installieren wollen,jedoch um einen Entwicklungsrechner,so bevorzugen Sie wahrscheinlich den-

J

Java Enterprise-Anwendungen mit JBoss bereitstellen

Webanwendungen auf dem Silber-tablettvon Thorsten Scherf

Das Entwickeln von Unternehmensanwendungen wirdheutzutage immer umfangreicher und komplexer. Stehtein Entwickler vor der Aufgabe eine Unternehmensan-wendung zu programmieren, so stehen ihm hierfür imWesentlichen zwei Software-Architekturen zur Verfü-gung. Auf der einen Seite existiert die von Microsoft entwickelte .NET-Plattform, auf der anderen Seite die herstellerunabhängige Java Platt-form, Enterprise Edition – aktuell auch als Java EE bekannt. DieserWorkshop gibt einen Einstieg in Java EE auf Basis des JBoss Applikationsservers.

Bild 1: Ein Applikationsserver besteht aus verschiedenen Komponenten, die auf ein Enterprise-Informatiom-System (EIS) zurückgreifen können

Quell

e: 12

3RF

Page 2: Java Enterprise-Anwendungen mit JBoss bereitstellen ...people.redhat.com/tscherf/articles/itadm_jboss.pdf · IBM Websphere und BEA WebLogic zwei weitverbreitete Schwergewichte entspre-chender

50 Juli 2011 www.it-administrator.de

P R A X I S I W o r k s h o p

noch das JDK. Nach der Installation derJava-Umgebung ist darauf zu achten, dassdie JAVA_HOME-Variable auf das JavaRoot-Verzeichnis zeigt:

# export JAVA_HOME=/usr/lib/jvm/

jre-1.6.0-openjdk

# echo $JAVA_HOME

/usr/lib/jvm/jre-1.6.0-openjdk

# java -version

java version “1.6.0_18”

OpenJDK Runtime Environment

(IcedTea6 1.8.3)

(fedora-46.1.8.3.fc13-i386)

OpenJDK Server VM

(build 14.0-b16, mixed mode)

Nach diesen Vorarbeiten entpacken Siedas ZIP-Archiv des JBoss AS in ein be-liebiges Verzeichnis, beispielsweise nach/opt und passen die JBOSS_HOME-Va-riable entsprechend an, so dass diese aufdas Installationsverzeichnis zeigt. Zur Ad-ministration ist ein grundlegendes Ver-ständnis der Verzeichnisstruktur des Ser-vers wichtig. Nach dem Auspacken desArchivs befinden sich im Root-Verzeich-nis diverse Ordner:- * bin-Verzeichnis: Enthält alle Skripte

die zum Starten und Stoppen des Ser-vers notwendig sind. Außerdem ist hierauch das JMX-Kommandozeilentooltwiddle abgelegt, mit dem Sie den Ser-ver administrieren können.

- * client-Verzeichnis: Enthält Bibliothe-ken die eventuell beim Zugriff vonStandalone-Clients benötigt werden.Bei Standalone-Clients handelts es sichbeispielsweise um GUI-Clients auf Basis

von Swing oder AWT, Webservice-Clients oder JMS-Clients.

- * doc-Verzeichnis: Enthält hauptsächlichDTD-Dateien und XML-Schemada-teien für die JBoss Konfigurationsda-teien, da diese auf XML basieren. Kon-figurationsbeispiele finden sich unterhalbvon docs/examples/.

- * lib-Verzeichnis: Enthält Bibliotheken,die zum Starten des JBoss AS notwen-dig sind.

- * server-Verzeichnis: JBoss kommt vonHaus aus mit verschiedenen Konfigu-rationen daher. Dieses Verzeichnis ent-hält diverse Unterverzeichnisse, die je-weils einer bestimmten Konfigurationentsprechen. Beim Starten des Serverskönnen Sie dann bestimmen, welcheKonfiguration zum Einsatz kommensoll. Natürlich lassen sich die einzelnenKonfigurationen ändern oder neue hin-zufügen. Bild 2 zeigt das Konfigurati-onsverzeichniss “all”. Im Vergleich zurDefault-Konfiguration sind hier bei-spielsweise auch die JBoss-Clusterser-vices aktiviert.

Durch das Auswählen einer bestimmtenServer-Konfiguration können Sie nunalso bestimmen, welche JEE-Services undKomponenten der JBoss AS starten soll.Passt keine der vorhandenen Konfigura-tionen, kopieren Sie einfach einen vor-handenen Ordner, benennen diesen umund passen die Kopie entsprechend an.

Wie das genau geht, erfahren Sie späterin diesem Workshop. Möchten Sie denJBoss-Server mit sämtlichen Services star-ten, so ist hierfür der folgende Aufrufnotwendig:

# /opt/jboss-5.1.0.GA/bin/run.sh -c

all

Auf der Konsole sind nun die Startmel-dungen der einzelnen Services zu sehenund am Ende sollte schließlich eine Sta-tuszeile Auskunft darüber erteilen, wielange die Startup-Prozedur dauerte:

19:58:19,965 INFO [ServerImpl]

JBoss (Microcontainer) [5.1.0.GA

(build:SVNTag=JBoss_5_1_0_GA

date=200905221634)] Started in

54s:991ms

Alternativ ist es auch möglich, den Serverim Hintergrund zu starten und die Sta-tus-Meldungen der einzelnen Services ineine Log-Datei zu schreiben. Das hat un-ter anderem den Vorteil, dass die Konsolenicht durch den Server belegt ist:

/opt/jboss-5.1.0.GA/bin/run.sh -c

all > console.log &

Ein Zugriff auf den Web-Container desServers sollte zu diesem Zeitpunkt bereitsfunktionieren (siehe Bild 3). Die Startseitebietet Zugriff auf diverse Online-Res-

Bild 2: Jedes JBoss-Konfigurationsverzeichnis enthält eine Vielzahl von Unterverzeichnissen, mit denen Sie das Verhalten des Server anpassen können

Die ersten Versionen von JBoss basierten auf einemsogenannten Java-Management-Extension Kernel(JMX). Sämtliche Services des Anwendungsserverswurden hier als Managed Beans (MBeans) in denJMX-Kernel geladen um Ihre Funktionen zur Verfügungzu stellen. Mit der Version AS4 begann dann die Mi-gration auf eine Microcontainer-Architektur, in der nunleichtgewichtige Plain Old Java Objects (POJOs) stattMBeans zum Einsatz kommen. MBeans unterstütztJBoss allerdings immer noch, da der JMX-Kernel nunselbst als POJO auf dem Microcontainer aufsetzt. Fürdie Zukunft ist geplant, sämtliche MBeans als reinePOJOs zu implementieren, so dass der Einsatz desJMX-Kernels nicht mehr notwendig ist

Architektur

Page 3: Java Enterprise-Anwendungen mit JBoss bereitstellen ...people.redhat.com/tscherf/articles/itadm_jboss.pdf · IBM Websphere und BEA WebLogic zwei weitverbreitete Schwergewichte entspre-chender

Alle Listings zum Download auf www.it-administrator.de Juli 2011 51

P R A X I S I W o r k s h o p

sourcen und JBoss interne Applikationen,die sich zur Administration des Serversverwenden lassen.

Erste Java-Webanwendung bereitstellen Um nun die erste Schritte auf dem neu-en Server aufzuzeigen, beginnen wir andieser Stelle mit dem Bereitstellen einerJava-basierten Webanwendung mit Hilfedes JBoss Web-Services. Dieser basiertauf dem bekannten Tomcat für dynami-sche Inhalte, kann aber ebenfalls auf dieApache Portable Runtime (APR) zu-rückgreifen, wenn es darum geht, stati-sche Inhalte schnell auszuliefern. JBossunterstützt mit dem integrierten Web-Server von Haus aus das sogenannteHot-Deployment. Hierzu kopieren Siebeispielsweise die gewünschte Weban-wendung in ein bestimmtes Verzeichnisder aktiven Server-Konfiguration undJBoss stellt diese Anwendung unmittel-bar bereit.

Zuerst ist jedoch die entsprechende An-wendung zu erzeugen und vorzubereiten.Da die Entwicklung von komplexen An-wendungen den Rahmen dieses Artikelssprengen würde, greifen wir hier auf diebekannte “Hello World”-Anwendung zu-rück. Diese liegt hier als JavaServerPagevor. JBoss übersetzt diese dynamisch, er-zeugt ein Servlet und stellt dieses einemClient über eine Webschnittstelle zur Ver-fügung. Es existieren mehrere Methodendiese Anwendung nun bereitzustellen, bei-spielsweise in Form eines Webarchives(WAR-Archiv). Für dieses Archiv müssenSie zuerst eine entsprechende Verzeich-nis-Struktur erzeugen, wobei die JSP-Da-tei im Root-Verzeichnis liegt. Hier hingehört ebenfalls ein UnterverzeichnisWEB-INF mit einem Deployment-De-skriptor namens web.xml. Dieser Deploy-ment-Deskriptor ist Teil der JEE-Spezi-fikation, sodass auch Servlets von anderenServern unter JBoss lauffähig sind. Ser-ver-spezische Konfigurationsanweisungenliest JBoss aus der Datei WEB-INF/jboss-web.xml ein. Dazu zählt beispielsweise dieKonfiguration einer Security-Domäne fürIhre Anwendung. Hiermit können dannunter anderem Benutzer authentifiziertund autorisiert werden, bevor diese Zu-griff auf die Anwendung, oder Teile davon,erhalten. Die JSP-Datei sowie der De-ployment-Deskriptor sind in den beidenListingkästen dargestellt.

Mit Hilfe des Tools “jar” lässt sich aus die-sen Dateien nun ein WAR-Archiv erzeu-gen (siehe Listing “WAR-Archiv mit jarerzeugen”). Das so erzeugte Archiv ko-pieren Sie dann in das Host-Deployment-Verzeichnis des aktiven JBoss-Konfigura-

tionsverzeichnisses. JBoss nimmt in diesemFalle sofort Notiz von der neuen Web-Anwendung und stellt diese unmittelbarzur Verfügung. Der Aufruf von http://lo-calhost:8080/helloworld/hello.jsp im Web-browser bestätigt dies (siehe Bild 4).

# jar -cvf helloworld.war *.jsp

WEB-INF/

added manifest

adding: hello.jsp(in = 159)

(out= 131)(deflated 17%)

adding: WEB-INF/(in = 0)

(out= 0)(stored 0%)

adding: WEB-INF/web.xml(in = 63)

(out= 48)(deflated 23%)

# cp helloworld.war ../../jboss-

5.1.0.GA/server/all/deploy/

20:15:48,905 INFO [TomcatDeploy-

ment] deploy, ctxPath=/helloworld

Statt das WAR-Archiv in das Deploy-ment-Verzeichnis zu kopieren, lässt sichauch das bereits erwähnte Admin-Tooltwiddle verwenden. Mit Hilfe der Ope-ration deploy der JBoss MBean “jboss.sys-tem:service=MainDeployer” stellen Siedie Webanwendung auch dann bereit,wenn Sie beispielsweise gar kein Schreib-recht auf das Deployment-Verzeichnis be-sitzen. Ein Nachteil dieser Methode be-steht jedoch darin, dass die Anwendungnach einem Neustart des Servers nichtwieder automatisch gestartet wird.

# ./twiddle.sh invoke “jboss.sys-

tem:service=MainDeployer” deploy

/opt/examples/HelloWorld/hello-

world.war

Anstatt mit komprimierten Archiv-Da-teien, kann JBoss auch mit komplettenVerzeichnis-Strukturen umgehen. Dies istmanchmal einfacher als Archive bereitzu-stellen, da sich in Verzeichnissen einzelneDateien leichter verändern oder hinzu-fügen lassen, ohne das bei jeder Änderungein neues Archiv zu erzeugen ist. EinNeustart des Servers ist nach einer Än-derung an einer Anwendung nicht not-wendig, JBoss erkennt diese automatischanhand aktualisierter Zeitstempel an denDateien. Wichtig vor dem Bereitstellenganzer Verzeichnisse ist jedoch, dass dieseden passen Suffix besitzen, ansonsten weiß

Bild 3: Nach dem Hochfahren des Servers erhalten Sie über die Startseite des Web-Containers Zugriff auf diverse Anwendungen und Online-Ressourcen

<html><head><title>JSP Test</title>

<%!

String message = “Hello, World.”;

%>

</head>

<body bgcolor=”white”>

<h2><%= message%></h2>

<%= new java.util.Date() %>

</body></html>

Listing: JSP-Datei

<web-app>

<display-name>Hello World</display-name>

</web-app>

Listing: Deployment-Deskriptor

Page 4: Java Enterprise-Anwendungen mit JBoss bereitstellen ...people.redhat.com/tscherf/articles/itadm_jboss.pdf · IBM Websphere und BEA WebLogic zwei weitverbreitete Schwergewichte entspre-chender

52 Juli 2011 www.it-administrator.de

P R A X I S I W o r k s h o p

der Server nicht, welcher Deployer zumBereitstellen zu verwenden ist:

# mv /opt/examples/helloworld/

/opt/examples/helloworld.war/

# rm -f /opt/jboss-

5.1.0.GA/server/all/deploy/

helloworld.war

10:25:22,371 INFO [TomcatDeploy-

ment] undeploy, ctxPath=/

helloworld

# cp -r

/opt/examples/helloworld.war/

/opt/jboss-5.1.0.GA/server/all/

deploy/

10:25:22,412 INFO [TomcatDeploy-

ment] deploy, ctxPath=/helloworld

Passende Server-KonfigurationNachdem Sie nun wissen, wie Sie eineeinfache Webanwendung auf dem JBossAS bereitstellen können, lohnt es sich, ei-nen genaueren Blick in die Konfigurationdes Servers zu werfen. Wie bereits weiteroben erwähnt, enthält JBoss AS mehrereKonfigurations-Verzeichnisse. Beim Star-ten des Servers wurde in unserem Beispieldie all-Konfiguration ausgewählt. Derentsprechende Konfigurationsordner/opt/jboss-5.1.0.GA/server/all enthält di-verse Unterverzeichnisse (siehe Bild 5).

Auch hier ist ein grundlegendes Verständ-nis der einzelnen Verzeichnisse wichtig:- * conf-Verzeichnis: Enthält sämtliche

Konfigurationsdateien für den JBoss-Kernservice, die einzelnen Services sowie wie für das Logging-Subsystemlog4j [4].

- * deploy-Verzeichnis: Dieser Ordnerwurde bereits im letzen Abschnitt vor-

gestellt. Sämtliche Anwendungen, diein dieses Verzeichnis kopiert werden, er-kennt JBoss automatisch und stellt diesedynamisch zur Verfügung. Zum Entfer-nen einer Anwendung ist diese einfachaus dem deploy-Verzeichnis zu löschen,oder besser, in ein undeploy-Verzeichniszu verschieben.

- * deployers-Verzeichnis: Enthält Serviceszum Erkennen der verschiedenen An-wendungs- und Archivtypen aus demdeploy-Verzeichnis.

- * lib-Verzeichnis: Enthält Bibliothekendie von sämtlichen JEE Services einergemeinsamen Serverkonfiguration ver-wendet werden. Spezielle Bibliothekendie nur zu einer einzelnen Anwendunggehören, stellen Sie lieber über die An-wendung selbst zur Verfügung – bei-spielsweise als Teil eines Webarchives.

Neben diesen Standard-Verzeichnissenerzeugt JBoss noch weitere Ordner zurLaufzeit. Hiervon sind besonders dieseinteressant:- * log-Verzeichnis: Enthält die Dateien

boot.log, server.log und eventuell audit.log(je nach Konfiguration). boot.log ent-hält alle Log-Meldung des Start-Pro-zesses des Servers, bis die Kontrollean log4j übergeben wird. Dieser Ser-vice schreibt die Meldungen dann indie Datei server.log. Das Sicherheits-Subsystem von Jboss verwendet dieDatei audit.log für sicherheitsrelevanteMeldungen.

- * work-Verzeichnis: Hier hält der JBossWebserver die übersetzten Java-ClassDateien und Servlets auf. Für die obenaufgeführte Webanwendung existierenhier beispielsweise die beiden Dateien

work/jboss.web/localhost/helloworld/org/apache/jsp/hello_jsp.class und work/jboss.web/localhost/helloworld/org apache/jsp/hello_jsp.java.

Zum Anpassen des Servers sind sicherlichdie Konfigurationsdateien unterhalb vonconf/ am interessantesten. Als Beispiel sollhier das Logging des JBoss-Servers etwasangepasst werden. Wie bereits erwähnt,setzt JBoss das log4j Logging-Frameworkein. In der Konfigurationsdatei conf/jboss-log4j.xml existieren in der Standardkon-figuration zwei sogenannte Appender.Diese bestimmen wohin die Logmeldun-gen der JBoss-Services oder der bereit-gestellten Anwendungen zu senden sind.Der erste Appender schreibt sämtlicheMeldungen aller Loglevel (TRACE, DE-BUG, INFO, WARN, ERROR and FA-TAL) in die Datei log/server.log und legtdabei einmal pro Tag eine neue Datei miteinem entsprechenden Datums-Suffix an(siehe Listing “WAR-Archiv mit jar er-zeugen”). Soll der Server stattdessen dieLog-Datei rotieren, sobald diese ein be-stimmte Größe erreicht hat, so sind dieAppender-Parameter entsprechend anzu-passen (siehe Listing “Anpassen der Ap-pender-Parameter”).

Der zweite Appender “CONSOLE” sorgtfür eine Ausgabe auf der Konsole. Jedochfindet diese erst ab dem Log-Level INFOstatt, wofür der Parameter “<param na-me=”Threshold” value=”INFO”/>” inder Konfiguration des Appenders zustän-dig ist. Somit vermeiden Sie, dass das Kon-solen-Log mit zu vielen Log-Meldungen

Bild 4: Im Webbrowser lässt sich schliesslich die Ausgabe der Webanwendung bewundern

<appender name=”FILE” class=”org.jboss.logging.ap-

pender.DailyRollingFileAppender”>

<errorHandler

class=”org.jboss.logging.util.OnlyOnceError

Handler”/>

<param name=”File”

value=”${jboss.server.log.dir}/server.log”/>

<param name=”Append” value=”true”/>

<param name=”DatePattern” value=”‘.’yyyy-

MM-dd”/>

<layout class=”org.apache.log4j.PatternLay

out”>

<param name=”ConversionPattern” value=”%d

%-5p [%c] (%t) %m%n”/>

</layout>

</appender>

Listing: WAR-Archiv mit jar erzeugen

Page 5: Java Enterprise-Anwendungen mit JBoss bereitstellen ...people.redhat.com/tscherf/articles/itadm_jboss.pdf · IBM Websphere und BEA WebLogic zwei weitverbreitete Schwergewichte entspre-chender

www.it-administrator.de Juli 2011 53

P R A X I S I W o r k s h o p

überflutet wird. Natürlich ist es auch mög-lich, für die einzelnen Dateien oder Log-Level einzelne Log-Dateien zu erzeugen.Hierfür existieren in der Kategorie “Limitcategories” Einstellmöglichkeiten, die sichauf einem Appender mit einem bestimm-ten Namen beziehen (dieser ist hier alsReferenz anzugeben), und das Loggingeiner bestimmten Klasse oder einer An-wendung die von diese Klasse abgeleitetist, ab einen bestimmten Log-Level defi-niert. Die Konfigurationsdatei bietet hier-für sehr viele Beispiele.

Unnötige Dienste abschaltenIn den bisherigen Beispielen wird derJBoss-Server immer mit der Konfigu-rationseinstellung “all” gestartet. Hier-durch stehen sämtliche Services undKompontenten des Servers zur Verfü-gung. Für Test- und Entwicklungssys-teme mag dies sicherlich in Ordnungsein, für Systeme in der Produktion giltdies jedoch nicht. Hier gilt der Grund-satz “Weniger ist mehr”. Wieso soll derServer Dienste anbieten die gar nichtbenötigt werden? Diese stellen nur einunnötiges Sicherheitsrisiko dar und soll-ten somit deaktiviert, oder noch besser,entfernt werden.

Mit der Konfiguration “all” startet JBoss25 verschiedene Services, mit der Kon-figuration “default” sind es dagegen lediglich 15 Services. Der Hauptunter-schied zwischen den beiden Konfigura-tion liegt darin, dass mit “all” sämtlicheCluster-Dienste zur Verfügung stehen,mit “default” jedoch nicht. Wenn Sie also

keinen Cluster benötigen, so reicht dieStandard-Konfiguration sicherlich aus.Jedoch bietet es sich an, selbst diese Kon-figuration noch etwas abzuspecken, fallsSie auf bestimmte Dienste verzichtenkönnen. Hierfür ist zuerst ein neuesKonfigurationsverzeichnis auf Basis derdefault-Konfiguration zu erzeugen:

# cp -r /opt/jboss-

5.1.0.GA/server/default

/opt/jboss-5.1.0.GA/server/custom

In dem Verzeichnis “custom” können Sienun sämtliche Services deaktivieren, dienicht unbedingt notwendig sind. Beispiels-weise soll auf einem Produktionssystemsicherlich nicht die JBoss-Startseite sichtbarsein. Entfernen Sie diese einfach, indemSie in custom/deploy/ROOT.war löschenoder umbenennen. Ist der Mail-Servicenicht wirklich notwendig, so löschen Siedie Dateien custom/deploy/mail-service.xmlund custom/lib/mail*.jar. Ein Blick in dasdeploy- und lib-Verzeichnis hilft weitereunnötige Services zu identifizieren.

JBoss bietet von Haus aus einige Manage-ment-Tools an, dazu zählt beispielsweisedie JMX-Console, die unter der URLhttp://localhost:8080/jmx-console/ zu er-reichen ist. Mit der Konsole haben Nutzerdie Möglichkeit, ManagedBeans (MBeans)des Servers zu lesen und zu verändern.Die weiter oben angesprochenen Ände-rungen am Logging-Subsystem hätten soauch mit der JMX-Console durchgeführtwerden können. Somit stellt diese Web-anwendung eine mächtige, aber auch ge-fährliche Möglichkeit dar, den komplettenJBoss-Server zu konfigurieren. Auf einemProduktionssystem ist die Konsole somitentweder zu entfernen (deploy/jmx-conso-le.war) oder aber der Zugang ist mit Hilfeeiner Benutzerauthentifizierung entspre-chend zu sichern.

Authentifizierung und AutorisierungDas Sicherheitssystem von JBoss basiertauf dem Java Authentication and Autho-rization Service (JAAS). Über Sicherheits-Domänen legen Sie hier fest, welche Artvon Login-Modulen für eine bestimmteAnwendung zum Einsatz kommen soll.Es existieren bereits vorgefertigte Login-

Module für den Zugriff auf Datenbanken,LDAP-Server oder einfache Dateien. Isteine Webandwendung für eine bestimmteSicherheits-Domäne konfiguriert, so musssich ein Benutzer beim Zugriff auf dieseauthentifizieren und bekommt nach er-folgreicher Authentifizierung und Auto-risierung eine bestimmte Rolle zugewie-sen. Anhand dieser Rolle kann der Adminfestlegen, ob welche Teile der Webanwen-dung der Benutzer zugreifen darf. Einevordefinierte Sicherheits-Domäne für dieJMX-Console finden Sie im entsprechen-den Listing.

Bei diesem Login-Modul handelt es sichum eine einfache Variante, bei der die Au-thentifizierung und Autorisierung vonBenutzern anhand von Dateien stattfin-det. Komplexere Beispiele für den Zugriffauf eine Datenbank oder einen LDAP-Server befinden sich jedoch ebenfalls inder Datei conf/login-config.xml. Damit eineAnwendung nun weiß, welche Sicher-heitsdomäne zum Einsatz kommen soll,ist diese im JBoss-eigenen Deployment-Deskriptor der Anwendung, jboss-web.xmlzu hinterlegen. Hier tragen Sie den Na-men der Domäne ein, mit der diese sichüber das Java Naming and Directory Interface (JNDI) auf dem Server ange-meldet hat. Im Falle der JMX-Consoleist die Änderung also in der Dateideploy/jmx-console.war/WEB-INF/jboss-web.xml zu erfolgen:

<jboss-web>

<security-domain>java:/jaas/jmx-

console</security-domain>

</jboss-web>

<appender name=”FILE” class=”org.jboss.logging.ap-

pender.RollingFileAppender”>

<errorHandler

class=”org.jboss.logging.util.OnlyOnceError

Handler”/>

<param name=”File”

value=”${jboss.server.log.dir}/server.log”/>

<param name=”Append” value=”false”/>

<param name=”MaxFileSize” value=”10MB”/>

<param name=”MaxBackupIndex” value=”20”/>

<layout class=”org.apache.log4j.PatternLay

out”>

<param name=”ConversionPattern” value=”%d

%-5p [%c] (%t) %m%n”/>

</layout>

</appender>

Listing: Anpassen der Appender-Parameter

<application-policy name=”jmx-console”>

<authentication>

<login-module

code=”org.jboss.security.auth.spi.UsersRoles

LoginModule”

flag=”required”>

<module-option

name=”usersProperties”>props/jmx-console-

users.properties</module-option>

<module-option

name=”rolesProperties”>props/jmx-console-

roles.properties</module-option>

</login-module>

</authentication>

</application-policy>

Listing: Sicherheits-Domäne für die JMX-Console

Page 6: Java Enterprise-Anwendungen mit JBoss bereitstellen ...people.redhat.com/tscherf/articles/itadm_jboss.pdf · IBM Websphere und BEA WebLogic zwei weitverbreitete Schwergewichte entspre-chender

54 Juli 2011 Link-Codes eingeben auf www.it-administrator.de

P R A X I S I W o r k s h o p

Hiermit ist nun klar, welche Sicherheits-Domäne und somit, welches Login-Mo-dul, für die JMX-Console zum Einsatzkommt. Es fehlt jedoch noch ein Regel-werk, welches bestimmt, wer Zugriff aufwelche Ressourcen hat. Diese Informa-tion ist der Anwendung nun über denregulären Deployment-Deskriptor de-ploy/jmx-console.war/WEB-INF/web.xmlmitzuteilen:

<security-constraint>

<web-resource-collection>

<web-resource-name>HtmlAdap

tor</web-resource-name>

<description>Eine beispiel

hafte Sicherheitseinstellung

die nur Nutzern mit der

Rolle JBossAdmin den Zugriff

auf die HTML JMX-Webappli-

kation erlaubt

</description>

<url-pattern>/*</url-pattern>

<http-method>GET</http-

method>

<http-method>POST</http-

method>

</web-resource-collection>

<auth-constraint>

<role-name>JBossAdmin</role-

name>

</auth-constraint>

</security-constraint>

Fehlen schließlich noch Benutzerac-count-Daten. Wie im Login-Modul fürdie Anwendung festgelegt, kommen die-se aus den beiden Dateien props/jmx-console-users.properties für die Benutzer-Namen und Passwör ter, und ausprops/jmx-console-roles.properties für dieZuordnung einer Rolle zu einem Ac-count. Anhand des Beispiels muss einBenutzer nun also der Rolle “JBossAd-min” angehören, damit dieser Zugriffauf die Konsole bekommt. Hat allesfunktioniert, solle diesmal beim Aufrufvon http://localhost:8080/jmx-console/ein Fenster aufgehen, welches den Be-nutzer zur Authentifizierung auffordert(siehe Bild 5).

Andere Webanwendungen lassen sich nunauf ähnliche Art und Weise für eine Be-nutzer-Authentizierung und Autorisierungkonfigurieren. Wichtig dabei ist, dass dieverwendete Sicherheits-Domäne sich zu-vor beim JNDI registriert hat.

Sichere KommunikationAbschliessend geht es um die Konfigu-ration für einen sicheren Zugriff auf ei-ne Webanwendung. Dies ist besondersdann wichtig, wenn die Anwendungsensible Daten überträgt und selbststän-dig eine Benutzer-Authentifizierungdurchführt, wozu dann wahrscheinlichauch die Übertragung eines Benutzer-Passwortes gehört. Für eine gesichertehttps-Verbindung ist dem JBoss-Serverein zusätzlicher Web-Connector hinzu-zufügen. Vor dessen Konfiguration istjedoch erst ein Zertifikatsspeicher zuerzeugen. Dieser Speicher enthält einX.509-Zertifikat welches entwederselbst signiert wurde, oder über die Sig-natur einer externen Zertifizierungs-stelle (CA) verfügt. Mit Hilfe der Java-Anwendung keytool läs s t s ich einsolcher Zertifikatsspeicher anlegen.

Um schließlich den https-Port des Web-connectors zu aktivieren, müsen Sie inder Konfigurationsdatei des JBoss Web-

Services, deploy/jbossweb.sar/server.xml,der soeben erzeugte Zertifikatsspeicher,inklusive des dazugehörigen Passwortes,ausführen:

<Connector protocol=”HTTP/1.1”

SSLEnabled=”true”

port=”8443”

address=”${jboss.bind.address}”

scheme=”https”

secure=”true” clientAuth=”false”

keystoreFile=”${jboss.server.home.

dir}/conf/tuxgeek.keystore”

keystorePass=”redhat”

sslProtocol = “TLS”

/>

Ab nun stehen sämtliche Webanwen-dungen auch über den gesichertenhttps-Port 8443 zur Verfügung und bie-ten somit eine verschlüsselte Übertra-gung der Daten an.

FazitNatürlich kann dieser Artikel nicht sämt-liche Konfigurationsmöglichkeiten desJBoss-Applikationsservers vorstellen, da-für ist die Thematik zu umfangreich. In-teressante Themen die bisher nicht an-gesprochen wurden sind beispielsweisedie Enterprise Java Beans (EJBs) und dasJBoss-Clustering. Mit EJBs ist es mög-lich, komplexe Anwendungen zu mo-dularisieren und somit die eigentlicheGeschäftslogik aus der Anwendung he-rauszutrennen. Das JBoss-Cluster ingsorgt für eine hochverfügbare Konfigu-ration des Servers. Weitere Informationenzu diesen und weiteren Themen bietetdie ausführliche Dokumentationsseitedes JBoss-Projektes [5]. (dr)

# keytool -genkey -alias example -keystore tuxge-

ek.keystore -keyalg RSA

keytool -genkey -alias example -keystore

tuxgeek.keystore -keyalg RSA

Enter keystore password:

Re-enter new password:

What is your first and last name?

[Unknown]: tiffy.tuxgeek.de

What is the name of your organizational unit?

[Unknown]: GPS

What is the name of your organization?

[Unknown]: Red Hat

What is the name of your City or Locality?

[Unknown]: Stuttgart

What is the name of your State or Province?

[Unknown]: BW

What is the two-letter country code for this unit?

[Unknown]: DE

Is CN=tiffy.tuxgeek.de, OU=GPS, O=Red Hat,

L=Stuttgart, ST=BW, C=DE correct?

[no]: yes

Enter key password for <example>

(RETURN if same as keystore password):

Re-enter new password:

# keytool -list -keystore tuxgeek.keystore

Enter keystore password:

Keystore type: JKS

Keystore provider: SUN

Your keystore contains 1 entry

example, Mar 25, 2011, PrivateKeyEntry,

Certificate fingerprint (MD5):

AC:D5:CB:5C:13:9D:EF:F2:85:6B:AB:89:49:F8:48:3A

Listing: Zertifikatsspeicher mit keytool

[1] Java EE-SpezifikationB7P61

[2] Java EJB-TechnologieB7P62

[3] JBoss Community SeiteB7P63

[4] log4j ProjektseiteB7P64

[5] JBoss DokumentationB7P65

Link-Codes

Page 7: Java Enterprise-Anwendungen mit JBoss bereitstellen ...people.redhat.com/tscherf/articles/itadm_jboss.pdf · IBM Websphere und BEA WebLogic zwei weitverbreitete Schwergewichte entspre-chender

EAZ Social Networks

1/1

Anschnitt