Kapitel 3. Migrieren Sie Ihre Applikation
3.1. Von den meisten Applikationen benötigte Änderungen
3.1.1. Prüfung der von den meisten Applikationen benötigten Änderungen
3.1.2. Änderungen beim Klassenladen
3.1.2.1. Aktualisierung der Applikation aufgrund von Klassenladeänderungen
- Sehen Sie sich zuerst an, wie Ihr Applikation gepackt ist und welche Abhängigkeiten Sie besitzt. Weitere Informationen finden Sie hier Abschnitt 3.1.2.3, »Aktualisierung der Applikationsabhängigkeiten aufgrund von Klassenladeänderungen«
- Falls Ihre Applikation ein Protokoll führt, so müssen Sie die korrekten Modulabhängigkeiten festlegen. Unter Abschnitt 3.1.4.1, »Bearbeitung von Protokollierungsabhängigkeiten« erfahren Sie mehr dazu.
- Aufgrund der Änderungen beim modularen Klassenladen kann es sein, dass Sie die Packstruktur Ihres EAR oder WAR ändern müssen. Weitere Informationen finden Sie unter Abschnitt 3.1.5.1, »Modifizierung des Packagings von EARs und WARs« .
3.1.2.2. Modulabhängigkeiten verstehen
Ein Modul kann nur auf seine eigenen Klassen zugreifen sowie auf die Klassen eines Moduls von dem es eine implizite oder explizite Abhängigkeit besitzt.
Prozedur 3.1. Modulabhängigkeiten verstehen
Implizite Modulabhängigkeiten verstehen
Die Deployer innerhalb des Servers fügen implizit automatisch einige häufig verwendete Modulabhängigkeiten hinzu, wie etwajavax.apiundsun.jdk. Dies macht die Klassen für das Deployment zur Runtime sichtbar, so dass der Entwickler die Abhängigkeiten nicht explizit hinzufügen muss. Informationen dazu, wie und wann diese impliziten Abhängigkeiten hinzugefügt werden, finden Sie unter Implicit Module Dependencies im Kapitel Class Loading and Modules des Development Guide für die JBoss EAP 6 unter https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/.Explizite Modulabhängigkeiten verstehen
Für andere Klassen müssen Module explizit festgelegt werden, da die fehlenden Abhängigkeiten ansonsten zu Deployment- oder Runtime-Fehlern führen. Falls eine Abhängigkeit fehlt, so sehen SieClassNotFoundExceptionsoderNoClassDefFoundErrors-Traces im Serverprotokoll. Lädt mehr als ein Moduldasselbe JAR oder ein Modul lädt eine Klasse, die eine von einem anderen Modul geladene Klasse erweitert, so sehen SieClassCastExceptions-Traces im Serverprotokoll. Um Abhängigkeiten explizit festzulegen, bearbeiten SieMANIFEST.MFoder erstellen Sie eine JBoss-spezifische Deployment-Deskriptor-Dateijboss-deployment-structure.xml. Weitere Informationen zu Modulabhängigkeiten finden Sie unter Overview of Class Loading and Modules im Kapitel Class Loading and Module des Development Guide für die JBoss EAP 6 unter https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/.
3.1.2.3. Aktualisierung der Applikationsabhängigkeiten aufgrund von Klassenladeänderungen
Das Laden von Klassen unterscheidet sich bei der JBoss EAP 6 maßgeblich von früheren Versionen der JBoss EAP. Das Klassenladen basiert jetzt auf dem JBoss Modulprojekt. Statt eines einzelnen, hierarchischen Klassenladers, der alle JARs in einen flachen Klassenpfad lädt, wird jede Bibliothek zu einem Modul, das sich nur mit dem Modul verbindet, von dem es abhängt. Deployments in der JBoss EAP 6 sind ebenfalls Module und haben keinen Zugriff auf in JARs im Applikationsserver definierten Klassen, außer es wurde eine explizite Abhängigkeit von diesen Klassen definiert. Einige vom Applikationsserver definierte Modulabhängigkeiten werden automatisch für Sie eingestellt. Wenn Sie etwa eine Java EE Applikation deployen, so wird Ihrem Modul automatisch eine Abhängigkeit vom Java EE API hinzugefügt. Eine vollständige Liste automatisch hinzugefügter Abhängigkeiten finden Sie unter Implicit Module Dependencies im Kapitel Class Loading and Modules des Development Guide für die JBoss EAP 6 unter https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/.
Wenn Sie Ihre Applikation zur JBoss EAP 6 migrieren, so kann es sein, dass Sie aufgrund der modularen Klassenladeänderungen eine der folgenden Aufgaben ausführen müssen:
3.1.3. Änderungen bei Konfigurationsdateien
3.1.3.1. Erstellen oder Bearbeiten von Dateien, die das Klassenladen in der in der JBoss EAP 6 steuern
Aufgrund der Änderungen in der JBoss EAP 6 zur Verwendung modularen Klassenladens, müssen Sie möglicherweise eine oder mehrere Dateien bearbeiten oder erstellen, um Abhängigkeiten hinzuzufügen oder das Laden automatischer Abhängigkeiten zu verhindern. Weitere Informationen zum Laden von Klassen oder Klassenladepräzedenz finden Sie im Kapitel Class Loading and Modules des Development Guide für die JBoss Enterprise Application Platform 6 unter https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/.
- jboss-web.xml
- Falls Sie ein
<class-loading>-Element in derjboss-web.xml-Datei definiert haben, so müssen Sie dieses entfernen. Das Verhalten, das dies in der JBoss EAP 5 hervorrief, ist jetzt das standardmäßige Klassenladeverhalten in der JBoss EAP 6, so dass dies nicht länger notwendig ist. Falls Sie dieses Element nicht entfernen, so erscheint im Serverprotokoll ein ParseError und eine XMLStreamException.Dies ist ein Beispiel eines herauskommentierten<class-loading>-Elements in derjboss-web.xml-Datei.<!DOCTYPE jboss-web PUBLIC "-//JBoss//DTD Web Application 4.2//EN" "http://www.jboss.org/j2ee/dtd/jboss-web_4_2.dtd"> <jboss-web> <!-- <class-loading java2ClassLoadingCompliance="false"> <loader-repository> seam.jboss.org:loader=MyApplication <loader-repository-config>java2ParentDelegation=false</loader-repository-config> </loader-repository> </class-loading> --> </jboss-web> - MANIFEST.MF
- Manuell bearbeitet
- Je nachdem, welche Komponenten oder Module Ihre Applikation verwendet, werden Sie dieser Datei eine oder mehrere Abhängigkeiten hinzufügen müssen. Sie können diese entweder als
Dependencies- oderClass-Path-Einträge hinzufügen.Nachfolgend sehen Sie ein von einem Entwickler bearbeitetesMANIFEST.MF:Manifest-Version: 1.0 Dependencies: org.jboss.logmanager Class-Path: OrderManagerEJB.jar
Falls Sie diese Datei bearbeiten, vergessen Sie bitte nicht, ein "Newline"-Zeichen am Ende der Datei hinzuzufügen. - Mittels Maven generiert
- Falls Sie Maven verwenden, so müssen Sie Ihre
pom.xml-Datei bearbeiten, um die Abhängigkeiten für dieMANIFEST.MF-Datei zu generieren. Falls Ihre Applikation EJB 3.0 verwendet, so haben Sie vielleicht einen Abschnitt in derpom.xml-Datei, der wie folgt aussieht:<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-ejb-plugin</artifactId> <configuration> <ejbVersion>3.0</ejbVersion> </configuration> </plugin>Falls der EJB 3.0 Codeorg.apache.commons.logverwendet, so benötigen Sie diese Abhängigkeit in derMANIFEST.MF-Datei. Um diese Abhängigkeit zu generieren, fügen Sie das<plugin>-Element wie folgt derpom.xml-Datei hinzu:<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-ejb-plugin</artifactId> <configuration> <ejbVersion>3.0</ejbVersion> <archive> <manifestFile>src/main/resources/META-INF/MANIFEST.MF</manifestFile> </archive> </configuration> </plugin>Im Beispiel oben muss diesrc/main/resources/META-INF/MANIFEST.MF-Datei nur den folgenden Abhängigkeitseintrag enthalten:Dependencies: org.apache.commons.logging
Maven generiert die vollständigeMANIFEST.MF-Datei:Manifest-Version: 1.0 Dependencies: org.apache.commons.logging
- jboss-deployment-structure.xml
- Bei dieser Datei handelt es sich um einen für JBoss spezifischen Deployment-Deskriptor, der zur Steuerung des Klassenladens auf feinkörnige Weise verwendet werden kann. Wie auch
MANIFEST.MFkann diese Datei für die Hinzufügung von Abhängigkeiten verwendet werden. Sie kann auch die Hinzufügung automatischer Abhängigkeiten verhindern, zusätzliche Module definieren, das isolierte Klassenladeverhalten eines EAR-Deployments ändern und einem Modul zusätzliche Ressourcen-roots hinzufügen.Nachfolgend sehen Sie das Beispiel einerjboss-deployment-structure.xml-Datei, die eine Abhängigkeit für das JSF 1.2 Modul hinzufügt und das automatische Laden für das JSF 2.0 verhindert.<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.0"> <deployment> <dependencies> <module name="javax.faces.api" slot="1.2" export="true"/> <module name="com.sun.jsf-impl" slot="1.2" export="true"/> </dependencies> </deployment> <sub-deployment name="jboss-seam-booking.war"> <exclusions> <module name="javax.faces.api" slot="main"/> <module name="com.sun.jsf-impl" slot="main"/> </exclusions> <dependencies> <module name="javax.faces.api" slot="1.2"/> <module name="com.sun.jsf-impl" slot="1.2"/> </dependencies> </sub-deployment> </jboss-deployment-structure>Weitere Informationen zu dieser Datei finden SIe unter: Abschnitt 3.1.3.2, »jboss-deployment-structure.xml«. - application.xml
- In früheren Versionen der JBoss EAP wurde die Reihenfolge der Deployments innerhalb eines EAR mittels der
jboss-app.xml-Datei gesteuert. Dies ist nicht mehr der Fall. Die Java EE6 Spec liefert das<initialize-in-order>-Element in derapplication.xml, mit der die Reihenfolge des Deployments der Java EE Module innerhalb eines EAR gesteuert wird.In den meisten Fällen brauchen Sie keine Deployment-Reihenfolge festzulegen. Verwendet Ihre Applikation Abhängigkeitseinspeisungen und resource-refs zum Bezug auf externe Module. In den meisten Fällen wird das<initialize-in-order>-Element nicht benötigt, da der Applikationsserver implizit die korrekte und optimale Weise der Komponentenreihenfolge bestimmen kann.Angenommen Sie haben eine Applikation, die einmyBeans.jarund einmyApp.warinnerhalb einesmyApp.earenthält. Ein Servlet immyApp.warverwendet eine@EJB-Annotation, um ein Bean ausmyBeans.jareinzuspeisen. In diesem Fall besitzt der Applikationsserver die entsprechenden Informationen um sicherzustellen, dass die EJB-Komponente verfügbar ist, ehe das Servlet gestartet wird, und Sie müssen das<initialize-in-order>-Element nicht benutzen.Falls dieses Servlet jedoch ältere Remote-Verweise im JNDI-Lookup-Stil verwendet wie nachfolgend für den Zugriff auf das Bean verwendet, so kann es sein, dass Sie die Modulreihenfolge festlegen müssen.init() { Context ctx = new InitialContext(); ctx.lookup("TheBeanInMyBeansModule"); }In diesem Fall kann der Server nicht bestimmen, dass sich die EJB-Komponente immyBeans.jarbefindet, und Sie müssen erzwingen, dass die Komponenten immyBeans.jarvor den Komponenten inmyApp.warinitialisiert und gestartet werden. Um dies zu tun setzen Sie das<initialize-in-order>-Element auftrueund legen die Reihenfolge dermyBeans.jar- undmyApp.war-Modules in derapplication.xml-Datei fest.Nachfolgend sehen Sie ein Beispiel, das das<initialize-in-order>-Element zur Steuerung der Deployment-Reihenfolge verwendet. DasmyBeans.jarwird vor dermyApp.war-Datei deployt.<application xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="6" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_6.xsd"> <application-name>myApp</application-name> <initialize-in-order>true</initialize-in-order> <module> <ejb>myBeans.jar</ejb> </module> <module> <web> <web-uri>myApp.war</web-uri> <context-root>myApp</context-root> </web> </module> </application>Das Schema für dieapplication.xmlfinden Sie hier http://java.sun.com/xml/ns/javaee/application_6.xsd.Anmerkung
Die Einstellung des<initialize-in-order>-Elements auftrueverlangsamt das Deployment. Es ist besser, ordnungsgemäße Abhängigkeiten mittels Abhängigkeitseinspeisung oder resource-refs vorzunehmen, da dies dem Container mehr Flexibilität bei der Optimierung von Deployments einräumt. - jboss-ejb3.xml
- Der
jboss-ejb3.xml-Deployment-Deskriptor ersetzt denjboss.xml-Deployment-Deskriptor bei der Außerkraftsetzung und Hinzufügung von Features des von der Java Enterprise Edition (EE) definiertenejb-jar.xml-Deployment-Deskriptors. Die neue Datei ist inkompatibel mitjboss.xml, und diejboss.xmlwird jetzt bei Deployments ignoriert. - login-config.xml
- Die
login-config.xml-Datei wird nicht mehr für die Sicherheitskonfiguration verwendet. Die Sicherheit ist jetzt im<security-domain>-Element in der Server-Konfigurationsdatei konfiguriert. Für einen Standalone Server ist dies diestandalone/configuration/standalone.xml-Datei. Falls Ihr Server in einer Managed Domain läuft, so ist dies diedomain/configuration/domain.xml-Datei.
3.1.3.2. jboss-deployment-structure.xml
jboss-deployment-structure.xml handelt es sich um einen neuen, optionalen Deployment-Deskriptor für die JBoss EAP 6. Dieser Deployment-Deskriptor bietet Kontrolle über das Klassenladen im Deployment.
EAP_HOME/docs/schema/jboss-deployment-structure-1_2.xsd
3.1.3.3. Paket-Ressourcen für das neue, modulare Klassenladesystem
In früheren Versionen der JBoss EAP wurden alle Ressourcen innerhalb des WEB-INF/-Verzeichnisses dem WAR-Klassenpfad hinzugefügt. In der JBoss EAP 6 werden Bausteine der Applikation nur aus den WEB-INF/classes- und WEB-INF/lib-Verzeichnissen geladen. Werden Applikationsbausteine nicht in den festgelegten Speicherorten verpackt, so kann dies zu ClassNotFoundException, NoClassDefError oder anderen Runtime Fehlern führen.
- Bearbeitung des Ressourcen-Packagings
- Um die Ressourcen nur für die Applikation verfügbar zu machen, müssen Sie die Properties-Dateien, JARs oder andere Bausteine mit dem WAR bündeln, indem Sie sie in das
WEB-INF/classes/- oder dasWEB-INF/lib/-Verzeichnis verschieben. Diese Vorgehensweise wird hier Abschnitt 3.1.3.4, »Speicherort der ResourceBundle Properties ändern« ausführlicher beschrieben. - Maßgeschneidertes Modul erstellen
- Falls Sie maßgeschneiderte Ressourcen allen auf dem JBoss EAP 6 Server laufenden Applikationen verfügbar machen wollen, so müssen Sie ein maßgeschneidertes Modul erstellen. Diese Vorgehensweise wird hier Abschnitt 3.1.3.5, »Maßgeschneidertes Modul erstellen« ausführlicher beschrieben.
3.1.3.4. Speicherort der ResourceBundle Properties ändern
In früheren Versionen der JBoss EAP befand sich das EAP_HOME/server/SERVER_NAME/conf/-Verzeichnis im Klassenpfad und war für die Applikation verfügbar. Um Properties in der JBoss EAP 6 dem Klassenpfad der Applikation verfügbar zu machen, müssen Sie diese innerhalb Ihrer Applikation verpacken.
Prozedur 3.2. Speicherort der ResourceBundle Properties ändern
- Falls Sie ein WAR-Archiv deployen, so müssen Sie diese Properties in den
WEB-INF/classes/-Ordner des WAR packen. - Sollen diese Properties allen Komponenten in einem EAR zugänglich sein, so müssen Sie diese im root eines JARs verpacken und das JAR im
lib/-Ordner des EAR platzieren.
3.1.3.5. Maßgeschneidertes Modul erstellen
Prozedur 3.3. Maßgeschneidertes Modul erstellen
- Erstellen Sie die
module/-Verzeichnisstruktur und pflegen Sie die relevanten Daten ein.- Erstellen Sie eine Verzeichnisstruktur unter dem
EAP_HOME/module-Verzeichnis, die die Dateien und JARs enthält. Zum Beispiel:$ cd EAP_HOME/modules/$ mkdir -p myorg-conf/main/properties - Verschieben Sie die Properties-Dateien in das
EAP_HOME/modules/myorg-conf/main/properties/-Verzeichnis, das Sie im vorherigen Schritt erstellt haben. - Erstellen Sie eine
module.xml-Datei imEAP_HOME/modules/myorg-conf/main/-Verzeichnis, die folgende XML enthält:<module xmlns="urn:jboss:module:1.1" name="myorg-conf"> <resources> <resource-root path="properties"/> </resources> </module>
- Bearbeiten Sie das
ee-Subsystem in der Server-Konfigurationsdatei. Sie können das JBoss CLI verwenden oder die Datei manuell bearbeiten.- Befolgen Sie diese Schritte zur Bearbeitung der Server-Konfigurationsdatei mittels des JBoss CLI.
- Starten Sie den Server und verbinden Sie sich mit dem Management-CLI.
- In Linux geben Sie folgendes in der Befehlszeile ein:
EAP_HOME/bin/jboss-cli.sh --connect
- In Windows geben Sie Folgendes in die Befehlszeile ein:
C:\>EAP_HOME\bin\jboss-cli.bat --connect
Sie sollten die folgende Antwort sehen:Connected to standalone controller at localhost:9999
- Um das
myorg-conf<global-modules> Element imeeSubsystem zu erstellen, geben Sie folgenden Befehl in die Befehlszeile ein:/subsystem=ee:write-attribute(name=global-modules, value=[{"name"=>"myorg-conf","slot"=>"main"}])Sie sollten das folgende Ergebnis sehen:{"outcome" => "success"}
- Führen Sie folgende Schritte aus, um die Server-Konfigurationsdatei manuell zu bearbeiten.
- Stoppen Sie den Server und öffnen Sie die Server-Konfigurationsdatei in einem Texteditor. Für einen Standalone Server ist dies die
EAP_HOME/standalone/configuration/standalone.xml-Datei, für eine Managed Domain ist es dieEAP_HOME/domain/configuration/domain.xml-Datei. - Suchen Sie das
ee-Subsystem und fügen Sie das allgemeine Modul fürmyorg-confhinzu. Nachfolgend sehen Sie ein Beispiel für dasee-Subsystem-Element, das derart bearbeitet wurde, um dasmyorg-conf-Element zu enthalten:Beispiel 3.1.
myorg-confElement<subsystem xmlns="urn:jboss:domain:ee:1.0" > <global-modules> <module name="myorg-conf" slot="main" /> </global-modules> </subsystem>
- Wenn Sie eine Datei namens
my.propertiesin den korrekten Modul-Speicherort kopiert haben, so können Sie jetzt Properties-Dateien mittels Code ähnlich dem folgenden laden:Beispiel 3.2. Properties-Datei laden
Thread.currentThread().getContextClassLoader().getResource("my.properties");
3.1.4. Protokolländerungen
3.1.4.1. Bearbeitung von Protokollierungsabhängigkeiten
Der JBoss LogManager unterstützt Frontends für alle Protokoll-Frameworks, so dass Sie Ihren aktuellen Protokollierungscode beibehalten oder die neue JBoss Protokollierungsinfrastruktur verwenden können. Egal wofür Sie sich entscheiden, Sie werden aufgrund der Änderungen hinsichtlich des modularen Klassenladens Ihre Applikation wahrscheinlich bearbeiten müssen, um die erforderlichen Abhängigkeiten hinzuzufügen.
Prozedur 3.4. Aktualisierung des Protokollierungscodes der Applikation
3.1.4.2. Aktualisierung des Applikationscodes für Protokollierungs-Frameworks von Drittanbietern
Bei der JBoss EAP 6 werden Logging Abhängigkeiten für übliche Drittanbieter-Frameworks wie Apache Commons Logging, Apache log4j, SLF4J, und Java Logging standardmäßig hinzugefügt. In den meisten Fällen ist die Verwendung von Logging Framework vom JBoss EAP Container zu bevorzugen. Wenn Sie jedoch spezifische Funktionen benötigen, die ein Drittanbieter-Framework bietet, müssen Sie das entsprechende JBoss EAP Modul von Ihrem Deployment ausschließen. Beachten Sie, dass die Serverlogs weiterhin die JBoss EAP Logging Subsystem Konfiguration verwenden, auch wenn Ihr Deployment ein Drittanbieter-Framework benutzt.
org.apache.log4j Modul von Ihrem Deployment ausschließen. Das erste Verfahren funktioniert in jeder Release von JBoss EAP 6. Das zweite Verfahren kann nur bei JBoss EAP 6.3 oder späteren Versionen angewendet werden.
Prozedur 3.5. Konfigurieren Sie die JBoss EAP 6 zur Verwendung einer log4j.properties- oder log4j.xml-Datei
Anmerkung
- Erstellen Sie eine
jboss-deployment-structure.xmlmit folgendem Inhalt:<jboss-deployment-structure> <deployment> <!-- Exclusions allow you to prevent the server from automatically adding some dependencies --> <exclusions> <module name="org.apache.log4j" /> </exclusions> </deployment> </jboss-deployment-structure> - Platzieren Sie die
jboss-deployment-structure.xmlDatei entweder imMETA-INF/oder imWEB-INF/Verzeichnis, wenn Sie ein WAR deployen, oder imMETA-INF/Verzeichnis, wenn Sie ein EAR deployen. Wenn Ihr Deployment abhängige untergeordnete Deployments umfasst, müssen Sie auch die Module für jedes Subdeployment ausschließen. - Schließen Sie die
log4j.properties- oderlog4j.xml-Datei imlib/-Verzeichnis Ihres EAR- oder demWEB-INF/classes/-Verzeichnis Ihres WAR-Deployment ein. Falls Sie es vorziehen, die Datei in daslib/-Verzeichnis Ihres WAR zu legen, müssen Sie den<resource-root>-Pfad in derjboss-deployment-structure.xml-Datei angeben.<jboss-deployment-structure> <deployment> <!-- Exclusions allow you to prevent the server from automatically adding some dependencies --> <exclusions> <module name="org.apache.log4j" /> </exclusions> <resources> <resource-root path="lib" /> </resources> </deployment> </jboss-deployment-structure> - Starten Sie den JBoss EAP 6 Server mit folgendem Laufzeitargument um zu verhindern, dass eine
ClassCastExceptionin der Konsole erscheint, wenn Sie die Applikation deployen:-Dorg.jboss.as.logging.per-deployment=false
- Deployen Sie Ihre Applikation.
Prozedur 3.6. Konfigurieren von Logging Abhängigkeiten für JBoss EAP 6.3 oder spätere Versionen
add-logging-api-dependencies Logging Systemattribute benutzen um Loggingframework-Abhängigkeiten von Drittanbietern auszuschließen. Die folgenden Schritte demonstrieren, wie man dieses Logging-Attribut auf einem JBoss EAP Standalone Server modifiziert.
- Starten Sie den JBoss EAP 6 Server mit folgendem Laufzeitargument um zu verhindern, dass eine
ClassCastExceptionin der Konsole erscheint, wenn Sie die Applikation deployen:-Dorg.jboss.as.logging.per-deployment=false
- Öffnen Sie ein Terminal und verbinden Sie sich mit dem Management-CLI.
- In Linux geben Sie folgendes in der Befehlszeile ein:
$ EAP_HOME/bin/jboss-cli.sh --connect
- In Windows geben Sie folgendes in der Befehlszeile ein:
C:\>EAP_HOME\bin\jboss-cli.bat --connect
- Modifizieren Sie das
add-logging-api-dependenciesAttribut im Logging Subsystem.Dieses Attribut kontrolliert, ob der Container implizite Logging API Abhängigkeiten zu Ihren Deployments hinzufügt.- Wenn
truegesetzt ist, was der Standardwert ist, sind alle impliziten Logging API Abhängigkeiten hinzugefügt. - Wenn
falsegesetzt ist, wurden die Abhängigkeiten Ihren Deployments nicht hinzugefügt.
Um die Loggingframework-Abhängigkeiten von Drittanbietern auszuschließen müssen Sie dieses Attribut über folgenden Befehl auffalsesetzten:/subsystem=logging:write-attribute(name=add-logging-api-dependencies, value=false)Dieser Befehl fügt das<add-logging-api-dependencies>Element demloggingSubsystem derstandalone.xmlKonfigurationsdatei hinzu.<subsystem xmlns="urn:jboss:domain:logging:1.4"> <add-logging-api-dependencies value="false"/> .... </subsystem> - Deployen Sie Ihre Applikation.
3.1.4.3. Bearbeitung des Codes zur Verwendung des neuen JBoss Logging Framework
Um das neue Framework zu verwenden, ändern Sie Ihre Importe und Ihren Code wie folgt:
Prozedur 3.7. Bearbeitung von Code und Abhängigkeiten zur Verwendung des JBoss Logging Frameworks
Ändern Sie Ihre Importe und Protokollierungscode
Nachfolgend sehen Sie ein Beispiel für einen Code, der das neue JBoss Logging Framework verwendet:import org.jboss.logging.Level; import org.jboss.logging.Logger; private static final Logger logger = Logger.getLogger(MyClass.class.toString()); if(logger.isTraceEnabled()) { logger.tracef("Starting...", subsystem); }Fügen Sie die Protokollierungsabhängigkeit hinzu
Das die JBoss Protokollierungsklassen enthaltende JAR befindet sich im Modul namensorg.jboss.logging. IhreMANIFEST-MF-Datei sollte wie folgt aussehen:Manifest-Version: 1.0 Dependencies: org.jboss.logging
Weitere Informationen dazu, wie Sie die Modulabhängigkeit finden, finden Sie unter Abschnitt 3.1.2.3, »Aktualisierung der Applikationsabhängigkeiten aufgrund von Klassenladeänderungen« und Abschnitt 4.2.1, »Fehler- und Problembehebung bei der Migration«.
3.1.5. Änderungen beim Packen der Applikation
3.1.5.1. Modifizierung des Packagings von EARs und WARs
Bei Migration Ihrer Applikation kann es sein, dass Sie die Packstruktur Ihres EARs oder WARs aufgrund der Änderung am modularen Klassenladen ändern müssen. Modulabhängigkeiten werden in dieser spezifischen Reihenfolge geladen:
- Systemabhängigkeiten
- Benutzerabhängigkeiten
- Lokale Ressourcen
- Inter-Deployment Abhängigkeiten
Prozedur 3.8. Bearbeitung des Archiv-Packagings
Packaging eines WAR
Bei einem WAR handelt es sich um ein einzelnes Modul und alle Klassen im WAR werden mit demselben Klassenlader geladen. Das bedeutet, dass imWEB-INF/lib/-Verzeichnis gepackte Klassen genauso behandelt werden wie Klassen imWEB-INF/classes-Verzeichnis.Packaging eines EAR
Ein EAR besteht aus mehreren Modulen. DasEAR/lib/-Verzeichnis ist ein einzelnes Modul und jedes WAR oder EJB jar-Unterdeployment innerhalb des EAR ist ein separates Modul. Klassen müssen nicht auf Klassen in anderen Modulen innerhalb des EAR zugreifen, falls nicht explizit Abhängigkeiten definiert wurden. Unterdeployments besitzen eine automatische Abhängigkeit am übergeordneten Modul, das ihnen Zugriff auf die Klassen imEAR/lib/-Verzeichnis gibt. Allerdings haben Unterdeployments nicht immer eine automatische Abhängigkeit, die ihnen Zugriff auf einander gibt. Dieses Verhalten wird durch Einstellung des<ear-subdeployments-isolated>-Element in deree-Subsystemkonfiguration wie folgt gesteuert:<subsystem xmlns="urn:jboss:domain:ee:1.0" > <ear-subdeployments-isolated>false</ear-subdeployments-isolated> </subsystem>
Dies ist standardmäßig auf "false" eingestellt, wodurch die Unterdeployments die zu anderen Unterdeployments innerhalb des EAR gehörenden Klassen sehen können.Weitere Informationen zum Laden von Klassen finden Sie im Kapitel Class Loading and Modules im Development Guide für die JBoss EAP 6 unter https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/.
3.1.6. Konfigurationsänderungen bei Datenquellen und Ressourcenadaptern
3.1.6.1. Aktualisierung der Applikation aufgrund von Konfigurationsänderungen
- Falls Ihre Applikation eine Datenquelle verwendet, siehe: Abschnitt 3.1.6.2, »Aktualisierung der Datenquellen-Konfiguration«.
- Falls Ihre Applikation JPA verwendet und derzeit die Hibernate JARs bündelt, so finden Sie Informationen zu Migrationsoptionen hier: Abschnitt 3.1.6.4, »Konfiguration der Datenquelle für Hibernate oder JPA«.
- Falls Ihre Applikation einen Ressourcenadapter verwendet, siehe: Abschnitt 3.1.6.5, »Aktualisierung der Ressourcen-Adapter-Konfiguration«.
- Sehen Sie sich die folgenden Informationen zur Konfiguration von Änderungen für grundlegende Sicherheit an: Abschnitt 3.1.7.1, »Konfiguration der Sicherheitsänderungen der Applikation«.
3.1.6.2. Aktualisierung der Datenquellen-Konfiguration
In früheren Versionen von JBoss EAP war die JCA Datenquellen-Konfiguration in einer Datei mit dem Suffix *-ds.xml definiert. Diese Datei wurde dann im deploy/ Verzeichnis des Servers deployt oder in die Applikation gepackt. Der JDBC Treiber wurde ins server/lib/ Verzeichnis kopiert oder in das WEB-INF/lib/ Verzeichnis der Applikation gepackt. Während diese Methode der Datenquellen-Konfiguration für die Entwicklung noch unterstützt wird, wird sie für die Produktion nicht empfohlen, da sie nicht von den JBoss Administrations- und Management-Tools unterstützt wird.
domain/configuration/domain.xml-Datei konfiguriert. Wenn die JBoss EAP Instanz als Standalone Server läuft, wird die Datenquelle in der standalone/configuration/standalone.xml file-Datei konfiguriert. Auf diese Weise konfigurierte Datenquellen können mittels der JBoss Management-Interfaces, einschließlich der Web Management-Konsole und des Befehlszeilen-Interface (CLI) verwaltet und gesteuert werden. Diese Tools machen die Verwaltung von Deployments und die Konfiguration mehrerer in einer Managed Domain laufender Server einfach.
Ein JDBC 4.0 kompatibler Treiber kann als Deployment- oder Kernmodul installiert werden. Ein JDBC 4.0 kompatibler Treiber enthält eine META-INF/services/java.sql.Driver-Datei, die den Treiberklassennamen festlegt. Ein nicht mit JDBC 4.0 kompatibler Treiber erfordert zusätzliche Schritte. Informationen dazu, wie Sie einen Treiber JDBC 4.0 kompatibel machen und wie Sie Ihre aktuelle Datenquellenkonfiguration so aktualisieren, dass Sie durch die Web Management-Konsole und das CLI verwaltet werden kann, finden Sie hier Abschnitt 3.1.6.3, »Installation und Konfiguration des JDBC-Treibers«.
Sie können das IronJacamar Tool zur Migration von Datenquellen und Ressourcenadapter-Konfigurationen verwenden. Dieses Tool konvertiert die Konfigurationsdateien im *-ds.xml-Stil in das von der JBoss EAP 6 erwartete Format. Weitere Informationen finden Sie unter Abschnitt 4.1.6, »Verwendung des IronJacamar Migrationstools zur Migration der Datenquellen- und Ressourcenadapterkonfigurationen«.
In früheren Versionen der JBoss EAP war es möglich ein JNDI Remote Lookup von Datenquellen-Objekten auszuführen, diese Praxis war jedoch aus folgenden Gründen nicht empfohlen.
- Clientenkontrolle einer Serverressource ist unzuverlässig und kann zu undichten Verbindungen führen, wenn der Client abstürzt oder die Verbindung zum Server verliert.
- Die Performance ist sehr langsam, weil alle Datenbankenvorgänge durch einen
MBeanüber einen Proxy übermittelt werden. - Transaktionspropagierung ist nicht unterstützt.
NotSerializableException angezeigt, wenn Sie Ihre Applikation migrieren. Der empfohlene Ansatz ist es, eine EJB zu erstellen um auf die Datenquelle zuzugreifen und dann die EJB remote abzurufen. Weitere Informationen finden Sie im Abschnitt Remote Invocation Changes dieses Buches. Zusätzliche Informationen finden Sie im Development Guide für JBoss EAP 6 unter https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/.
3.1.6.3. Installation und Konfiguration des JDBC-Treibers
Der JDBC-Treiber kann auf eine der folgenden beiden Arten in den Container installiert werden:
- Als ein Deployment
- Als ein Kernmodul
domain/configuration/domain.xml-Datei konfiguriert. Läuft die JBoss Enterprise Application Platform Instanz als Standalone Server, so wird die Datenquelle in der standalone/configuration/standalone.xml file-Datei konfiguriert. Schemareferenzinformationen, die für beide Modi identisch sind, finden Sie im doc/-Verzeichnis der JBoss EAP 6 Installation. Wir gehen hier davon aus, dass der Server als Standalone Server läuft und die Datenquelle in der standalone.xml-Datei konfiguriert ist.
Prozedur 3.9. Installation und Konfiguration des JDBC-Treibers
Installation des JDBC-Treibers.
Installation des JDBC-Treibers als ein Deployment.
Dies ist die empfohlene Vorgehensweise, auf die der Treiber installiert werden sollte. Wenn der JDBC Treiber als Deployment installiert ist, wird er als normales JAR deployt. Wenn die JBoss EAP 6 Instanz als Standalone Server läuft, so kopieren Sie das JDBC 4.0 kompatible JAR insEAP_HOME/standalone/deployments/Verzeichnis. Für eine Managed Domain müssen Sie die Management Konsole oder das Management CLI benutzen um das JAR zu den Servergruppen zu deployen.Nachfolgend sehen Sie ein Beispiel für einen als Deployment an einem Standalone Server installierten MySQL JDBC-Treiber:$cp mysql-connector-java-5.1.15.jar
EAP_HOME/standalone/deployments/Jeder JDBC 4.0 kompatible Treiber wird automatisch erkannt und wird nach Namen und Version im System installiert. Ein JDBC 4.0 kompatibles JAR enthält eine Textdatei namensMETA-INF/services/java.sql.Driver, die den/die Treiberklassenname(n) festlegt. Ist der Treiber nicht JDBC 4.0 kompatibel, so kann er auf eine der folgenden Arten deploybar gemacht werden:- Erstellen Sie eine
java.sql.Driver-Datei für das JAR und fügen Sie diese unter demMETA-INF/services/-Pfad hinzu. Diese Datei sollte den Treiberklassennamen enthalten, zum Beispiel:com.mysql.jdbc.Driver - Erstellen Sie eine
java.sql.DriverDatei im Deployment Verzeichnis. Für eine als Standalone Server laufende JBoss EAP 6 Instanz sollte die Datei hier sein:EAP_HOME/standalone/deployments/META-INF/services/java.sql.Driver. Wenn der Server in einer Managed Domain ist, müssen Sie die Datei über die Managementkonsole oder das Management CLI deployen.
Die Vorteile dieser Vorgehensweisen sind:Die Nachteile dieser Vorgehensweisen sind:- Dies ist die einfachste Methode, da kein Modul definiert werden muss.
- Läuft der Server in einer Managed Domain, so werden nach dieser Vorgehensweise verwendende Deployments automatisch zu allen Servern in der Domain fortgepflanzt. Dies bedeutet, dass der Administrator das Treiber-JAR nicht manuell distribuieren muss.
- Falls der JDBC-Treiber aus mehr als einem JAR besteht, zum Beispiel dem Treiber-JAR plus einem abhängigen Lizenz-JAR oder Lokalisierungs-JAR, so können Sie den Treiber nicht als Deployment installieren. Sie müssen den JDBC-Treiber als ein Kernmodul installieren.
- Falls der Treiber nicht JDBC 4.0 kompatibel ist, so muss eine Datei erstellt werden, die die/den Treiberklassennamen enthält und muss in das JAR importiert werden oder im
deployments/-Verzeichnis überlagert werden.
Installation des JDBC-Treibers als Kernmodul.
Um einen JDBC-Treiber als Kernmodul zu installieren, müssen Sie eine Dateipfadstruktur unter demEAP_HOME/modules/-Verzeichnis erstellen. Diese Struktur enthält das JDBC-Treiber JAR, zusätzliche Anbieter Lizenzen oder Lokalisierungs-JARs und einemodule.xml-Datei, um das Modul zu definieren.Installation des MySQL-Treibers als Kernmodul
- Erstellen Sie die Verzeichnisstruktur
EAP_HOME/modules/com/mysql/main/ - Erstellen Sie im
main/-Unterverzeichnis einemodule.xml-Datei, die die folgende Moduldefinition für den MySQL JDBC-Treiber enthält:<?xml version="1.0" encoding="UTF-8"?> <module xmlns="urn:jboss:module:1.0" name="com.mysql"> <resources> <resource-root path="mysql-connector-java-5.1.15.jar"/> </resources> <dependencies> <module name="javax.api"/> </dependencies> </module>Der Modulname "com.mysql" stimmt mit der Verzeichnisstruktur für dieses Modul überein. Das<dependencies>-Element wird zur Festlegung der Abhängigkeiten von anderen Modulen dieses Moduls verwendet. In diesem Fall (wie auch bei allen anderen JDBC-Datenquellen) hängt dies von den Java JDBC APIs ab, die in einem anderen Modul namensjavax.apidefiniert sind. Dieses Modul befindet sich immodules/system/layers/base/javax/api/main/-Verzeichnis.Anmerkung
Stellen Sie sicher, dass sich KEINE Leerstelle am Anfang dermodule.xml-Datei befindet, da Sie sonst die Fehlermeldung "New missing/unsatisfied dependencies" für diesen Treiber erhalten. - Kopieren Sie das MySQL JDBC-Treiber JAR in das
EAP_HOME/modules/com/mysql/main/-Verzeichnis:$ cp mysql-connector-java-5.1.15.jar
EAP_HOME/modules/com/mysql/main/
Installation des IBM DB2 JDBC-Treibers und Lizenz-JAR als Kernmodul.
Dieses Beispiel zeigt Ihnen nur, wie Treiber deployt werden, die neben dem DBC Driver JAR zusätzliche JARs benötigen.- Erstellen Sie die Verzeichnisstruktur
EAP_HOME/modules/com/ibm/db2/main/. - Erstellen Sie im
main/-Unterverzeichnis einemodule.xml-Datei, die die folgende Moduldefinition für den IBM DB2 JDBC-Treiber und Lizenz enthält:<?xml version="1.0" encoding="UTF-8"?> <module xmlns="urn:jboss:module:1.1" name="com.ibm.db2"> <resources> <resource-root path="db2jcc.jar"/> <resource-root path="db2jcc_license_cisuz.jar"/> </resources> <dependencies> <module name="javax.api"/> <module name="javax.transaction.api"/> </dependencies> </module>Anmerkung
Stellen Sie sicher, dass sich KEINE Leerstelle am Anfang dermodule.xml-Datei befindet, da Sie sonst die Fehlermeldung "New missing/unsatisfied dependencies" für diesen Treiber erhalten. - Kopieren Sie den JDBC-Treiber und das Lizenz-JAR in das
EAP_HOME/modules/com/ibm/db2/main/-Verzeichnis.$ cp db2jcc.jar
EAP_HOME/modules/com/ibm/db2/main/$ cp db2jcc_license_cisuz.jarEAP_HOME/modules/com/ibm/db2/main/
Die Vorteile dieser Vorgehensweisen sind:Die Nachteile dieser Vorgehensweisen sind:- Dies ist die einzige Vorgehensweise, die funktioniert, wenn der JDBC-Treiber aus mehr als einem JAR besteht.
- Mit dieser Vorgehensweise können Treiber, die nicht JDBC 4.0 kompatibel sind, installiert werden, ohne dass das Treiber-JAR bearbeitet werden muss oder ein Datei-Overlay erstellt wird.
- Es ist schwieriger, ein Modul einzurichten.
- Das Modul muss manuell in jeden in einer Managed Domain laufenden Server kopiert werden.
Konfiguration der Datenquelle.
Fügen Sie den Datenbanktreiber hinzu.
Fügen Sie das<driver>-Element dem<drivers>-Element derselben Datei hinzu. Wieder enthält dies einige derselben Datenquelleninformationen, die zuvor in der*-ds.xml-Datei definiert waren.Bestimmen Sie zuerst, ob das Treiber-JAR JDBC 4.0 kompatibel ist. Ein JAR, das JDBC 4.0 kompatibel ist, enthält eineMETA-INF/services/java.sql.Driver-Datei, die den Treiberklassennamen festelegt. Der Server verwendet diese Datei, um den Namen der Treiberklasse(n) im JAR zu finden. Ein JDBC 4.0 kompatibler Treiber benötigt kein<driver-class>-Element, da es bereits im JAR festgelegt ist. Dies ist ein Beispiel des Treiberelements für einen JDBC 4.0 kompatiblen MySQL-Treiber:<driver name="mysql-connector-java-5.1.15.jar" module="com.mysql"/>
Ein Treiber, der nicht JDBC 4.0 kompatibel ist, benötigt ein<driver-class>-Attribut zur Identifikation der Treiberklasse, da es keineMETA-INF/services/java.sql.Driver-Datei gibt, die den Treiberklassennamen festlegt. Dies ist ein Beispiel für ein Treiberelement für einen Treiber, der nicht JDBC 4.0 kompatibel ist:<driver name="mysql-connector-java-5.1.15.jar" module="com.mysql"> <driver-class>com.mysql.jdbc.Driver</driver-class></driver>
Erstellen Sie die Datenquelle.
Erstellen Sie ein<datasource>-Element im<datasources>-Abschnitt derstandalone.xml-Datei. Diese Datei enthält viele derselben Datenquelleninformationen, die zuvor in der*-ds.xml-Datei definiert waren.Wichtig
Sie müssen den Server stoppen, ehe Sie die Server Konfigurations-Datei bearbeiten, damit Ihre Änderungen bei einem Server-Neustart als dauerhaft erstellt werden.Nachfolgend sehen Sie ein Beispiel für ein MySQL-Datenquellenelement in derstandalone.xml-Datei.<datasource jndi-name="java:/YourDatasourceName" pool-name="YourDatasourceName"> <connection-url>jdbc:mysql://localhost:3306/YourApplicationURL</connection-url> <driver>mysql-connector-java-5.1.15.jar</driver> <transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation> <pool> <min-pool-size>100</min-pool-size> <max-pool-size>200</max-pool-size> </pool> <security> <user-name>USERID</user-name> <password>PASSWORD</password> </security> <statement> <prepared-statement-cache-size>100</prepared-statement-cache-size> <share-prepared-statements/> </statement> </datasource>
Aktualisieren Sie JNDI Referenzen im Applikationscode.
Sie müssen abgelaufene JNDI-Lookup Namen im Applikationsquellencode ersetzen um die neuen, von Ihnen definierten JNDI standardisierten Datenquellen-Namen zu benutzen. Weitere Informationen finden Sie unter: Abschnitt 3.1.8.4, »Bearbeitung der Applikation zur Befolgung der neuen JNDI-Namespace Regeln«.Sie müssen auch vorhandene@ResourceAnnotationen ersetzen, die auf die Datenquellen zugreifen, um die neuen JNDI-Namen zu benutzen. Zum Beispiel:@Resource(name = "java:/YourDatasourceName").
3.1.6.4. Konfiguration der Datenquelle für Hibernate oder JPA
Prozedur 3.10. Entfernen des Hibernate Bündels
- Entfernen Sie die Hibernate JARs aus den Bibliotheksordnern Ihrer Applikation.
- Entfernen oder kommentieren Sie das
<hibernate.transaction.manager_lookup_class>-Element in Ihrerpersistence.xml-Datei aus, da dieses Element nicht benötigt wird.
3.1.6.5. Aktualisierung der Ressourcen-Adapter-Konfiguration
In früheren Versionen des Applikationsservers war die Ressourcenadapterkonfiguration in einer Datei mit einem Suffix von *-ds.xml definiert. Bei der JBoss EAP 6 wird ein Ressourcenadapter in der Server-Konfigurationsdatei definiert. Falls Sie eine Managed Domain betreiben, so ist die Konfigurationsdatei die EAP_HOME/domain/configuration/domain.xml-Datei. Falls Sie einen Standalone Server betreiben, so konfigurieren Sie den Ressourcenadapter in der EAP_HOME/standalone/configuration/standalone.xml-Datei. Schemareferenzinformation, die für beide Modi identisch ist, finden Sie unter Schemas auf der IronJacamar-Website unter: http://www.ironjacamar.org/documentation.html.
Wichtig
Die Ressourcenadapter-Deskriptorinformationen sind unter dem folgenden Subsystem-Element in der Serverkonfigurationsdatei definiert:
<subsystem xmlns="urn:jboss:domain:resource-adapters:1.1"/>Sie werden einige derselben Informationen verwenden, die zuvor in der Ressourcenadapter
*-ds.xml-Datei definiert wurden.
<resource-adapters>
<resource-adapter>
<archive>multiple-full.rar</archive>
<config-property name="Name">ResourceAdapterValue</config-property>
<transaction-support>NoTransaction</transaction-support>
<connection-definitions>
<connection-definition
class-name="org.jboss.jca.test.deployers.spec.rars.multiple.MultipleManagedConnectionFactory1"
enabled="true" jndi-name="java:/eis/MultipleConnectionFactory1"
pool-name="MultipleConnectionFactory1">
<config-property name="Name">MultipleConnectionFactory1Value</config-property>
</connection-definition>
<connection-definition
class-name="org.jboss.jca.test.deployers.spec.rars.multiple.MultipleManagedConnectionFactory2"
enabled="true" jndi-name="java:/eis/MultipleConnectionFactory2"
pool-name="MultipleConnectionFactory2">
<config-property name="Name">MultipleConnectionFactory2Value</config-property>
</connection-definition>
</connection-definitions>
<admin-objects>
<admin-object
class-name="org.jboss.jca.test.deployers.spec.rars.multiple.MultipleAdminObject1Impl"
jndi-name="java:/eis/MultipleAdminObject1">
<config-property name="Name">MultipleAdminObject1Value</config-property>
</admin-object>
<admin-object class-name="org.jboss.jca.test.deployers.spec.rars.multiple.MultipleAdminObject2Impl"
jndi-name="java:/eis/MultipleAdminObject2">
<config-property name="Name">MultipleAdminObject2Value</config-property>
</admin-object>
</admin-objects>
</resource-adapter>
</resource-adapters>
3.1.7. Sicherheitsänderungen
3.1.7.1. Konfiguration der Sicherheitsänderungen der Applikation
In früheren Versionen der JBoss EAP befanden sich properties-Dateien im EAP_HOME/server/SERVER_NAME/conf/-Verzeichnis im Klassenpfad und wurden leicht vom UsersRolesLoginModule aufgefunden. Bei der JBoss EAP 6 hat sich die Verzeichnisstruktur geändert. Properties-Dateien müssen jetzt innerhalb der Applikation verpackt sein, um im Klassen-Pfad verfügbar zu sein.
Wichtig
security-domains zur standalone/configuration/standalone.xml oder zur domain/configuration/domain.xml Server Konfigurations-Datei hinzu:
<security-domain name="example">
<authentication>
<login-module code="UsersRoles" flag="required">
<module-option name="usersProperties"
value="${jboss.server.config.dir}/example-users.properties"/>
<module-option name="rolesProperties"
value="${jboss.server.config.dir}/example-roles.properties"/>
</login-module>
</authentication>
</security-domain>
${jboss.server.config.dir} auf das EAP_HOME/standalone/configuration/ Verzeichnis. Läuft die Instanz in einer Managed Domain, so bezieht sich ${jboss.server.config.dir} auf das EAP_HOME/domain/configuration/ Verzeichnis.
Bei der JBoss EAP 6 verwenden Sicherheits-Domains nicht mehr das Präfix java:/jaas/ in ihrem Namen.
- Für Webanwendungen müssen Sie dieses Präfix aus den Sicherheits-Domain Konfigurationen in
jboss-web.xmlentfernen. - Für Enterprise Anwendungen müssen Sie dieses Präfix aus den Sicherheits-Domain Konfigurationen in
jboss-ejb3.xmlentfernen. Diese Datei hat diejboss.xmlin der JBoss EAP 6 ersetzt.
3.1.7.2. Aktualisieren von Applikationen, die PicketLink STS und Web Services benutzen
Wenn Ihre JBoss EAP 6.1 Applikation PicketLink STS und Web Services benutzt, müssen Sie vielleicht Änderungen vornehmen, wenn Sie zu JBoss EAP 6.2 oder späteren Versionen migrieren. Eine Fehlerbehebung, die auf JBoss EAP angewendet wird um CVE-2013-2133 zu adressieren, erzwingt Autorisierungsüberprüfungen durch den Container bevor an EJB3-based WS Endpunkte angefügte JAXWS Handler ausgeführt werden können. Daraus folgt, dass manche PicketLink STS Funktionalitäten betroffen sein können, weil der PicketLink SAML2Handler ein Sicherheitsprinzipal erstellt, das später in diesem Prozess verwendet werden soll. Sie sehen vielleicht eine NullPointerException im Serverlog, da das Prinzipal NULL ist, wenn der HandlerAuthInterceptor auf den SAML2Handler zugreift. Sie müssen diese Sicherheitsüberprüfung deaktivieren um dieses Problem zu beheben.
Prozedur 3.11. Zusätzliche Autorisierungsüberprüfungen deaktivieren
- Sie können die zusätzlichen Autorisierungsüberprüfungen und die vorhandenen PicketLink Deployments über eine der folgenden Methoden deaktivieren.
Einrichten einer System-weiten Property
Sie können zusätzliche Autorisierungsüberprüfungen auf Serverebene deaktivieren, indem Sie denorg.jboss.ws.cxf.disableHandlerAuthChecksSystem-Property Wert auftruesetzen. Diese Methode betrifft jedes Deployment, das auf dem Server gemacht wurde.Informationen darüber, wie Sie eine System-Property einrichten, finden Sie unter dem Abschnitt Configure System Properties Using the Management CLI imAdministration and Configuration Guide für JBoss EAP.Erstellen einer Property in der Web Services Deskriptor Datei des Deployments
Sie können zusätzliche Autorisierungsüberprüfungen auf Deploymentebene deaktivieren, indem Sie denorg.jboss.ws.cxf.disableHandlerAuthChecksProperty Wert auftruein derjboss-webservices.xmlDatei setzen. Diese Methode wirkt sich nur auf das spezifische Deployment aus.- Erstellen Sie eine
jboss-webservices.xmlDatei imMETA-INF/Verzeichnis des Deployments, für das Sie die zusätzlichen Autorisierungsüberprüfungen deaktivieren möchten. - Fügen Sie folgenden Inhalt hinzu:
<?xml version="1.1" encoding="UTF-8"?> <webservices xmlns="http://www.jboss.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee"> <property> <name>org.jboss.ws.cxf.disableHandlerAuthChecks</name> <value>true</value> </property> </webservices>
Anmerkung
org.jboss.ws.cxf.disableHandlerAuthChecks Property rendert ein System, das anfällig ist auf CVE-2013-2133. Wenn die Applikation die Anwendung von bei EJB Methoden deklarierten Sicherheitseinschränkungen erwartet, und diese nicht unabhängig vom JAX-WS Handler anwendet, dann sollte die Property nicht aktiviert werden. Die Property sollte nur für Abwärtskompatibilitäts-Zwecke verwendet werden, wenn sie zur Vermeidung eines Zusammenbruchs der Applikation benötigt wird.
3.1.8. JNDI-Änderungen
3.1.8.1. Aktualisierung der JNDI Namespace-Namen der Applikation
Mit EJB 3.1 wurden ein allgemeiner, standardisierter JNDI-Namespace und eine Reihe damit verbundener Namespaces eingeführt, die zu den verschiedenen Bereichen einer Java EE Applikation mappen. Die drei JNDI-Namespaces, die für portierbare EJB-Namen verwendet werden, sind java:global, java:module und java:app. Applikationen mit EJB, die JNDI verwenden, müssen so geändert werden, dass Sie der neuen, standardisierten JNDI-Namespace Konvention folgen.
Prozedur 3.12. JNDI-Lookups bearbeiten
- Erfahren Sie mehr über Abschnitt 3.1.8.2, »Portierbare EJB JNDI-Namen«
Beispiele von JNDI-Namespaces in früheren Releases und wie diese in der JBoss EAP 6 spezifiziert sind, finden Sie hier: Abschnitt 3.1.8.5, »Beispiele von JNDI-Namespaces in früheren Releases und wie diese in der JBoss EAP 6 spezifiziert sind«
3.1.8.2. Portierbare EJB JNDI-Namen
Die Java EE 6 Spezifikation definiert vier logische Namespaces, jeden mit seinem eigenen Bereich, aber portierbare EJB Names werden nur an drei von ihnen gebunden. Die folgende Tabelle zeigt, wann und wie jeder Namespace verwendet wird.
Tabelle 3.1. Portierbare JNDI-Namespaces
| JNDI-Namespace | Beschreibung |
|---|---|
| java:global |
Namen in diesem Namespace werden von allen in einer Applikationsserverinstanz deployten Applikationen geteilt. Verwenden Sie Namen um auf demselben Server deployte Archive von EJBs zu finden.
Im Folgenden sehen Sie ein Beispiel für ein java:global namespace:
java:global/jboss-seam-booking/jboss-seam-booking-jar/HotelBookingAction
|
| java:module |
Namen in diesem Namespace werden von allen Komponenten in einem Modul geteilt, zum Beispiel allen Enterprise Beans in einem einzelnen EJB-Modul oder allen Komponenten in einem Web-Modul.
Im Folgenden sehen Sie ein Beispiel für ein java:module namespace:
java:module/HotelBookingAction!org.jboss.seam.example.booking.HotelBooking
|
| java:app |
Namen in diesem Namespace werden von allen Komponenten in allen Modulen in einer einzelnen Applikation geteilt. Ein WAR und eine EJB Jar-Datei in derselben EAR-Datei hätten Zugriff auf die Ressourcen im java:app namespace.
Im Folgenden sehen Sie ein Beispiel für ein java:app namespace:
java:app/jboss-seam-booking-jar/HotelBookingAction
|
3.1.8.3. Übersicht über die JNDI-Namespace Regeln
Die JBoss EAP 6 wurde hinsichtlich der JNDI Namespace-Namen verbessert, um berechenbare und konsistente Regeln für jeden im Applikationsserver gebundenen Namen zu liefern sowie um zukünftige Kompatibilitätsprobleme zu vermeiden. Dies bedeutet, dass Sie Probleme mit den aktuellen Namespaces in Ihrer Applikation haben könnten, falls diese die neuen Regeln nicht berücksichtigen.
- Unqualifizierte, relative Namen wie
DefaultDSoderjdbc/DefaultDSsollten je nach Kontext relativ zujava:comp/env,java:module/envoderjava:jboss/envqualifiziert werden. - Unqualifizierte
absoluteNamen wie/jdbc/DefaultDSsollten relativ zu einemjava:jboss/rootNamen qualifiziert werden. - Qualifizierte
absoluteNamen wiejava:/jdbc/DefaultDSsollten auf dieselbe Weise wie unqualifizierteabsoluteNamen oben qualifiziert werden. - Der spezielle
java:jboss-Namespace wird über die gesamte AS Serverinstanz hinweg geteilt. - Jeder
relativeName mit einemjava:-Präfix muss in einem der fünf Namespaces sein:comp,module,app,globaloder dem proprietärenjboss. Jeder mitjava:xxxbeginnende Name, bei dem xxx nicht mit einem der fünf obigen übereinstimmt, führt zu einem "invalid name"-Fehler (ungültiger Name).
3.1.8.4. Bearbeitung der Applikation zur Befolgung der neuen JNDI-Namespace Regeln
- Nachfolgend sehen Sie ein Beispiel eines JNDI-Lookups in JBoss EAP 5.1. Dieser Code befindet sich in der Regel in einer Initialisierungsmethode.
private ProductManager productManager; try { context = new InitialContext(); productManager = (ProductManager) context.lookup("OrderManagerApp/ProductManagerBean/local"); } catch(Exception lookupError) { throw new ServletException("Unable to find the ProductManager bean", lookupError); }Beachten Sie, dass der Lookup-NameOrderManagerApp/ProductManagerBean/locallautet. - Das nachfolgende Beispiel zeigt, wie derselbe Lookup in der JBoss EAP 6 mittels Abhängigkeitseinspeisung codiert würde.
@EJB(lookup="java:app/OrderManagerEJB/ProductManagerBean!services.ejb.ProductManager") private ProductManager productManager;
Die Lookup-Werte sind jetzt als Mitgliedervariablen definiert und verwenden den neuen, portierbarenjava:appJNDI-Namespace Namenjava:app/OrderManagerEJB/ProductManagerBean!services.ejb.ProductManager. - Falls Sie die Abhängigkeitseinspeisung lieber nicht verwenden möchten, so können Sie weiterhin wie oben InitialContext erstellen und den Lookup bzw. die Suche so bearbeiten, dass der neue JNDI Namespace Name verwendet wird.
private ProductManager productManager; try { context = new InitialContext(); productManager = (ProductManager) context.lookup("java:app/OrderManagerEJB/ProductManagerBean!services.ejb.ProductManager"); } catch(Exception lookupError) { throw new ServletException("Unable to find the ProductManager bean", lookupError); }
3.1.8.5. Beispiele von JNDI-Namespaces in früheren Releases und wie diese in der JBoss EAP 6 spezifiziert sind
Tabelle 3.2. JNDI-Namespace Mapping Tabelle
| Namespace in JBoss EAP 5.x | Namespace in der JBoss EAP 6 | Anmerkungen |
|---|---|---|
| OrderManagerApp/ProductManagerBean/local | java:module/ProductManagerBean!services.ejb.ProductManager | Java EE 6 Standardbindung. Begrenzt durch das aktuelle Modul und nur innerhalb desselben Moduls zugänglich. |
| OrderManagerApp/ProductManagerBean/local | java:app/OrderManagerEJB/ProductManagerBean!services.ejb.ProductManager | Java EE 6 Standardbindung. Begrenzt durch die aktuelle Applikation und nur innerhalb derselben Applikation zugänglich. |
| OrderManagerApp/ProductManagerBean/local | java:global/OrderManagerApp/OrderManagerEJB/ProductManagerBean!services.ejb.ProductManager | Java EE 6 Standardbindung. Begrenzt durch den Applikationsserver und allgemein zugänglich. |
| java:comp/UserTransaction | java:comp/UserTransaction | Der Namespace wird durch die aktuelle Komponente begrenzt. Nicht zugänglich für Threads die kein Java EE 6 sind, z.B. direkt von Ihrer Applikation erstellte Threads. |
| java:comp/UserTransaction | java:jboss/UserTransaction | Allgemein zugänglich, verwenden Sie dies, falls java:comp/UserTransaction nicht verfügbar ist |
| java:/TransactionManager | java:jboss/TransactionManager | |
| java:/TransactionSynchronizationRegistry | java:jboss/TransactionSynchronizationRegistry |
3.1.9. HTTP/HTTPS/AJP Konnektorattribute zuordnen
3.1.9.1. Zuordnen der HTTP/HTTPS/AJP Connector Attribute
Tabelle 3.3. Zuordnen von Connector Attributen
| Attributnamen in der früheren Release | Entsprechung in JBoss EAP 6 | Details |
|---|---|---|
| maxThreads | max-connections | Dieses Attribut misst den JBossWeb level thread/connection Pool. Es ist auf den Konnektoren im Web Subsystem eingerichtet. Der Standard ist 512 pro CPU Kern.
<connector name="http" protocol="HTTP/1.1" scheme="http" socket-binding="http" enabled="true" max-connections="200" /> |
|
minSpareThreads
maxSpareThreads
| N/A | Es gibt kein Äquivalent für minSpareThreads oder maxSpareThreads, da kaum Anreiz zur Freigabe von Threads besteht. Wenn Sie einen Executor für den Konnektor benutzen anstatt des Standard Worker Thread Pools, wäre das Nächstliegende die core-threads Größe und keepalive-time Attribute. |
|
proxyName
proxyPort
|
proxy-name
proxy-port
| Dieses Attribut ist auf dem connector im web Subsystem eingerichtet.
<connector name="http" protocol="HTTP/1.1" scheme="http" socket-binding="http" enabled="true" proxy-name="proxy.com" proxy-port="80"/> |
|
redirectPort
|
redirect-port
|
Dieses Attribut ist auf dem
connector im web Subsystem eingerichtet.
connector name="http" protocol="HTTP/1.1" scheme="https" secure="true" socket-binding="http"
redirect-port="8443" proxy-name="loadbalancer.hostname.com" proxy-port="443"
|
|
enableLookups
|
enable-lookups
|
Dieses Attribut ist auf dem
connector im web Subsystem eingerichtet.
<connector name="http" protocol="HTTP/1.1" scheme="http" socket-binding="http" enable-lookups="true"/>" |
|
MaxHttpHeaderSize
| System Property | Dieses Attribut wird unter Verwendung der System Properties eingerichtet. Der Standardwert ist 8 KB.
<system-properties>
<property name="org.apache.coyote.http11.Http11Protocol.MAX_HEADER_SIZE" value="8192"/>
</system-properties>
|
|
maxKeepAliveRequests
| System Property | Dieses Attribut wird unter Verwendung der System Properties eingerichtet.
<system-properties>
<property name="org.apache.coyote.http11.Http11Protocol.MAX_KEEP_ALIVE_REQUESTS" value="1"/>
</system-properties>
|
|
connectionTimeout
| System Property | Dieses Attribut wird unter Verwendung der System Properties eingerichtet. Folgende Konfiguration setzt das AJP connectionTimeout auf 600000 Millisekunden (10 Minuten) und das HTTP connectionTimeout auf 120000 Millisekunden (2 Minuten).
<system-properties>
<!-- connectionTimeout for AJP connector. Default value is "-1" (no timeout). -->
<property name="org.apache.coyote.ajp.DEFAULT_CONNECTION_TIMEOUT" value="600000"/>
<!-- connectionTimeout for HTTP connector. Default value is "60000". -->
<property name="org.apache.coyote.http11.DEFAULT_CONNECTION_TIMEOUT" value="120000"/>
</system-properties>
|
|
Kompression
| System Property | Dieses Attribut aktiviert Kompression. Sie können den Inhaltstyp bestimmen, der als text/html,text/xml,text/plain vorgegeben ist. Sie können auch eine minimale Größe von zu komprimierendem Inhalt angeben, was als 2048 Bytes vorgegeben ist. Kompression wird über die System Properties eingerichtet.
<system-properties>
<property name="org.apache.coyote.http11.Http11Protocol.COMPRESSION" value="on"/>
<property name="org.apache.coyote.http11.Http11Protocol.COMPRESSION_MIN_SIZE" value="4096"/>
<property name="org.apache.coyote.http11.Http11Protocol.COMPRESSION_MIME_TYPES" value="text/javascript,text/css,text/html"/>
</system-properties>
|
|
URIEncoding
| System Property | Dieses Attribut wird unter Verwendung der System Properties eingerichtet.
<system-properties>
<property name="org.apache.catalina.connector.URI_ENCODING" value="UTF-8"/>
</system-properties>
|
|
useBodyEncodingForURI
| System Property | Dieses Attribut wird unter Verwendung der System Properties eingerichtet.
<system-properties>
<property name="org.apache.catalina.connector.USE_BODY_ENCODING_FOR_QUERY_STRING" value="true"/>
</system-properties>
|
|
server
| System Property | Dieses Attribut wird unter Verwendung der System Properties eingerichtet.
<system-properties>
<property name="org.apache.coyote.http11.Http11Protocol.SERVER" value="NewServerHeader"/>
</system-properties>
|
|
allowTrace
| System Property | Dieses Attribut wird unter Verwendung der System Properties eingerichtet.
<system-properties>
<property name="org.apache.catalina.connector.ALLOW_TRACE " value="true"/>
</system-properties>
|
|
xpoweredby
| System Property | Dieses Attribut wird unter Verwendung der System Properties eingerichtet.
<system-properties>
<property name="org.apache.catalina.connector.X_POWERED_BY " value="true"/>
</system-properties>
|
|
keepAliveTimeout
| N/A |
Vor der JBoss EAP 6.4 gab es keinen äquivalenten Paramater in JBoss EAP 6. Intern wurde es auf den Standardwert
connectionTimeout gesetzt.
Bei der JBoss EAP 6.4, einer neuen System Property, wurde
org.apache.coyote.http11.DEFAULT_KEEP_ALIVE_TIMEOUT eingeführt um das keepAliveTimeout zu kontrollieren. Das -Dorg.apache.coyote.http11.DEFAULT_KEEP_ALIVE_TIMEOUT Argument ist betroffen, wenn es mit dem -Dorg.apache.coyote.http11.DEFAULT_DISABLE_UPLOAD_TIMEOUT=true Argument verwendet wird.
|
|
disableUploadTimeout
connectionUploadTimeout
| N/A |
Derzeit gibt es keine äquivalenten Parameter in JBoss EAP 6. Das
disableUploadTimeout ist standardmäßig wahr und das connectionUploadTimeout benutzt intern den connectionTimeout Wert.
|
|
packetSize
| System Property | Dieses Attribut wurde über die System Properties eingerichtet. Die folgende Konfiguration setzt die AJP packetSize auf 20000
<system-properties>
<property name="org.apache.coyote.ajp.MAX_PACKET_SIZE" value="20000"/>
</system-properties>
|
|
maxPostSize
maxSavePostSize
|
max-post-size
max-save-post-size
| Der Wert 0 bedeutet unlimitiert. Beachten Sie, dass dieser Parameter die Datengröße nur dann limitieren kann, wenn Content-Type application/x-www-form-urlencoded ist. Weitere Informationen finden Sie unter dieser Lösung im Kundenportal: How to limit data size of HTTP POST method from a client to JBoss |
|
tomcatAuthentication
| System Property |
Abhängig von der Version von JBoss EAP 6 wird dieses Attribut unter Verwendung der System Property
org.apache.coyote.ajp.AprProcessor.TOMCATAUTHENTICATION oder org.apache.coyote.ajp.DEFAULT_TOMCAT_AUTHENTICATION eingerichtet. Ein Patch oder Upgrade ist für alle Versionen des Servers erforderlich.
Bei der JBoss EAP 6.0.1 wird tomcatAuthenticationunter Verwendung der folgenden Property konfiguriert.
<system-properties>
<property name="org.apache.coyote.ajp.AprProcessor.TOMCATAUTHENTICATION" value="false"/>
</system-properties>
Bei der JBoss EAP 6.1 und späteren Versionen wird tomcatAuthentication folgendermaßen konfiguriert:
<system-properties>
<property name="org.apache.coyote.ajp.DEFAULT_TOMCAT_AUTHENTICATION" value="false"/>
</system-properties>
Weitere Informationen finden Sie unter dieser Lösung im Kundenportal: How to configure tomcatAuthentication in JBoss EAP 6
|

Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.