Publié par
Il y a 10 années · 5 minutes · Java / JEE

Packagez vos sources de données avec WebLogic

Cet article inaugure une série autour de fonctions avancées et souvent méconnues apparues dans les dernières versions du serveur d’application WebLogic.

Une application J2EE utilise généralement une ou plusieurs sources de données (datasources). La spécification J2EE permet au mieux de référencer le nom JNDI de la source de données dans le descripteur de déploiement de l’application (ou de la web-app). En revanche, le paramétrage complet de la source de données (Type, URL JDBC, Taille du Pool,…) est une opération spécifique à chaque serveur d’application. Lorsque vient le temps de la livraison de l’application en dehors de l’environnement de développement (Intégration, Recette, …), les équipes fournissent généralement l’archive de l’application à déployer et un document d’installation au format Word. Il décrit, à l’aide de nombreuses copies d’écran, les opérations à effectuer à travers l’application d’administration pour déclarer et paramétrer les sources de données avant de procéder au déploiement du fichier MonApplication.ear proprement dit. Cet article montre comment avec le serveur d’application Weblogic 9+, il est possible d’associer, à l’application à déployer, l’ensemble des ses ressources, en particulier, le paramétrage de ses sources de données.

Exemple: Pour illustrer mon propos, j’utiliserai une application web, MyWebApplication, qui affiche des informations sur une connexion JDBC obtenue par une DataSource inscrite dans l’arbre JDNI. Cette application est classiquement packagée sous forme d’une archive web, MyWebApplication.war, elle-même encapsulée dans une archive MyWebApplicationEAR.ear.

télécharger MyWebApplicationEAR.ear et retrouver l’ensemble des sources dans le repository SVN de Xebia France, branche /svn/trunk/wls/deployment.

Si on déploie cette application et que la source de données MyDataSource n’est pas correctement installée, par exemple suite à un mauvais paramétrage du nom JNDI, on obtient l’erreur suivante:


javax.naming.NameNotFoundException: 
Unable to resolve 'MyDataSource'. Resolved ''; remaining name 'MyDataSource'

NameNotFoundException.png

Depuis la version 9, le serveur d’application WebLogic offre un moyen de packager les ressources JDBC dans l’archive ear.

Etapes

Dans le fichier META-INF/weblogic-application.xml,spécifique à l’éditeur, déclarer un module de type JDBC.


  MyWebApplicationDS 
  JDBC                        
  META-INF/ds-jdbc.xml

Cette configuration indique que le fichier ds-jdbc.xml placé dans le répertoire META-INF de l’archive contient des élements de configuration de type ‘source de données’ (JDBC)

  • l’extension -jdbc.xml est obligatoire (sic !)
  • le répertoire de stockage du fichier xml est libre. Il est possible de placer ces modules dans un répertoire autre que ‘META-INF/’, par exemple ‘modules/’.
  • si Eclipse WTPest utilisé comme IDE, déposer les modules dans le répertoire META-INF/ et ils seront automatiquement intégrés au packaging de l’EAR et déployés sur le serveur d’application.

Contenu du fichier META-INF/ds-jdbc.xml:



    MyDevDataBase
    
    
        jdbc:oracle:thin:@localhost:1521:xe
        oracle.jdbc.OracleDriver
        
            
                user
                weblogic
            
        
        weblogic
    

    
        1
        5
        1
        900
        true
        SQL SELECT 1 FROM DUAL
    

    
        MyDataSource
        Global
    

On retrouve l’ensemble des informations que l’on pourrait renseigner dans la console d’administration de WebLogic.

Si on ajoute ce fichier à l’archive MyWebApplicationEAR.ear, le déploiement de cet EAR va engendrer la création d’une nouvelle source de données déployée dans l’arbre JNDI sous le nom ‘MyDataSource’. Elle sera accessible à toutes les applications déployées dans le serveur (scope=Global).

Global Mode

Si on se connecte à la console d’administration, on peut apercevoir quelques différences.
Le point marquant est que la source de données n’est pas présente dans l’arborescence Services –> JDBC –> DataSources, comme d’habitude. Elle n’est visible que si on sélectionne le ‘JDBC Module’. (Deployments –> MyWebApplicationEAR –> MyWebApplicationDS). A partir de là, on accède au paramétrage et aux données de monitoring de la source de données.

Ce screencast montre les différents éléments déployés dans la console d’adminstration de Weblogic.

