17 avril 2008
Imprimer ce billet

Les plans de déploiement Weblogic

"Il faudrait pouvoir changer le nom de la DataSource en fonction des environnements"
"Ouh la la, c'est compliqué, il faut décompresser l'archive de l'application MonApp.ear et les 5 fichiers .war et les 8 fichiers .jar des ejb. Ça prendra 3 semaines minimum, et sans la documentation!"

(La fonctionnalité "plans de déploiement" décrite dans cette article est disponible à partir de WebLogic 9)

Lors de l'article précédent, nous avions montré comment packager un pool de connexions JDBC avec un EAR. Il semble évident que si cette solution est intéressante, elle n'est suffisante pour paramétrer cette application dans différents environnements projets (Recette, Pré-Production ou Production). Il n'est pas envisageable que pour chaque environnement, il faille ouvrir l'archive, modifier le fichier XML avec les nouveaux paramètres et pour finir de la refermer.
L'idée des plans de déploiement est de laisser l'archive telle quelle et de lui associer au moment du déploiement les nouveaux paramètres. Un plan de déploiement est un fichier XML qui reprend l'ensemble des nouveaux paramètres à surcharger.

Reprenons l'application MyWebApplicationEAR décrite dans la première partie et appliquons un plan de déploiement pour modifier quelques paramètres.

Préparation de l'environnement de travail

mkdir DeployementPlan
mkdir DeployementPlan/MyWebApplicationEAR
mkdir DeployementPlan/MyWebApplicationEAR/app
cp MyWebApplicationEAR.ear DeployementPlan/app

#vérifions la structure de répertoire
find DeployementPlan

./MyWebApplicationEAR
./MyWebApplicationEAR/app
./MyWebApplicationEAR/app/MyWebApplicationEAR.ear

Génération du template du plan

WebLogic fournit un outil qui permet de générer un template de plan de déploiement basé sur les différents éléments de l'ear passé en paramètre.

cd D:xebia-blogdeploymentplan
java -classpath ${WLS_HOME}/server/lib/weblogic jar weblogic.PlanGenerator -root MyWebApplicationEAR

Generating plan for application MyWebApplicationEARappMyWebApplicationEAR.ear
Export option is: dependencies
Exporting properties...
Saving plan to D:xebia-blogdeploymentplanMyWebApplicationEARplanplan.xml...
<4 avr. 2008 18 h 03 CEST> <Info> <J2EE Deployment SPI> <BEA-260072> <Saved configuration for application, MyWebApplicationEAR.ear>

MyWebApplicationEAR
+---app
|       MyWebApplicationEAR.ear
|
---plan
        plan.xml

Le fichier template du plan (plan.xml) a été créé dans le répertoire plan

Structure du fichier plan.xml

A ce niveau du processus, le fichier plan.xml contient uniquement la définition des différents modules qui composent l'archive EAR. On retrouve donc:

  • un module MyWebApplicationEAR.ear, de type EAR, avec 3 descripteurs de déploiement (weblogic-application.xml, application.xml et ds-jdbc.xml)
  • un module MyWebApplication.war, de type WAR, avec 2 descripteurs de déploiement (web.xml et weblogic.xml)
<?xml version='1.0' encoding='UTF-8'?>
<deployment-plan xmlns="http://www.bea.com/ns/weblogic/90"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://www.bea.com/ns/weblogic/90 http://www.bea.com/ns/weblogic/90/weblogic-deployment-plan.xsd"
 global-variables="false">

  <application-name>MyWebApplicationEAR.ear</application-name>

  <!-- Descripteurs portés par l'EAR -->

  <module-override>
    <module-name>MyWebApplicationEAR.ear</module-name>
    <module-type>ear</module-type>
    <module-descriptor external="false">
      <root-element>weblogic-application</root-element>
      <uri>META-INF/weblogic-application.xml</uri>
    </module-descriptor>
    <module-descriptor external="false">
      <root-element>application</root-element>
      <uri>META-INF/application.xml</uri>
    </module-descriptor>
    <module-descriptor external="false">
      <root-element>jdbc-data-source</root-element>
      <uri>META-INF/ds-jdbc.xml</uri>
    </module-descriptor>
  </module-override>

  <!-- Descripteurs portés par le WAR-->
  <module-override>
    <module-name>MyWebApplication.war</module-name>
    <module-type>war</module-type>
    <module-descriptor external="false">
      <root-element>weblogic-web-app</root-element>
      <uri>WEB-INF/weblogic.xml</uri>
    </module-descriptor>
    <module-descriptor external="false">
      <root-element>web-app</root-element>
      <uri>WEB-INF/web.xml</uri>
    </module-descriptor>
  </module-override>
  <config-root xsi:nil="true"></config-root>
</deployment-plan>

Paramétrage du plan en utilisant la console d'administration

Notre plan est vide, il faut maintenant indiquer les paramètres à modifier. Dans un premier temps, le plus simple est d'utiliser la console d'administration du domaine.

  1. Déployer l'application en sélectionnant le répertoire DeployementPlan/MyWebApplicationEAR.
  2. Accepter l'ensemble des valeurs par défaut (Next, Next, Finish)
  3. Activer les modifications.

