La configuration standard de JBoss propose un système de déploiement d’applications très simple et pratique, mais pas forcément adapté à un environnement de production. Heureusement, il propose d’autres solutions…
Déploiement automatique
De façon standard, le répertoire deploy/ d’une configuration est l’endroit où déployer les services, composants et applications. Il suffit d’y déposer un fichier, conforme aux spécifications propres à chaque type de composant, pour que JBoss prenne le déploiement en compte. Il est possible de déployer les fichiers dans deploy/ ou dans ses sous-répertoires.
Types de déploiement
Chaque type de fichier est pris en compte par un service de déployement approprié. Il faut noter que le déploiement peut se faire sous 3 forme :
-
Fichier d’archive (.jar, .war, .ear,…)
-
Répertoire, avec un nom de fichier d’archive, extension comprise
-
Fichier de service
EARDeployer
-
Fichier d’archives .ear (enterprise archive)
-
META-INF/application.xml
-
Application J2EE, contiennent d’autres archives
-
deploy/ear-deployer.xml
EJBDeployer
-
Fichier d’archives .jar (java archive)
-
Contient META-INF/ejb-jar.xml
-
Module d’EJBs
-
deploy/ejb-deployer.xml
SARDeployer
-
Fichier xml *-service.xml
-
Fichier d’archives .sar (service archive)
-
META-INF/jboss-service.xml
-
Service JBoss (MBeans)
-
conf/xmdesc/org.jboss.deployment.JARDeployer-xmbean.xml
AbstractWebDeployer
-
Doit être implémenté pour le conteneur de servlet
-
TomcatDeployer
-
Fichier d’archives .war (web archive)
-
WEB-INF/web.xml
-
Application Web
RARDeployer
-
Fichier d’archives .rar (resource archive)
-
META-INF/ra.xml
-
Connecteurs JCA
-
deploy/jbossjca-service.xml
XSLSubDeployer
-
Fichier xml
-
Complément de configuration JCA
-
Fichiers *-ds.xml (datasources)
-
deploy/jbossjca-service.xml
HARDeployer
-
Fichier d’archives .har (hibernate archive)
-
META-INF/hibernate-service.xml
-
Module de persistence Hibernate
-
deploy/jboss-hibernate.deployer/META-INF/jboss-service.xml
AspectDeployer
-
Fichier xml *-aop.xml
-
Fichier d’archives .aop
-
META-INF/jboss-aop.xml
-
deploy/jboss-aop.deployer/META-INF/jboss-service.xml
BeanShellSubDeployer
-
Fichier .bsh
-
Script Bean Shell
-
deploy/bsh-deployer.xml
Répertoires de déploiement
Le répertoire de déploiement par défaut est deploy/, il est possible de le modifier, d’en ajouter d’autres, locaux ou distants.
Pour que les déploiements dans le nouveau répertoire (deployapp) soient pris en compte, il faut le déclarer au scanner, dans le fichier conf/jboss-service.xml de la configuration.
<mbean code="org.jboss.deployment.scanner.URLDeploymentScanner"
name="jboss.deployment:type=DeploymentScanner,flavor=URL">
...
<attribute name="URLs">
deploy/,deployapp/
</attribute>
...
</mbean>
Déploiement manuel
Il est possible de désactiver le scan automatique dans le fichier conf/jboss-service.xml.
<attribute name="ScanEnabled">false</attribute>
scan manuel
Pour déclencher un scan manuel depuis la jmx-console :
-
MBean jboss.deployment:DeploymentScanner
-
opération scan
Pour réactiver temporairement le scan automatique depuis la jmx-console :
-
MBean jboss.deployment:DeploymentScanner
-
attribut ScanEnabled=true, "Apply Changes"
Pour Ajouter / enlever temporairement une URL :
-
MBean jboss.deployment:DeploymentScanner
-
addURL(url) / removeURL(url)
déploiement manuel
Pour Déployer / retirer manuellement un fichier :
-
MBean jboss.system:MainDeployer
-
opération deploy(url) / undeploy(url)
Remarques
Les opérations deploy, undeploy et redeploy du MBean jboss.system:MainDeployer existent en plusieurs version, avec des types de paramètres différents. Depuis la jmx-console, il faut utiliser les versions qui prennent une url de type java.net.URL ; les autres ne fonctionnent pas.
L’appel de ces opérations est mal géré dans MC4J (1.2b6) :
-
L’appel de deploy / undeploy / redeploy provoque une exception.
-
Le MBean jboss.deployment:flavor=URL,type=DeploymentScanner ne se charge pas.
L’appel depuis l’utilitaire twiddle se fait par les lignes de commande suivantes :
twiddle invoke "jboss.system:service=MainDeployer" redeploy "file:///C:/mandeploy/hello.war/"
L’appel JMX depuis une classe Java est décrit dans un autre article.
Ordre de déploiement
Scanner et Sorter
Au démarrage de JBoss, l’ordre de déploiement des fichiers est déterminé par un DeploymentSorter. Par défaut, celui-ci déploie les fichiers en fonction de leur extension ("sar", "service.xml", "rar", "jar", "war", "ear",…), dans l’ordre alphabétique. JBoss fournit un PrefixDeploymentSorter qui déploie d’abord les fichiers sans préfixe, selon leur extension, puis déploie les fichiers préfixé par un nombre entier sont déployés selon la valeur numérique de ce préfixe.
Dépendances
Plutôt que de gérer des noms avec préfix, il est possible de spécifier les dépendances dans les fichiers de déploiement, EJB par EJB. Ainsi, si l’EJB A a une référence vers l’EJB B (<ejb-ref> dans ejb-jar.xml), il est possible de préciser cette dépendance dans le fichier jboss.xml :
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jboss PUBLIC "-//JBoss//DTD JBOSS 4.0//EN" "http://www.jboss.org/j2ee/dtd/jboss_4_0.dtd">
<jboss>
<enterprise-beans>
<session>
<ejb-name>A</ejb-name>
<jndi-name>ejb/A</jndi-name>
<depends>jboss.j2ee:service=EJB,jndiName=ejb/B</depends>
</session>
</enterprise-beans>
</jboss>