[flashvideo filename=wp-content/uploads/2008/03/jdbc.640-480.FLV width=640 height=480 captions=http://www.jeroenwijering.com/upload/subtitles_example.xml /]

Dans l’exemple précédent, la source de données est globale à l’ensemble du serveur d’application. Il est possible de restreindre la visibilité de cette source de données, seulement à l’application. Les changements à effectuer sont:

  • dans le fichier web.xml (spécifications J2EE)
    
        MyDataSource
        javax.sql.DataSource
        Container
    
    
  • dans le fichier META-INF/ds-jdbc.xml
    
      .....
      
            MyDataSource
            Application
        
    
    

Application Mode

Et la sécurité ?
La première remarque est généralement: « Le mot de passe est en clair dans le fichier XML ! ». C’est exact ! Si l’objectif de ce packaging est de pouvoir installer rapidement un environnement de développement ou une plateforme de démonstration, ce n’est pas gênant. Sinon, il est toujours possible de crypter le mot de passe dans le fichier XML avec le commande weblogic.security.Encrypt. Attention ! le cryptage du mot de passe dépend du domaine sur lequel l’application va être déployée (le domaine est d’ailleurs précisé par la propriété -Dweblogic.RootDirectory).

java -classpath ${WLS_HOME}/server/lib/weblogic.jar -Dweblogic.RootDirectory=./mywlsdomain weblogic.security.Encrypt weblogic
{3DES}QdEw5GGOy4GM/8QwBmTEbg==

Il ne reste qu’à copier ce mot de passe crypté dans la balise password-encrypted.

{3DES}QdEw5GGOy4GM/8QwBmTEbg==

Référence: http://e-docs.bea.com/wls/docs90/admin_ref/utils.html#encrypt

Et en cas de mauvais paramétrage ?
Modifions l’url de la source de données (ex changement de port 1521 –> 1525) et déployons l’archive. Echec du déploiement! Le serveur conserve l’environnement cohérent et refuse d’effectuer le déploiement.

<26 févr. 2008 12 h 11 CET> <Warning> <Deployer> <BEA-149004> <Failures were detected while initiating distribute task for application 'MyWebApplicationEAR'.> 
<26 févr. 2008 12 h 11 CET> <Warning> <Deployer> <BEA-149078> <Stack trace for message 149004
weblogic.application.ModuleException: 
at weblogic.jdbc.module.JDBCModule.prepare(JDBCModule.java:289)
at weblogic.application.internal.flow.ModuleListenerInvoker.prepare(ModuleListenerInvoker.java:93)
at weblogic.application.internal.flow.DeploymentCallbackFlow$1.next(DeploymentCallbackFlow.java:360)
at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:26)
at weblogic.application.internal.flow.DeploymentCallbackFlow.prepare(DeploymentCallbackFlow.java:56)
Truncated. see log file for complete stacktrace
weblogic.common.ResourceException: weblogic.common.ResourceException: Could not create pool connection. 
The DBMS driver exception was: Exception d'E/S: The Network Adapter could not establish the connection
at weblogic.jdbc.common.internal.ConnectionEnvFactory.createResource(ConnectionEnvFactory.java:236)
at weblogic.common.resourcepool.ResourcePoolImpl.makeResources(ResourcePoolImpl.java:1073)
at weblogic.common.resourcepool.ResourcePoolImpl.makeResources(ResourcePoolImpl.java:995)
at weblogic.common.resourcepool.ResourcePoolImpl.start(ResourcePoolImpl.java:214)
at weblogic.jdbc.common.internal.ConnectionPool.doStart(ConnectionPool.java:1042)
Truncated. see log file for complete stacktrace
>

Si on observe le cycle de vie d’une application, du développement à la mise en production, on s’aperçoit que le mécanisme exposé est intéressant mais pas suffisant. En effet, il existe de grandes différences d’infrastructure et de contraintes entre les environnements typé ‘Développement’ et les environnements typés ‘Production’: Charge nominale supportée, Haute disponibilité, Typologie réseau (DMZ, Intranet…),… Ces différences impliquent un paramétrage différent du serveur d’application. Dans un prochain article, nous verrons comment utiliser les plans de déploiement pour configurer l’application et l’adapter facilement à ces différents environnements.

Documentation Officielle BEA http://e-docs.bea.com/wls/docs90/jdbc_admin/packagedjdbc.html

4 thoughts on “Packagez vos sources de données avec WebLogic”

  1. Publié par JEMR, Il y a 10 années

    bonsoir,
    cet article est intéressant car il constitue une introduction aux plans de déploiements dans weblogic. Une autre alternative commune aux grands serveurs d’applications (websphere, weblogic…) est l’utilisation du scripting jython pour créer les objets de type JDBC, Jolt, WTC … au moyen de fichier properties propres à l’environnement. Ceci impose moins d’adhérence au serveur d’application et offre plus de souplesse.

  2. Publié par Bernard, Il y a 9 années

    Bonjour,

    Merci pour cet article instructif et très détaillé.

    Je m’étonne simplement que bea/oracle ait réinventé la roue, puisqu’il me semble que les modules de type rar sont standard à partir de J2EE 1.4, et parfaitement adaptés à ce type de déploiement.

    Mais personnellement je n’ai jamais réussi à déployer un connecteur JDBC dans un module de type rar sous weblogic…

    As-tu une explication ? Pourquoi bea a-t-il développé un module propriétaire ?

    Merci d’avance pour la réponse.

  3. Publié par bmoussaud, Il y a 9 années

    Bonjour et merci pour vos retours.

    L’article montre comment modifier les paramètres JDBC d’une datasource en fonction de différents environnements à l’aide de la fonction ‘Plans de déploiement’.

    A partir de là, il est facile de décliner l’utilisation des plans de déploiements pour votre usage (changement de context-root, nom de files JMS, WorkManager, paramètres des pools JDBC, EJB, Servlet,…)

    A aucun moment, je n’ai parlé de connecteur JCA (RAR Files)

  4. Publié par place de marché, Il y a 2 années

    Bonjour, article super interessant, pourrais je le récupérer afin de le mettre dans mon blog ?

    https://dropy.com/fr/

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *