+ Répondre à la discussion
Affichage des résultats 1 à 10 sur 10
  1. #1
    Futur Membre du Club
    Inscrit en
    décembre 2010
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : décembre 2010
    Messages : 37
    Points : 17
    Points
    17

    Par défaut Chaine de connexion Hibernate paramétrable

    Bonjour,
    J’ai une dizaine d’application utilisant le Framework Hibernate pour la couche données. Ces applications seront déployées sur plusieurs serveurs Tomcat et pointeront des bases différentes pour chaque Tomcat.
    Exemple :
    Code :
    1
    2
    3
    4
    Application1..Application10  sur tomcat1 pointeront la base1
    Application1..Application10  sur tomcat2 pointeront la base2
    Application1..Application10  sur tomcat3 pointeront la base3
    …
    Pour le moment chacune de mes applications contient le paramètre Hibernate
    Code :
    <property name="hibernate.connection.url">jdbc:oracle:thin:@ipBase_x:port:SIDbase_x</property>
    Et à chaque fois que je veux générer le fichier.war je dois modifier cette propriété (je risque de faire une erreur d’un serveur à un autre)
    Code :
    <property name="hibernate.connection.url">jdbc:oracle:thin:@ipBase_x:port:SIDbase_x</property>
    Donc je veux bien que cette propriété soit stockée quelque part, dans le serveur, variable environnement ou autre et je fais une chose de ce genre:
    Code :
    <property name="hibernate.connection.url">jdbc:oracle:thin:@${chaine_connexion}</property>
    Est ce que c’est possible ?
    Merci pour votre aide.

  2. #2
    Futur Membre du Club
    Inscrit en
    décembre 2010
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : décembre 2010
    Messages : 37
    Points : 17
    Points
    17

    Par défaut

    Bonjour,
    Est-ce que ça sera possible de définir une connexion sous Tomcat que je l’appelle par exemple «maConnexionBaseX».
    Puis dans la configuration de Hibernate (pour chaque application) j’indique que ma connexion doit hériter de «maConnexionBaseX».
    Si oui sera une bonne solution .
    Merci pour votre aide

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    janvier 2007
    Messages
    1 331
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : janvier 2007
    Messages : 1 331
    Points : 1 615
    Points
    1 615

    Par défaut

    Tu utilises maven pour construire ton war ?
    Program manager chez TraceOne. http://www.traceone.com

  4. #4
    Expert Confirmé Sénior
    Avatar de tchize_
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    avril 2007
    Messages
    21 890
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Service public

    Informations forums :
    Inscription : avril 2007
    Messages : 21 890
    Points : 41 481
    Points
    41 481

    Par défaut

    Ben tu configure un connection pool dans ton tomcat et tu dis à hibernate de l'utiliser


    exemple venant de la doc tomcat

    context.xml
    Code xml :
    1
    2
    3
    4
    5
    6
    <?xml version="1.0" encoding="UTF-8"?>
    <Context antiJARLocking="true" path="/DVDStore">
      <Resource auth="Container"
      driverClassName="com.mysql.jdbc.Driver" maxActive="30" maxIdle="10" maxWait="10000" name="jdbc/sakila" password="*****"
      type="javax.sql.DataSource" url="jdbc:mysql://localhost/sakila" username="*****"/>
    </Context>

    web.xml


    Code xml :
    1
    2
    3
    4
    5
    6
    <resource-ref>
      <description>This is a MySQL database connection</description>
      <res-ref-name>jdbc/sakila</res-ref-name>
      <res-type>javax.sql.DataSource</res-type>
      <res-auth>Container</res-auth>
    </resource-ref>

    hibernate

    Code xml :
    1
    2
    3
    <propertyname="hibernate.connection.datasource">
       java:comp/env/jdbc/sakila
    </property>
    Tchize (Чиз) faq java, cours java, javadoc. Pensez à et

  5. #5
    Futur Membre du Club
    Inscrit en
    décembre 2010
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : décembre 2010
    Messages : 37
    Points : 17
    Points
    17

    Par défaut

    Citation Envoyé par chtig Voir le message
    Tu utilises maven pour construire ton war ?
    Je développe avec l’IDE Netbeans et je l’utilise pour générer mon .war d’un façon transparente pour moi (donc c’est Ant pour la création du .war).

    tchize_
    Je dois faire cette configuration(contex.xml, web.xml et hibernate.cfg) pour chaque application, en fait mon objectif est d’écrire url="jdbc:mysql://localhost/sakila" une seule fois dans chaque serveur Tomcat et les autres applications utilisent.
    Je veux faire cette modification pour la raison suivante :
    le cas actuel:
    Lorsque je dois mettre à jour une des applications, avant de générer le .war je modifie la chaine de connexion et je fais le buid. Je fait ça pour chaque Tomcat.
    Mon souhait:
    Génèrer un .war et je le diffuse sur tous mes Tomcats sans me soucier de la base qu’il pointe Hibernate va utiliser une connexion qui existe quelque part.
    merci pour votre aide.

  6. #6
    Expert Confirmé Sénior
    Avatar de tchize_
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    avril 2007
    Messages
    21 890
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Service public

    Informations forums :
    Inscription : avril 2007
    Messages : 21 890
    Points : 41 481
    Points
    41 481

    Par défaut

    La chaine dans le context.xml peut aussi bien être mise dans le server.xml pour mettre à disposition une connection globale. Le principe reste globalement le même.
    Tchize (Чиз) faq java, cours java, javadoc. Pensez à et

  7. #7
    Futur Membre du Club
    Inscrit en
    décembre 2010
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : décembre 2010
    Messages : 37
    Points : 17
    Points
    17

    Par défaut

    Bonjour,
    La chaine dans le context.xml peut aussi bien être mise dans le server.xml pour mettre à disposition une connection globale. Le principe reste globalement le même.
    Cette solution me convient, mais je ne sais pas pourquoi ça ne fonctionne pas(surement j'ai une faute quelque part).

    J’ai modifié server.xml de cette façon.
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <?xml version='1.0' encoding='utf-8'?>
     
    <Server port="8005" shutdown="SHUTDOWN">
     ...
          <Host name="localhost"  appBase="webapps"
                unpackWARs="true" autoDeploy="true"
                xmlValidation="false" xmlNamespaceAware="false">
     
    	<Resource auth="Container" driverClassName="oracle.jdbc.OracleDriver" maxActive="20" maxIdle="10" maxWait="-1"
                  name="jdbc/nomGDBC" password="passe" type="javax.sql.DataSource"
                  url="jdbc:oracle:thin:@xxx.xxx.xxx.xxx:1521:SID" username="user"/>
          </Host>
        </Engine>
      </Service>
    </Server>
    J’utilise probe pour gérer mon serveur Tomcat, normalement si j’ai bien fais ma configuration, cette connexion globale existe elle doit être visible dans Data Source.
    Mais ce n’est pas le cas.
    Au niveau de mon application je fais :
    web.xml
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    ...
        <resource-ref>
            <description>This is a Oracle database connection</description>
            <res-ref-name>jdbc/nomGDBC</res-ref-name>
            <res-type>javax.sql.DataSource</res-type>
            <res-auth>Container</res-auth>
        </resource-ref>
    </web-app>
    contex.xml
    Code :
    1
    2
    <?xml version="1.0" encoding="UTF-8"?>
    <Context antiJARLocking="true" path="/monPath"></Context>
    hibernate.cfg.xml
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
    <hibernate-configuration>
        <session-factory>
            <property name="hibernate.setup">true</property>
            <property name="hibernate.connection.datasource">java:comp/env/jdbc/nomGDBC</property>
            <property name="hibernate.dialect">org.hibernate.dialect.OracleDialect</property>
            <!--
              <property name="current_session_context_class">thread</property>
              <property name="hibernate.show_sql">false</property>
            -->
        </session-factory>
    </hibernate-configuration>
    Quelqu’un peut me guider ? S’il y a une chose qui manque ou incorrecte.
    Merci d'avance
    Cordialement,

  8. #8
    Futur Membre du Club
    Inscrit en
    décembre 2010
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : décembre 2010
    Messages : 37
    Points : 17
    Points
    17

    Par défaut

    En fait si je mets ma configuration dans le fichier conf/contex.xml du tomcat
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?xml version='1.0' encoding='utf-8'?>
    <Context>
     
        <!-- Default set of monitored resources -->
        <WatchedResource>WEB-INF/web.xml</WatchedResource>
     
     
    	<Resource auth="Container" driverClassName="oracle.jdbc.OracleDriver" maxActive="20" maxIdle="10" maxWait="-1"
    				  name="jdbc/nomJDBC" password="passe" type="javax.sql.DataSource"
    				  url="jdbc:oracle:thin:@xxx.xxx.xxx.xxx:1521:SID" username="user"/>
    </Context>
    j’obtiens le résultat souhaité.
    Est la bonne façon de faire ou c’est une autre façon ?
    Cordialement

  9. #9
    Expert Confirmé Sénior
    Avatar de tchize_
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    avril 2007
    Messages
    21 890
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Service public

    Informations forums :
    Inscription : avril 2007
    Messages : 21 890
    Points : 41 481
    Points
    41 481

    Par défaut

    Tu peux le faire comme ça, mais le problème alors c'est que tu te retrouve à nouveau à en configurer 1 par web application, et tu rend impossible la configuration de ta web application depuis META-INF/context.xml dans le war


    Pour les ressources globale, regarde ici

    http://tomcat.apache.org/tomcat-6.0-...resources.html

    En gros ça doit se trouver dans un GlobalNamingRessources et il doit y avoir un ressource link dans le context.xml
    Tchize (Чиз) faq java, cours java, javadoc. Pensez à et

  10. #10
    Futur Membre du Club
    Inscrit en
    décembre 2010
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : décembre 2010
    Messages : 37
    Points : 17
    Points
    17

    Par défaut

    Enfin ça fonctionne .
    Je décris comment j’ai fais.
    Niveau serveur tomcat:
    conf/context.xml ==> Rien
    conf/web.xml ==> Rien
    conf/server.xml ==> Ajouter la resource
    Code :
    1
    2
    3
    <Resource auth="Container" driverClassName="oracle.jdbc.OracleDriver" maxActive="20" maxIdle="10" maxWait="-1"
                  name="jdbc/nomJDBC" password="passe" type="javax.sql.DataSource"
                  url="jdbc:oracle:thin:@xxx.xxx.xxx.xxx:1521:SID" username="user"/>
    Niveau Application web:
    context.xml ==> Ajout ResourceLink
    Code :
    <ResourceLink name="jdbc/nomJDBC" global="jdbc/nomJDBC" type="javax.sql.DataSource"/>
    web.xml ==> Ajout resource-ref
    Code :
    1
    2
    3
    4
    5
    6
    <resource-ref>
            <description>This is a Oracle database connection</description>
            <res-ref-name>jdbc/nomJDBC</res-ref-name>
            <res-type>javax.sql.DataSource</res-type>
            <res-auth>Container</res-auth>
        </resource-ref>
    Merci pour tous.
    Cordialement,

+ Répondre à la discussion
Cette discussion est résolue.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •