Déploiement avec JBoss

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 :

EARDeployer

EJBDeployer

SARDeployer

AbstractWebDeployer

RARDeployer

XSLSubDeployer

HARDeployer

AspectDeployer

BeanShellSubDeployer

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 :

Pour réactiver temporairement le scan automatique depuis la jmx-console :

Pour Ajouter / enlever temporairement une URL :

déploiement manuel

Pour Déployer / retirer manuellement un fichier :

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 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>