Chapitre 3. Migration de votre application
3.1. Changements requis par la plupart des applications Copier lienLien copié sur presse-papiers!
3.1.1. Revue des changements de migration requis par la plupart des applications Copier lienLien copié sur presse-papiers!
3.1.2. Changements au niveau du chargement des classes Copier lienLien copié sur presse-papiers!
3.1.2.1. Mise à jour de l'application en raison des changements de chargement de classes Copier lienLien copié sur presse-papiers!
- Veuillez tout d'abord vous pencher sur le packaging de votre application et de ses dépendances. Pour plus d'informations, voir Section 3.1.2.3, « Mise à jour des dépendances d'applications en raison des changements de chargement de classes »
- Si votre application a une journalisation, vous devez spécifier les dépendances du module qui conviennent. Voir Section 3.1.4.1, « Modifier les Dépendances de Logging »
- En raison des changements dans le chargement de classe modulaire, vous devrez sans doute modifier la structure de votre EAR ou WAR. Voir Section 3.1.5.1, « Modifier l'empaquetage des EAR et des WAR » pour plus d'informations.
3.1.2.2. Les Dépendances de modules Copier lienLien copié sur presse-papiers!
Un module ne peut accéder qu'à ses propres classes et aux classes de modules sur lesquelles il possède une dépendance implicite ou explicite.
Procédure 3.1. Les Dépendances de modules
Comment fonctionnent les dépendances implicites ?
Les déployeurs qui se trouvent dans le serveur ajoutent implicitement et automatiquement certaines dépendances de module communément utilisées, commejavax.api
ousun.jdk
. Cela rend les classes visibles au déploiement au moment de l'exécution et soulage le développeur de la tâche d'ajouter explicitement les dépendances. Quand et comment ces dépendances implicites sont ajoutées est expliqué dans la section Implicit Module Dependencies (Dépendances de modules implicites) du chapitre Class Loading and Modules (Chargement de classes et Modules) du Development Guide (Guide de développement) de JBoss EAP 6 https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/.Comment fonctionnent les dépendances explicites ?
Pour les autres classes, les modules doivent être spécifiés explicitement sinon les dépendances manquantes entraînent des erreurs de déploiement ou de runtime. Si une dépendance est manquante, vous verrez des traces du styleClassNotFoundExceptions
ouNoClassDefFoundErrors
dans le journal du serveur. Si plus d'un module charge le même JAR ou si un module charge une classe qui étend une classe chargée dans un module différent, vous verrez des tracesClassCastExceptions
dans le journal du serveur. Pour spécifier des dépendances explicitement, modifierMANIFEST.MF
ou bien, créer un fichier de descripteur de déploiement spécifique à JBossjboss-deployment-structure.xml
. Pour plus d'informations sur les dépendances de modules, voir Overview of Class Loading and Modules (Aperçu Général des Classes de chargement et Modules) au chapitre Class Loading and Module (Guide de démarrage pour le développement d'applications) du Development Guide (Guide de développement) de JBoss EAP 6 https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/.
3.1.2.3. Mise à jour des dépendances d'applications en raison des changements de chargement de classes Copier lienLien copié sur presse-papiers!
Le chargement de classes de JBoss EAP 6 est considérablement différent par rapport aux versions précédentes de JBoss Enterprise Application Platform. Le chargement de classes est maintenant basé sur le projet JBoss Modules. Plutôt que d'avoir un chargeur de classe unique, hiérarchique qui charge tous les JAR dans un chemin d'accès de la classe plat, chaque bibliothèque devient un module qui se relie seulement aux modules précis dont elle dépend. Les déploiements JBoss EAP 6 sont également des modules et n'ont pas accès aux classes qui sont définies dans les JAR du serveur d'application, à moins qu'une dépendance explicite sur ces classes soit définie. Certaines dépendances de module définies par le serveur d'applications sont configurées automatiquement pour vous. Par exemple, si vous déployez une application Java EE, une dépendance sur l'API de Java EE sera ajoutée à votre module automatiquement. Pour une liste complète des dépendances qui sont automatiquement ajoutées, voir Implicit Module Dependencies dans le chapitre intitulé Class Loading and Modules du Development Guide de JBoss Enterprise Application Platform 6 à https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/.
Quand vous migrez votre application dans JBoss EAP 6, vous devrez sans doute effectuer une des tâches suivantes en raison des changements au niveau du chargement des classes modulaires.
3.1.3. Changements dans les fichiers de configuration Copier lienLien copié sur presse-papiers!
3.1.3.1. Créer ou modifier des fichiers qui contrôlent le chargement de classes dans JBoss EAP 6 Copier lienLien copié sur presse-papiers!
En raison du changement de chargement de classes modulaires dans JBoss EAP 6, vous devrez peut-être créer ou modifier un ou plusieurs fichiers pour ajouter des dépendances ou pour empêcher les dépendances automatiques de charger. Pour plus d'informations sur Class Loading and Modules (Class Loading Precedence), voir le chapitre Development Guide (Chargement de classes et Modules) du Guide de développement de JBoss EAP 6 https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/.
- jboss-web.xml
- Si vous avez défini un élément
<class-loading>
dans le fichierjboss-web.xml
, vous devrez le supprimer. Le comportement évoqué dans JBoss EAP 5 est maintenant le comportement de chargement par défaut dans JBoss EAP 6, donc ce n'est plus nécessaire. Si vous ne souhaitez pas supprimer cet élément, vous verrez ParseError et XMLStreamException dans votre log de serveur.Il s'agit d'un exemple d'élément<class-loading>
du fichierjboss-web.xml
qui est dé-commenté.Copy to Clipboard Copied! Toggle word wrap Toggle overflow - MANIFEST.MF
- Édité manuellement
- Selon les composants ou modules que votre application utilise, vous devrez peut-être ajouter une ou plusieurs dépendances à ce fichier. Vous pouvez les ajouter par l'une des entrées suivantes
Dependencies
ouClass-Path
.Voici un exemple deMANIFEST.MF
édité par un développeur :Manifest-Version: 1.0 Dependencies: org.jboss.logmanager Class-Path: OrderManagerEJB.jar
Manifest-Version: 1.0 Dependencies: org.jboss.logmanager Class-Path: OrderManagerEJB.jar
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Si vous modifiez ce fichier, veillez à inclure un caractère de nouvelle ligne en fin de fichier. - Créé par Maven
- Si vous utilisez Maven, vous devrez modifier votre fichier
pom.xml
pour créer des dépendances pour le fichierMANIFEST.MF
. Si votre application utilise EJB 3.0, vous aurez sans doute une section du fichierpom.xml
qui va ressembler à ce qui suit :Copy to Clipboard Copied! Toggle word wrap Toggle overflow Si le code EJB 3.0 utiliseorg.apache.commons.log
, vous aurez besoin de cette dépendance dans le fichierMANIFEST.MF
. Pour créer cette dépendance, ajouter l'élément<plugin>
au fichierpom.xml
comme suit :Copy to Clipboard Copied! Toggle word wrap Toggle overflow Dans l'exemple ci-dessus, le fichiersrc/main/resources/META-INF/MANIFEST.MF
ne doit comprendre uniquement la dépendance suivante :Dépendences: org.apache.commons.logging
Dépendences: org.apache.commons.logging
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Maven va créer un fichier completMANIFEST.MF
:Manifest-Version: 1.0 Dependencies: org.apache.commons.logging
Manifest-Version: 1.0 Dependencies: org.apache.commons.logging
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
- jboss-deployment-structure.xml
- Ce fichier est un descripteur de déploiement spécifique à JBoss qui peut être utilisé pour contrôler un chargement de classes en toute précision. Comme
MANIFEST.MF
, ce fichier peut être utilisé pour ajouter des dépendances. Peut également empêcher l'ajout automatique de dépendances, définir des modules supplémentaires, modifier un comportement de chargement de classe isolé de déploiement EAR, et ajouter des racines de ressources supplémentaires à un module.Il s'agit d'un exemple de fichierjboss-deployment-structure.xml
qui ajoute une dépendance pour le module JSF 1.2 et empêche le chargement automatique du module JSF 2.0.Copy to Clipboard Copied! Toggle word wrap Toggle overflow Pour obtenir des informations supplémentaires sur ce fichier, voir Section 3.1.3.2, « jboss-deployment-structure.xml ». - application.xml
- Dans les versions précédentes de JBoss EAP, vous pouviez contrôler l'ordre des déploiements dans un EAR par le fichier
jboss-app.xml
. Ce n'est plus le cas. Les spécifications de Java EE6 fournissent l'élément<initialize-in-order>
dansapplication.xml
qui permet de contrôler l'ordre dans lequel les modules Java EE sont déployés dans un EAR.Dans la plupart les cas, vous n'aurez pas besoin d'indiquer l'ordre de déploiement. Si votre application fait des injections de dépendances et des resource-refs pour se référer à des composants de modules externes, dans la plupart des cas, l'élément<initialize-in-order>
ne sera pas requis car le serveur de l'application sera capable implicitement de déterminer la meilleure façon d'ordonnancer les composants.SI vous avez une application qui contient unmyBeans.jar
et unmyApp.war
regroupés dans unmyApp.ear
. Un servlet dansmyApp.war
utilise une annotation@EJB
pour injecter un bean à partir demyBeans.jar
. Dans ce cas, le serveur d'application est conscient qu'il doit veiller à ce que le composant EJB soit disponible avant que le servlet ne démarre et vous n'êtes pas obligé d'utiliser l'élément<initialize-in-order>
.Cependant, si ce servlet utilise l'ancien style de référence JNDI lookup distant comme suit pour accéder au bean, vous devrez spécifier l'ordonnancement des modules.Dans ce cas, le serveur n'est pas en mesure de déterminer que le composant EJB se trouve dansinit() { Context ctx = new InitialContext(); ctx.lookup("TheBeanInMyBeansModule"); }
init() { Context ctx = new InitialContext(); ctx.lookup("TheBeanInMyBeansModule"); }
Copy to Clipboard Copied! Toggle word wrap Toggle overflow myBeans.jar
et vous devrez enforcer que les composants dumyBeans.jar
soient initialisés et démarrés avant les composants qui se trouvent dansmyApp.war
. Pour cela, définir l'élément<initialize-in-order>
àtrue
et indiquer l'ordre des modulesmyBeans.jar
etmyApp.war
dans le fichierapplication.xml
.Voici un exemple qui utilise l'élément<initialize-in-order>
pour contrôler l'ordre de déploiement. LemyBeans.jar
est déployé avant le fichiermyApp.war
.Copy to Clipboard Copied! Toggle word wrap Toggle overflow Le schéma du fichierapplication.xml
se trouve ici http://java.sun.com/xml/ns/javaee/application_6.xsd.Note
Vous devez savoir que lorsque vous définissez l'élément<initialize-in-order>
àtrue
vous ralentissez le déploiement. Il est préférable de définir les dépendances appropriées à l'aide d'injections de dépendances ou de resource-refs, ce qui donne au contenant une plus grande souplesse en matière d'optimisation des déploiements. - jboss-ejb3.xml
- Le descripteur de déploiement
jboss-ejb3.xml
remplace le descripteur de déploiementjboss.xml
et s'ajoute aux fonctions fournies par le descripteur de déploiementejb-jar.xml
fourni par Java Enterprise Edition (EE). Le nouveau fichier est incompatible avecjboss.xml
, et le fichierjboss.xml
est maintenant ignoré dans les déploiements. - login-config.xml
- Le fichier
login-config.xml
n'est plus utilisé dans la configuration de la sécurité. La sécurité est maintenant configurée dans l'élément<security-domain>
du fichier de configuration du serveur. Pour le serveur autonome, il s'agit du fichierstandalone/configuration/standalone.xml
. Si vous exécutez votre serveur dans un domaine géré, il s'agit du fichierdomain/configuration/domain.xml
.
3.1.3.2. jboss-deployment-structure.xml Copier lienLien copié sur presse-papiers!
jboss-deployment-structure.xml
est un descripteur de déploiement optionnel de JBoss EAP 6. Ce descripteur de déploiement fournit un contrôle pour le chargement de classes dans le déploiement.
EAP_HOME/docs/schema/jboss-deployment-structure-1_2.xsd
3.1.3.3. Empaquetage des ressources dans le nouveau système de chargement de classes modulaires Copier lienLien copié sur presse-papiers!
Dans les versions précédentes de JBoss EAP, toutes les ressources qui se trouvaient à l'intérieur du répertoire WEB-INF/
étaient ajoutées au chemin WAR. Dans JBoss EAP 6, les artefacts d'applications web ne sont chargées qu'à partir des répertoires WEB-INF/classes
et WEB-INF/lib
. Les erreurs d'empaquetage d'artifacts d'applications dans les emplacements spécifiés peuvent résulter en ClassNotFoundException
, NoClassDefError
, ou autres erreurs de runtime.
- Modifier l'empaquetage des ressources
- Pour que les ressources ne soient disponibles qu'aux applications, vous devez grouper les fichiers de propriétés, les JAR, ou autres artifacts avec le WAR en les déplaçant dans le répertoire
WEB-INF/classes/
ouWEB-INF/lib/
. Cette approche est décrite davantage en détails dans : Section 3.1.3.4, « Changer la location des propriétés de ResourceBundle » - Créer un module personnalisé
- Si vous souhaitez rendre les ressources personnalisées disponibles auprès de toutes les applications exécutant sur le serveur JBoss EAP 6, vous devrez créer un module personnalisé. Cette approche est décrite plus en détails dans : Section 3.1.3.5, « Créer un module personnalisé »
3.1.3.4. Changer la location des propriétés de ResourceBundle Copier lienLien copié sur presse-papiers!
Dans les versions précédentes de JBoss EAP, le répertoire EAP_HOME/server/SERVER_NAME/conf/
se trouvait dans le chemin de classe disponible à l'Application. Pour rendre les propriétés disponibles sur le chemin de classe de l'application dans JBoss EAP 6, vous devez les empaqueter dans votre application.
Procédure 3.2. Changer la location des propriétés de ResourceBundle
- Si vous déployez une archive WAR, vous devez empaqueter ces propriétés dans le dossier
WEB-INF/classes/
du WAR. - Si vous voulez que ces propriétés soient accessibles à toutes les composantes d'un EAR, alors vous devrez les empaqueter dans un JAR, en tant que root, puis mettre le JAR dans le dossier
lib /
du EAR.
3.1.3.5. Créer un module personnalisé Copier lienLien copié sur presse-papiers!
Procédure 3.3. Créer un module personnalisé
- Créer et compléter la structure de répertoire
module/
.- Créer une structure de répertoire sous le répertoire
EAP_HOME/module
qui contiendra les fichiers et les JAR.cd EAP_HOME/modules/ mkdir -p myorg-conf/main/properties
$ cd EAP_HOME/modules/ $ cd EAP_HOME/modules/ $ cd EAP_HOME/modules/ $ mkdir -p myorg-conf/main/properties
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Déplacer les fichiers de propriétés dans le répertoire
EAP_HOME/modules/myorg-conf/main/properties/
que vous avez créé à l'étape précédente. - Créer un fichier
module.xml
dans le répertoireEAP_HOME/modules/myorg-conf/main/
qui devra contenir l'XML suivant:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
- Modifier le sous-système
ee
du fichier de configuration du serveur. Vous pourrez utiliser JBoss CLI, ou bien, vous pourrez éditer le fichier manuellement.- Suivez ces étapes pour modifier le fichier de configuration du serveur par le JBoss CLI.
- Démarrez le serveur et connectez-vous au Management CLI.
- Dans Linux, saisir ce qui suit au niveau de la ligne de commande :
EAP_HOME/bin/jboss-cli.sh --connect
$ EAP_HOME/bin/jboss-cli.sh --connect
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Dans Windows, saisir ce qui suit au niveau de la ligne de commande :
C:\>EAP_HOME\bin\jboss-cli.bat --connect
C:\>EAP_HOME\bin\jboss-cli.bat --connect
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Vous devriez voir apparaître le résultat suivant :Connected to standalone controller at localhost:9999
Connected to standalone controller at localhost:9999
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Pour créer l'élément <global-modules>
myorg-conf
dans le sous-systèmeee
, tapez ce qui suit au niveau de la ligne de commande :/subsystem=ee:write-attribute(name=global-modules, value=[{"name"=>"myorg-conf","slot"=>"main"}])
/subsystem=ee:write-attribute(name=global-modules, value=[{"name"=>"myorg-conf","slot"=>"main"}])
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Vous devriez voir apparaître le résultat suivant :{"outcome" => "success"}
{"outcome" => "success"}
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
- Suivre ces étapes si vous préférez éditer manuellement le fichier de configuration du serveur.
- Arrêter le serveur et ouvrir le fichier de configuration du serveur dans un éditeur de texte. Si vous exécutez sur un serveur autonome, il s'agira du fichier
EAP_HOME/standalone/configuration/standalone.xml
. Il s'agira du fichierEAP_HOME/domain/configuration/domain.xml
si vous exécutez sur un domaine géré. - Chercher le sous-système
ee
et ajouter le module global demyorg-conf
. Ce qui suit est un exemple d'élément du sous-systèmeee
modifié pour inclure l'élémentmyorg-conf
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
- Si vous copiez un fichier nommé
my.properties
dans l'emplacement de module qui convient, vous pourrez alors charger les fichiers de propriétés en utilisant un code qui ressemble à ceci :Thread.currentThread().getContextClassLoader().getResource("my.properties");
Thread.currentThread().getContextClassLoader().getResource("my.properties");
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.1.4. Changements au niveau du logging Copier lienLien copié sur presse-papiers!
3.1.4.1. Modifier les Dépendances de Logging Copier lienLien copié sur presse-papiers!
JBoss LogManager supporte les serveurs frontaux pour tous les frameworks de journalisation, donc vous pouvez conserver votre code de logging actuel ou passer à la nouvelle infrastructure de journalisation de JBoss. Quelle que soit votre décision, à cause des changements au niveau du chargement de classes modulaires, vous devrez probablement modifier votre application pour ajouter les dépendances nécessaires.
Procédure 3.4. Mise à jour du code de logging d'application
3.1.4.2. Mise à jour du Code d'application pour les frameworks de Logging (journalisation) de tierce partie Copier lienLien copié sur presse-papiers!
Dans JBoss EAP 6, les dépendances de logging des frameworks de tierce partie connues comme Apache Commons Logging, Apache log4j, SLF4J, et Java Logging sont ajoutées par défaut. Dans la plupart des cas, il est préférable d'utiliser le framework de journalisation fourni dans le conteneur JBoss EAP. Toutefois, si vous avez besoin de fonctionnalités spécifiques fournies par des frameworks de tierce partie, vous devrez exclure le module JBoss EAP correspondant de votre déploiement. Notez que même si votre déploiement utilise un framework de journalisation de tierce partie, les logs du serveur continueront d'utiliser la configuration de sous-système de journalisation de JBoss EAP.
org.apache.log4j
de JBoss EAP 6 de votre déploiement. La première procédure fonctionne sur n'importe quelle version de JBoss EAP 6. La seconde procédure s'applique uniquement à JBoss EAP 6.3 ou version supérieure.
Procédure 3.5. Configurer JBoss EAP 6 pour utiliser log4j.properties ou le fichier log4j.xml
Note
- Créer un
jboss-deployment-structure.xml
avec le contenu suivant :Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Mettez le fichier
jboss-deployment-structure.xml
dans le répertoireMETA-INF/
ouWEB-INF/
si vous déployez un WAR, ou dansMETA-INF/
si vous déployez un EAR. Si votre déploiement inclut des déploiements dépendants supplémentaires, vous devrez également exclure le module de chaque sous-déploiement. - Inclure
log4j.properties
ou le fichierlog4j.xml
dans le répertoirelib/
de votre EAR, ou dans le répertoireWEB-INF/classes/
de votre déploiement WAR. Si vous souhaitez mettre le fichier dans le répertoirelib/
de votre WAR, vous devrez spécifier le chemin<resource-root>
dans le fichierjboss-deployment-structure.xml
.Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Démarrer le serveur JBoss EAP 6 avec l'argument de runtime suivant pour éviter de voir apparaître une exception
ClassCastException
de la console quand vous déployez une application :-Dorg.jboss.as.logging.per-deployment=false
-Dorg.jboss.as.logging.per-deployment=false
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Déployer votre application.
Procédure 3.6. Configurer les dépendances de journalisation de JBoss EAP 6.3 ou version supérieure
add-logging-api-dependencies
pour exclure des dépendances de framework de journalisation. Les étapes suivantes montrent comment modifier cet attribut de journalisation sur un serveur autonome JBoss EAP.
- Démarrer le serveur JBoss EAP 6 avec l'argument de runtime suivant pour éviter de voir apparaître une exception
ClassCastException
de la console quand vous déployez une application :-Dorg.jboss.as.logging.per-deployment=false
-Dorg.jboss.as.logging.per-deployment=false
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Ouvrir un terminal et se connecter au Management CLI.
- Dans Linux, saisir ce qui suit au niveau de la ligne de commande :
EAP_HOME/bin/jboss-cli.sh --connect
$ EAP_HOME/bin/jboss-cli.sh --connect
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Dans Windows, saisir ce qui suit au niveau de la ligne de commande :
C:\>EAP_HOME\bin\jboss-cli.bat --connect
C:\>EAP_HOME\bin\jboss-cli.bat --connect
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
- Modifier l'attribut
add-logging-api-dependencies
du sous-système de journalisation.Cet attribut contrôle si le conteneur ajoute des dépendances d'API de journalisation implicites à votre déploiement.- Si défini à
true
, qui est la valeur par défaut, toutes les dépendances d'API de journalisation implicites seront ajoutées. - Si défini à
false
, les dépendances ne seront pas ajoutées à vos déploiements.
Pour exclure les dépendances de framework de journalisation, vous devez définir cet attribut àfalse
à l'aide de la commande suivante :/subsystem=logging:write-attribute(name=add-logging-api-dependencies, value=false)
/subsystem=logging:write-attribute(name=add-logging-api-dependencies, value=false)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Cette commande ajoute l'élément<add-logging-api-dependencies>
au sous-systèmelogging
du fichier de configurationstandalone.xml
.<subsystem xmlns="urn:jboss:domain:logging:1.4"> <add-logging-api-dependencies value="false"/> .... </subsystem>
<subsystem xmlns="urn:jboss:domain:logging:1.4"> <add-logging-api-dependencies value="false"/> .... </subsystem>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Déployer votre application.
3.1.4.3. Modifier le code pour utiliser le nouveau framework de JBoss Logging Copier lienLien copié sur presse-papiers!
Pour utiliser le nouveau framework, vous devrez modifier vos importations et votre code comme suit :
Procédure 3.7. Modifier le code et les dépendances pour utiliser le nouveau framework de JBoss Logging
Modifier vos importations et votre code de logging
Voici un exemple de code qui utilise le framework de JBoss Logging :Copy to Clipboard Copied! Toggle word wrap Toggle overflow Ajouter la dépendance de logging
Le JAR qui contient les classes de JBoss Logging se trouve dans le module intituléorg.jboss.logging
. Votre fichierMANIFEST-MF
devrait ressembler à ceci :Manifest-Version: 1.0 Dependencies: org.jboss.logging
Manifest-Version: 1.0 Dependencies: org.jboss.logging
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Pour plus d'informations sur la façon de trouver la dépendance de module, consulter Section 3.1.2.3, « Mise à jour des dépendances d'applications en raison des changements de chargement de classes » et Section 4.2.1, « Déboguer et Résoudre les problèmes de migration ».
3.1.5. Changements au niveau packaging d'applications Copier lienLien copié sur presse-papiers!
3.1.5.1. Modifier l'empaquetage des EAR et des WAR Copier lienLien copié sur presse-papiers!
Quand vous migrez votre application, vous devez modifier la structure d'empaquetage de votre EAR ou WAR en raison du changement au niveau du chargement de classe modulaire. Les dépendances de modules sont chargées dans l'ordre spécifique suivant :
- Dépendances Système
- Dépendances Utilisateur
- Ressources locales
- Dépendances d'inter-déploiement
Procédure 3.8. Modifier l'empaquetage des archives
Empaqueter un WAR
Un WAR est un module simple et toutes les classes du WAR sont chargées par le même chargeur de classes. Cela signifie que les classes packagées dans le répertoireWEB-INF/lib/
sont traitées de la même façon que les classes qui se trouvent dans le répertoireWEB-INF/classes
.Empaqueter un EAR
Un EAR se compose de plusieurs modules. Le répertoireEAR/lib/
est un module unique et chaque sous-déploiement de jar WAR ou EJB du EAR est un module séparé. Les classes n'ont pas accès aux classes dans d'autres modules du EAR, à moins que des dépendances explicites n'aient été définies. Les sous-déploiements ont toujours une dépendance automatique sur le module parent qui leur donne accès aux classes dans le répertoireEAR/lib/
. Toutefois, les sous-déploiements n'ont pas toujours une dépendance automatique pour leur permettre de passer de l'un à l'autre. Ce comportement est contrôlé en définissant l'élément<ear-subdeployments-isolated>
dans la configuration du sous-systèmeee
comme suit :<subsystem xmlns="urn:jboss:domain:ee:1.0" > <ear-subdeployments-isolated>false</ear-subdeployments-isolated> </subsystem>
<subsystem xmlns="urn:jboss:domain:ee:1.0" > <ear-subdeployments-isolated>false</ear-subdeployments-isolated> </subsystem>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Défini par défaut à false, ce qui permet aux sous-déploiements de voir les classes qui appartiennent aux autres sous-déploiements du EAR.Pour obtenir des informations supplémentaires sur le chargement de classes, voir le chapitre Class Loading and Modules (Chargement de classes et modules) du Development Guide (Guide de développement) de JBoss EAP 6 https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/.
3.1.6. Changements au niveau de la configuration d'adaptateur de ressources et de source de données Copier lienLien copié sur presse-papiers!
3.1.6.1. Mise à jour de l'application en raison des changements de configuration Copier lienLien copié sur presse-papiers!
- Si votre application utilise une source de données, voir Section 3.1.6.2, « Mise à jour de la Configuration de la Source de données ».
- Si votre application utilise JPA et regroupe actuellement les JARS Hibernate, voir Section 3.1.6.4, « Configurer la source de données d'Hibernate ou JPA » pour vos options de migration.
- Si votre application utilise un adaptateur de ressources, voir Section 3.1.6.5, « Mise à jour de la Configuration de l'adaptateur de ressources ».
- Pour obtenir plus d'informations sur la façon de configurer les changements pour augmenter le niveau de sécurité: Section 3.1.7.1, « Configurer les changements de sécurité d'applications ».
3.1.6.2. Mise à jour de la Configuration de la Source de données Copier lienLien copié sur presse-papiers!
Dans les versions précédentes de JBoss EAP, la configuration de source de données JCA était définie dans un fichier avec un suffixe *-ds.xml
. Ce fichier était ensuite déployé sur le répertoire du serveur deployer/
ou fourni avec l'application. Le pilote JDBC était copié sur le répertoire du serveur server/lib/
ou fourni dans le répertoire WEB-INF/lib/
de l'application. Malgré que cette méthode de configuration de source de données soit toujours prise en charge pour le développement, il n'est pas recommandé pour la production parce qu'il n'est pas soutenu par les outils de gestion et administratifs de JBoss.
domain/configuration/domain.xml
du fichier. Si l'instance de la JBoss Enterprise Application Platform exécute comme un serveur autonome, la source de données est configurée dans le fichier standalone/configuration/standalone.xml
. Les sources de données configurées de cette façon peuvent être gérées et contrôlées par les interfaces de gestion de JBoss, y compris par la Web Management Console et une interface de ligne de commande (CLI). Ces outils permettent de gérer des déploiements et de configurer plusieurs serveurs exécutant dans un domaine géré.
Un pilote compatible JDBC 4.0 peut être installé sous forme de déploiement ou sous forme d'un module de base. Un pilote compatible JDBC 4.0 contient un fichier META-INF/services/java.sql.Driver
qui indique le nom de classe du pilote. Un pilote qui n'est pas compatible JDBC 4.0 requiert des étapes supplémentaires. Pour plus d'informations sur la façon de rendre un pilote JDBC 4.0 compatible et comment mettre à jour votre configuration de source de données actuelle pour qu'elle soit gérable par la Web Management Console et la CLI, voir Section 3.1.6.3, « Installer et Configurer le Pilote JDBC ».
Vous pouvez utiliser IronJacamar pour migrer les configurations de l'adaptateur de ressources et de source de données. Cet outil convertit les fichiers de configuration de style *-ds.xml
en formats familiers à JBoss EAP 6. Pour plus d'informations, consulter : Section 4.1.6, « Utilisation de l'outil IronJacamar pour migrer les Configurations d'aptateurs de ressources et de sources de données ».
3.1.6.3. Installer et Configurer le Pilote JDBC Copier lienLien copié sur presse-papiers!
Le pilote JDBC peut être installé dans le conteneur d'une des manières suivantes :
- Sous forme de déploiement
- Sous forme de module core
domain/configuration/domain.xml
du fichier. Si l'instance JBoss EAP 6 exécute comme un serveur autonome, la source de données est configurée dans le fichier standalone/configuration/standalone.xml
. Les informations de référence schéma, qui sont identiques pour les deux modes, se trouvent dans le répertoire doc/
de JBoss EAP 6. Dans le but de cette discussion, assumez que le serveur exécute de façon autonome et que la source de données est configurée dans le fichier standalone.xml
.
Procédure 3.9. Installer et Configurer le Pilote JDBC
Installer le pilote JDBC.
Installer le Pilote JDBC sous forme de déploiement.
C'est la méthode recommandée pour installer le pilote. Lorsque le pilote JDBC est installé comme un déploiement, il est déployé en tant que JAR ordinaire. Si l'instance de JBoss EAP 6 exécute en serveur autonome, copiez le JAR compatible JDBC 4.0 dans le répertoireEAP_HOME/standalone/deployments/
. Si le serveur exécute en domaine géré, vous devez utiliser la Console de gestion ou le Management CLI pour déployer le JAR dans les groupes de serveurs.Voici un exemple de pilote MySQL JDBC installé sous forme de déploiement de serveur autonome :$cp mysql-connector-java-5.1.15.jar EAP_HOME/standalone/deployments/
$cp mysql-connector-java-5.1.15.jar EAP_HOME/standalone/deployments/EAP_HOME/standalone/deployments/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Tout pilote conforme JDBC 4.0 est automatiquement reconnu et installé dans le système avec son nom et sa version. Un JAR conforme JDBC 4.0 contient un fichier-texte nomméMETA-INF/services/java.sql.Driver
qui indique les nom(s) de classe de pilote. Si le pilote n'est pas conforme JDBC 4.0, il peut être rendu déployable par l'un des moyens suivants :- Créer et ajouter un fichier
java.sql.Driver
au JAR dans le cheminMETA-INF/services/
. Ce fichier doit contenir le nom de classe du pilote, par exemple :com.mysql.jdbc.Driver
com.mysql.jdbc.Driver
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Créer un fichier
java.sql.Driver
dans le répertoire de déploiement. Pour une instance de JBoss EAP 6 exécutant en serveur autonome, le fichier devra aller à l'emplacement suivant :EAP_HOME/standalone/deployments/META-INF/services/java.sql.Driver
. Si le serveur est en domaine géré, vous devrez utiliser la Console de gestion ou le Management CLI pour déployer le fichier.
Les avantages de cette approche :Les inconvénients de cette approche :- Il s'agit de la méthode la plus aisée car il n'y a nul besoin de définir un module.
- Quand le serveur exécute dans un domaine géré, les déploiements qui utilisent cette approche sont automatiquement propagés dans tous les serveurs du domaine. Cela signifie que l'administrateur n'a nul besoin de distribuer le JAR Pilote manuellement.
- Si le pilote JDBC est constitué de plus d'un JAR, par exemple le JAR Pilote, plus un JAR Licence dépendant ou un JAR Localisation, vous ne pouvez pas installer le pilote comme déploiement. Vous devrez alors installer le pilote JDBC comme un module de base.
- Si le pilote n'est pas conforme à JDBC 4.0, un fichier doit être créé, contenant les noms de classe de pilote et doit être importé dans le JAR ou bien être superposé dans le répertoire
deployments/
.
Installer un Pilote JDBC comme Core Module.
Pour installer un pilote JDBC comme module principal, vous devez installer une structure de chemin de fichier sous le répertoireEAP_HOME/modules/
. Cette structure contiendra le JAR Pilote JDBC, tout JAR de localisation ou licence supplémentaire, et un fichiermodule.xml
pour définir le module.Installer un Pilote MySQL JDBC comme Core Module
- Créer la structure de répertoire de
EAP_HOME/modules/com/mysql/main/
- Dans le sous-répertoire
main/
, créer un fichiermodule.xml
qui contient la définition de module suivante pour le pilote MySQL JDBC :Copy to Clipboard Copied! Toggle word wrap Toggle overflow Le nom du module "com.mysql" doit correspondre à la structure du répertoire du module. L'élément<dependencies>
est utilisé pour spécifier les dépendances de ce module sur les autres modules. Dans un tel cas, comme pour tous les cas comprenant des sources de données JDCB, il sera dépendant des API JDBC qui sont définis dans un autre module nomméjavax.api
. Ce module se trouve sous le répertoiremodules/system/layers/base/javax/api/main/
.Note
Veillez à ne PAS laisser d'espace au début du fichiermodule.xml
sinon, vous aurez l'erreur "New missing/unsatisfied dependencies" pour ce pilote. - Copier le pilote JAR MySQL JDBC dans le répertoire
EAP_HOME/modules/com/mysql/main/
:cp mysql-connector-java-5.1.15.jar EAP_HOME/modules/com/mysql/main/
$ cp mysql-connector-java-5.1.15.jar EAP_HOME/modules/com/mysql/main/EAP_HOME/modules/com/mysql/main/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Installer le pilote IBM DB2 JDBC et le JAR Licence en tant que module principal.
Cet exemple est là pour vous démontrer comment déployer les pilotes qui requièrent des JAR en plus du JAR de pilote JDBC.- Créer la structure de répertoire de
EAP_HOME/modules/com/ibm/db2/main/
- Dans le sous-répertoire
main/
, créer un fichiermodule.xml
qui contient la définition de module suivante pour le pilote et la licence DB2 JDBC :Copy to Clipboard Copied! Toggle word wrap Toggle overflow Note
Veillez à ne PAS laisser d'espace au début du fichiermodule.xml
sinon, vous aurez l'erreur "New missing/unsatisfied dependencies" pour ce pilote. - Copier le pilote JDBC et le JAR de licence dans le sous-répertoire
EAP_HOME/modules/com/ibm/db2/main/
cp db2jcc.jar EAP_HOME/modules/com/ibm/db2/main/ cp db2jcc_license_cisuz.jar EAP_HOME/modules/com/ibm/db2/main/
$ cp db2jcc.jar EAP_HOME/modules/com/ibm/db2/main/EAP_HOME/modules/com/ibm/db2/main/ $ cp db2jcc_license_cisuz.jar EAP_HOME/modules/com/ibm/db2/main/EAP_HOME/modules/com/ibm/db2/main/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Les avantages de cette approche :Les inconvénients de cette approche :- Il s'agit de la seule approche qui fonctionne quand le pilote JDBC consiste en un JAR au moins.
- Avec cette approche, les pilotes qui ne sont pas conformes à JDBC 4.0 peuvent être installés sans modifier le JAR Pilote ou créer un fichier superposé.
- Il est plus difficile de définir un module.
- Le module doit être copié manuellement dans chaque serveur exécutant dans un domaine géré.
Configurer la source de données.
Ajouter le pilote de base de données.
Ajouter l'élément<driver>
à l'élément<drivers>
du même fichier. Là aussi, il contiendra les mêmes informations de source de données que celles préalablement définies dans le fichier*-ds.xml
.Déterminer tout d'abord si le pilote JAR est conforme JDBC 4.0. Un JAR qui est conforme JDBC 4.0 contient un fichierMETA-INF/services/java.sql.Driver
qui indique le nom de la classe du pilote. Le serveur utilise ce fichier pour trouver le nom des classe(s) de pilote du JAR. Un pilote qui est conforme à JDBC 4.0 n'a pas besoin d'élément<driver-class>
puisqu'il est déjà spécifié dans le JAR. Voici un exemple d'élément de pilote pour un pilote MySQL conforme JDBC 4.0 :Un pilote qui est conforme JDBC 4.0 a besoin d'un attribut<driver name="mysql-connector-java-5.1.15.jar" module="com.mysql"/>
<driver name="mysql-connector-java-5.1.15.jar" module="com.mysql"/>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow <driver-class>
pour identifier la classe du pilote puisqu'il n'y a pas de fichierMETA-INF/services/java.sql.Driver
qui spécifie le nom de classe du pilote. Il s'agit d'un exemple d'élément de pilote non conforme à JDBC 4.0 :<driver name="mysql-connector-java-5.1.15.jar" module="com.mysql"> <driver-class>com.mysql.jdbc.Driver</driver-class></driver>
<driver name="mysql-connector-java-5.1.15.jar" module="com.mysql"> <driver-class>com.mysql.jdbc.Driver</driver-class></driver>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Créer la source de données.
Créer un élément<datasource>
dans la section<datasources>
du fichierstandalone.xml
. Ce fichier contient plus ou moins les mêmes informations de source de données que celles préalablement définies dans le fichier*-ds.xml
.Important
Vous devez interrompre le serveur avant de modifier le fichier de configuration du serveur pour que votre changement puisse être persisté au redémarrage du serveur.Ce qui suit est un exemple d'élément de source de données MySQL du fichierstandalone.xml
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Mettre à jour les références JNDI dans le code d'application.
Vous devez remplacer les noms de recherche JNDI obsolètes dans le code source d'application pour utiliser les nouveaux noms de source de données standardisés que vous aurez définis. Pour plus d'informations, consulter : Section 3.1.8.4, « Modifier l'application pour qu'elle puisse suivre les nouvelles règles d'espace noms JNDI ».Vous devrez également remplacer toute annotation@Resource
existante qui accède à la source de données avec le nouveau nom JNDI. Par exemple :@Resource(name = "java:/YourDatasourceName").
@Resource(name = "java:/YourDatasourceName").
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.1.6.4. Configurer la source de données d'Hibernate ou JPA Copier lienLien copié sur presse-papiers!
Procédure 3.10. Supprimer le lot Hibernate
- Supprimer les JAR Hibernate de vos dossiers de bibliothèque d'applications.
- Supprimer et décommenter l'élément
<hibernate.transaction.manager_lookup_class>
de votre fichierpersistence.xml
car cet élément n'est pas utile.
3.1.6.5. Mise à jour de la Configuration de l'adaptateur de ressources Copier lienLien copié sur presse-papiers!
Dans les dernières versions du serveur d'applications, la configuration de l'adaptateur de ressources était définie dans un fichier ayant pour suffixe *-ds.xml
. Dans JBoss EAP 6, un adaptateur de ressources est configuré dans le fichier de configuration du serveur. Si vous exécutez un domaine géré, le fichier de configuration est le fichier EAP_HOME/domain/configuration/domain.xml
. Si vous exécutez en serveur autonome, configurez l'adaptateur de ressources dans le fichier EAP_HOME/standalone/configuration/standalone.xml
. Vous pourrez trouver les informations de référence schéma, identiques pour les deux modes, sous Schemas dans le site web IronJacamar à l'adresse suivante : http://www.ironjacamar.org/documentation.html.
Important
Les informations sur le descripteur d'adaptateur de ressources se trouvent dans le fichier de configuration du serveur, sous l'élément de sous-système suivant :
<subsystem xmlns="urn:jboss:domain:resource-adapters:1.1"/>
<subsystem xmlns="urn:jboss:domain:resource-adapters:1.1"/>
*-ds.xml
.
3.1.7. Changements au niveau sécurité Copier lienLien copié sur presse-papiers!
3.1.7.1. Configurer les changements de sécurité d'applications Copier lienLien copié sur presse-papiers!
Dans les versions précédentes de JBoss EAP, les fichiers de propriétés qui se trouvent dans le répertoire EAP_HOME/server/SERVER_NAME/conf/
étaient sur un chemin de classe et on pouvait les trouver facilement avec UsersRolesLoginModule
. Dans JBoss EAP 6, la structure du répertoire a changé. Les fichiers de propriétés doivent être empaquetés dans l'application pour les rendre disponibles par le chemin de classe.
Important
security-domains
au standalone/configuration/standalone.xml
ou au fichier de configuration du serveur domain/configuration/domain.xml
:
${jboss.server.config.dir}
fait référence au répertoire EAP_HOME/standalone/configuration/
. Si l'instance exécute en domaine géré, ${jboss.server.config.dir}
fait référence au répertoire EAP_HOME/domain/configuration/
.
Dans JBoss EAP 6, les domaines de sécurité n'utilisent plus le préfixe java:/jaas/
dans leurs noms.
- Pour les applications web, vous devez supprimer ce préfixe des configurations du domaine de sécurité dans le fichier
jboss-web.xml
. - Dans les applications Enterprise, vous devez supprimer ce préfixe des configurations du domaine de sécurité dans le fichier
jboss-ejb3.xml
. Ce fichier remplace le fichierjboss.xml
de JBoss EAP 6.
3.1.7.2. Mettre à jour les applications utilisant PicketLink STS et les Services Web Copier lienLien copié sur presse-papiers!
Si votre applicationJBoss EAP 6.1 utilise PicketLink STS et les services Web, vous devrez sans doute effectuer des changements quand vous migrerez vers JBoss EAP 6.2 ou version supérieure. Un correctif s'appliquant à JBoss EAP pour solutionner CVE-2013-2133 oblige le conteneur à vérifier les autorisations avant d'exécuter un gestionnnaire JAXWS qui serait attaché aux points de terminaison WS basés-EJB3. De ce fait, certaines fonctionnalités PicketLink STS peuvent être affectées car le SAML2Handler
de PicketLink établit un principal de sécurité conçu pour rêtre utilisé plus tard dans le processus. Vous apercevrez sans doute une exception NullPointerException
dans le journal du serveur parce que le principal est NULL
quand le HandlerAuthInterceptor
accède au SAML2Handler
. Vous devrez déssactiver ce contrôle de sécurité pour régler ce problème.
Procédure 3.11. Désactiver les contrôles d'autorisation supplémentaires
- Vous pouvez désactiver le contrôles d'autorisation supplémentaires et continuer d'utiliser les déploiements PicketLink existants par l'une des méthodes suivantes.
Définir une propriété système
Vous pouvez désactiver des contrôles d'autorisation supplémentaires au niveau serveur en définissant la valeur de la propriété systèmeorg.jboss.ws.cxf.disableHandlerAuthChecks
àtrue
. Cette méthode affecte tout développement effectué dans le serveur d'applications.Pour obtenir des informations sur la façon de définir une propriété système, voir la section Configure System Properties Using the Management CLI du guide Administration and Configuration Guide de JBoss EAP.Créer une propriété dans le fichier de descripteur de services Web du déploiement
Vous pouvez désactiver des contrôles d'authorisation supplémentaires au niveau du déploiement en définissant la valeur de la propriété systèmeorg.jboss.ws.cxf.disableHandlerAuthChecks
àtrue
dans le fichierjboss-webservices.xml
. Cette méthode n'affectera que le déploiement dont il s'agit.- Créer un fichier
jboss-webservices.xml
dans le répertoireMETA-INF
du déploiement dans lequel vous souhaitez désactiver les contrôles d'authorisation supplémentaires. - Ajouter le contenu suivant :
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Note
org.jboss.ws.cxf.disableHandlerAuthChecks
, on rend le système vulnérable à CVE-2013-2133. Si l'application s'attend à des restrictions de sécurité déclarées sur les méthodes EJB à appliquer et ne les applique pas indépendemment du gestionnaire JAX-WS, alors la propriété ne doit pas être activée. La propriété ne doit être utilisée qu'à but de rétro-compatibilité quand c'est utile afin d'éviter d'interrompre l'application.
3.1.8. Changements JNDI Copier lienLien copié sur presse-papiers!
3.1.8.1. Mise à jour des noms d'espace-noms JNDI d'application Copier lienLien copié sur presse-papiers!
EJB 3.1 introduit un espace-noms JNDI global standardisé et une série d'espace-noms connexes qui mappent vers les différents scopes d'une application Java EE. Les noms EJB portables ne peuvent se rattacher qu'à trois d'entre eux : java:global
, java:module
, et java:app
. Les applications avec EJBs qui utilisent JNDI doivent être mises à jour à la nouvelle convention d'espace-noms JNDI standardisée.
Procédure 3.12. Modifier les recherches JNDI
- Pour en savoir plus Section 3.1.8.2, « Noms JNDI EJB portables »
Des exemples d'espace-noms JNDI de versions précédentes et des informations sur la façon dont ils peuvent être spécifiés dans JBoss EAP 6 peuvent être consultés ici : Section 3.1.8.5, « Exemples d'espace noms JNDI de versions antérieures et la façon dont ils sont spécifiés dans JBoss EAP 6 »
3.1.8.2. Noms JNDI EJB portables Copier lienLien copié sur presse-papiers!
La spécification Java EE6 définit quatre espace-noms logiques, ayant chacun son propre scope mais les noms EJB ne sont rattachés qu'à trois d'entre eux. La table suivante explique quand et comment utiliser chaque espace-nom.
Espace-nom JNDI | Description |
---|---|
java:global |
Les noms sont partagés par toutes les applications déployées dans une instance de serveur d'applications. Utiliser les noms de cet espace-nom pour rechercher des EJBs d'archives externes déployées dans le même serveur.
Ce qui suit est un exemple d'espace-nom java:global namespace:
java:global/jboss-seam-booking/jboss-seam-booking-jar/HotelBookingAction
|
java:module |
Dans cet espace-nom, les noms sont partagés par tous les composants d'un module, c'est à dire et par exemple, tous les beans Enterprise d'un module EJB unique ou tous les composants d'un module web.
Ce qui suit est un exemple d'espace-nom java:global :
java:module/HotelBookingAction!org.jboss.seam.example.booking.HotelBooking
|
java:app |
Les noms sont partagés par tous les composants dans tous les modules d'une simple application. Ainsi, un WAR ou fichier jar EJB du même fichier EAR aura accès à toutes les ressources dans l'espace-nom java:app.
Ce qui suit est un exemple d'espace-nom java:app :
java:app/jboss-seam-booking-jar/HotelBookingAction
|
3.1.8.3. Revue des règles d'espace-noms JNDI Copier lienLien copié sur presse-papiers!
JBoss EAP 6 s'est améliorée au niveau des noms d'espace-noms JNDI, non seulement afin de fournir des règles prévisibles et cohérentes pour chaque nom lié dans le serveur d'applications, mais aussi pour éviter des problèmes de compatibilité à venir. Cela signifie que vous pouvez vous heurter à des problèmes d'espaces-noms dans votre application, s'ils ne suivent pas les nouvelles règles.
- Les noms relatifs non qualifiés tels que
DefaultDS
oujdbc/DefaultDS
doivent être qualifiés par rapport àjava:comp/env
,java:module/env
, oujava:jboss/env
, suivant le contexte. - Les noms non qualifiés tels que les noms
absolute
comme/jdbc/DefaultDS
doivent être qualifiés par rapport à un nomjava:jboss/root
. - Les noms qualifiés
absolute
tels quejava:/jdbc/DefaultDS
doivent être qualifiés de la même façon que les nomsabsolute
non qualifiés ci-dessus. - L'espace-nom
java:jboss
en particulier est partagé par toute l'instance de serveur AS. - Tout nom
relative
ayant pour préfixejava:
doit correspondre à l'un des cinq espace-noms :comp
,module
,app
,global
, oujboss
propriétaire. Tout nom commençant parjava:xxx
et dont xxx ne correspond pas à l'un des cinq espace-noms ci-dessous, résulterait en une erreur de nom non valide.
3.1.8.4. Modifier l'application pour qu'elle puisse suivre les nouvelles règles d'espace noms JNDI Copier lienLien copié sur presse-papiers!
- Voici un exemple de recherche JNDI dans JBoss EAP 5.1. On trouve normalement ce code dans la méthode d'initialisation.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Notez que le nom de recherche estOrderManagerApp/ProductManagerBean/local
. - Ce qui suit est un exemple qui montre comment une même recherche serait codifiée dans JBoss EAP 6.
@EJB(lookup="java:app/OrderManagerEJB/ProductManagerBean!services.ejb.ProductManager") private ProductManager productManager;
@EJB(lookup="java:app/OrderManagerEJB/ProductManagerBean!services.ejb.ProductManager") private ProductManager productManager;
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Les valeurs de recherche sont maintenant définies comme variables de membre et utilisent le nouveau nom d'espace nom JNDI portablejava:app
java:app/OrderManagerEJB/ProductManagerBean!services.ejb.ProductManager
. - Si vous préférez ne pas utiliser une injeciton de dépendance, vous pouvez toujours créer le nouvel InitialContext comme ci-dessus et modifier la recherche pour utiliser le nouvel espace nom JNDI.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.1.8.5. Exemples d'espace noms JNDI de versions antérieures et la façon dont ils sont spécifiés dans JBoss EAP 6 Copier lienLien copié sur presse-papiers!
Espace noms dans JBoss EAP 5.x | Espace noms dans JBoss EAP 6 | Commentaires supplémentaires |
---|---|---|
OrderManagerApp/ProductManagerBean/local | java:module/ProductManagerBean!services.ejb.ProductManager | Liaison standard Java EE6, étendue au module en cours et accessible uniquement dans le même module |
OrderManagerApp/ProductManagerBean/local | java:app/OrderManagerEJB/ProductManagerBean!services.ejb.ProductManager | Liaison standard Java EE6, étendue à l'application en cours et accessible uniquement dans la même application. |
OrderManagerApp/ProductManagerBean/local | java:global/OrderManagerApp/OrderManagerEJB/ProductManagerBean!services.ejb.ProductManager | Liaison standard Java EE6, étendue au serveur d'application en cours et accessible globalement. |
java:comp/UserTransaction | java:comp/UserTransaction | Espace nom étendu au composant en cours. Non Accessible pour les threads non EE, comme des threads que votre application crée directement. |
java:comp/UserTransaction | java:jboss/UserTransaction | Accessible globalement. À utiliser si java:comp/UserTransaction n'est pas disponible |
java:/TransactionManager | java:jboss/TransactionManager | |
java:/TransactionSynchronizationRegistry | java:jboss/TransactionSynchronizationRegistry |