Remarque : On voit que le fichier plan.xml est indiqué comme 'Deployment Plan'

Paramétrage pour un environnement de Recette.

  1. Sélectionner le module MyWebApplicationDS
  2. Dans le menu Configuration / ConnectionPool, modifier les propriétés UserName et Password (Recette/Recette) et Maximum Capacity=10 et Web Session Timeout (in seconds) = 360.
  3. Après les différentes phases de sauvegarde, les modifications sont inscrites directement dans le fichier plan/plan.xml, les fichiers de configuration du domaine Weblogic (config/config.xml et consorts) restent inchangés. La console WebLogic indique cette différence par un bouton 'ReleaseConfiguration' et non 'Apply Changes'.

Structure du fichier plan.xml

Si on examine les modifications faites par la Console Weblogic sur le fichier plan.xml, on peut noter:

  • l'apparition d'un ensemble de nœuds gardé par <variable-definition/>. Il contient un ensemble de couples de variables (name, value) qui correspondent aux paramètres modifiés
<deployment-plan xmlns="http://www.bea.com/ns/weblogic/90"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ...>

  <application-name>MyWebApplicationEAR</application-name>
  <!-- Bloc Variable Definition -->
  <variable-definition>
    <variable>
      <name>JDBCDriverParams_PasswordEncrypted_12040376123280</name>
      <value>{3DES}QZJ2MfqOliA=</value>
    </variable>
    <variable>
      <name>JDBCConnectionPoolParams_MaxCapacity_12040378132185</name>
      <value>10</value>
    </variable>
    <variable>
      <name>JDBCProperty_user_Value_12040378358436</name>
      <value>recette</value>
    </variable>
    <variable>
      <name>SessionDescriptor_timeoutSecs_12040384414060</name>
      <value>360</value>
    </variable>
  </variable-definition>
  .....
</deployment-plan>

  • la modification des nœuds . Pour chaque variable qui concerne le module, une expression XPath est définie pour permettre au serveur d'application d'effectuer la substitution avec la nouvelle valeur.
<deployment-plan xmlns="http://www.bea.com/ns/weblogic/90"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ...>

....
   <module-descriptor external="false">
      <root-element>jdbc-data-source</root-element>
      <uri>META-INF/ds-jdbc.xml</uri>
      <variable-assignment>
        <name>JDBCDriverParams_PasswordEncrypted_12040376123280</name>
        <xpath>/jdbc-data-source/jdbc-driver-params/password-encrypted</xpath>
      </variable-assignment>
      <variable-assignment>
        <name>JDBCConnectionPoolParams_MaxCapacity_12040378132185</name>
        <xpath>/jdbc-data-source/jdbc-connection-pool-params/max-capacity</xpath>
      </variable-assignment>
      <variable-assignment>
        <name>JDBCProperty_user_Value_12040378358436</name>
        <xpath>/jdbc-data-source/jdbc-driver-params/properties/property/[name="user"]/value</xpath>
      </variable-assignment>
    </module-descriptor>
....
</deployment-plan>

A partir de ce plan créé pour un environnement de type 'Recette' (plan-recette.xml), il est facile de le décliner pour d'autres environnement, ex la 'Production' (plan-production.xml). Les changements sont :

  • les propriétés UserName et Password (Production/Production) et
  • la propriété Maximum Capacity=20.
DeployementPlanMyWebApplicationEAR

+---app
|       MyWebApplicationEAR.ear
|
---plan
        plan-production.xml
        plan-recette.xml

(Note: le fichier plan.xml a été renommé en 'plan-recette.xml').

Utilisation du plan

Une fois les plans créés, il est très facile avec WLST de déployer l'application sur l'environnement cible avec son plan de déploiement.
Note : Une fois les fichiers de plan de déploiement créés, il n'est pas nécessaire de conserver une arborescence ./app et ./plan comme établi en début d'article.

Exemple: déploiement de l'application MyWebApplicationEAR en mode production.

deploy(appName='MyWebApplicationEAR',path='/vers/monfichier/ear/MyWebApplicationEAR.ear', planPath=/vers/mon/plan/MyWebApplicationEAR/plan/plan-production.xml')

Vérification avec l'application MyWebApplication:

Les plans de déploiement peuvent également servir à mettre à jour les paramètres de l'application si celle-ci est déjà déployée dans le serveur WebLogic

  • Soit avec la console d'administration, deployement --> update

Exemple:

updateApplication(''MyWebApplicationEAR','/vers/mon/plan/MyWebApplicationEAR/plan/plan-production-tuning.xml')

Conclusion

Les plans de déploiement :

  • répondent à un besoin longtemps exprimé par les utilisateurs: pouvoir modifier le paramétrage d'une application sans à nécessiter de lourdes procédures d'extraction des descripteurs de déploiement enfouis dans les archives J2EE (.ear/.jar/.war).
  • permettent de séparer clairement les rôles: d'un côté les développeurs créent l'application, de l'autre le 'déployeur' ou l'administrateur adapte l'application à l'environnement cible.

Documentation BEA,Deploying Applications to WebLogic Server