Déploiement avec JBoss

Cette page a été rédigée il y a fort fort longtemps, et n'a pas tellement été mise à jour.

 

Vous savez, moi je ne crois pas qu'il y ait de bonne ou de mauvaise page. Moi, si je devais résumer mon wiki aujourd'hui avec vous, je dirais que c'est d'abord des rencontres. Des gens qui m'ont tendu la main, peut-être à un moment où je ne pouvais pas, où j'étais seul chez moi. Et c'est assez curieux de se dire que les hasards, les rencontres forgent une destinée... Parce que quand on a le goût de la chose, quand on a le goût de la chose bien faite, le beau geste, parfois on ne trouve pas l'interlocuteur en face je dirais, le miroir qui vous aide à avancer. Alors ça n'est pas mon cas, comme je disais là, puisque moi au contraire, j'ai pu ; et je dis merci au wiki, je lui dis merci, je chante le wiki, je danse le wiki... je ne suis qu'amour ! Et finalement, quand des gens me disent « Mais comment fais-tu pour avoir cette humanité ? », je leur réponds très simplement que c'est ce goût de l'amour, ce goût donc qui m'a poussé aujourd'hui à entreprendre une construction logicielle... mais demain qui sait ? Peut-être simplement à me mettre au service de la communauté, à faire le don, le don de soi.

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>