IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Hibernate Java Discussion :

Chaine de connexion Hibernate paramétrable


Sujet :

Hibernate Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Décembre 2010
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 39
    Points : 31
    Points
    31
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    <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 : Sélectionner tout - Visualiser dans une fenêtre à part
    <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 : Sélectionner tout - Visualiser dans une fenêtre à part
    <property name="hibernate.connection.url">jdbc:oracle:thin:@${chaine_connexion}</property>
    Est ce que c’est possible ?
    Merci pour votre aide.

  2. #2
    Nouveau membre du Club
    Inscrit en
    Décembre 2010
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 39
    Points : 31
    Points
    31
    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 chevronné
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Points : 1 787
    Points
    1 787
    Par défaut
    Tu utilises maven pour construire ton war ?

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <propertyname="hibernate.connection.datasource">
       java:comp/env/jdbc/sakila
    </property>

  5. #5
    Nouveau membre du Club
    Inscrit en
    Décembre 2010
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 39
    Points : 31
    Points
    31
    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 éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    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.

  7. #7
    Nouveau membre du Club
    Inscrit en
    Décembre 2010
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 39
    Points : 31
    Points
    31
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <?xml version="1.0" encoding="UTF-8"?>
    <Context antiJARLocking="true" path="/monPath"></Context>
    hibernate.cfg.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Nouveau membre du Club
    Inscrit en
    Décembre 2010
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 39
    Points : 31
    Points
    31
    Par défaut
    En fait si je mets ma configuration dans le fichier conf/contex.xml du tomcat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    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

  10. #10
    Nouveau membre du Club
    Inscrit en
    Décembre 2010
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 39
    Points : 31
    Points
    31
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    <ResourceLink name="jdbc/nomJDBC" global="jdbc/nomJDBC" type="javax.sql.DataSource"/>
    web.xml ==> Ajout resource-ref
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

Discussions similaires

  1. chaine de connexion comme paramètre du constructeur de connexion
    Par hannah-sweet dans le forum Visual Studio
    Réponses: 2
    Dernier message: 27/09/2010, 13h45
  2. [D7] Paramètrer une chaine de connexion
    Par EMC51 dans le forum Delphi
    Réponses: 1
    Dernier message: 15/11/2006, 15h32
  3. [WebForms][Web.config] Stocker les chaine de connexion
    Par bossun dans le forum Général Dotnet
    Réponses: 15
    Dernier message: 19/08/2005, 16h34
  4. [C#] [Oracle] Problème de chaine de connexion
    Par didoboy dans le forum ASP.NET
    Réponses: 9
    Dernier message: 08/01/2005, 12h32
  5. ADO et chaine de connexion
    Par desperado dans le forum Bases de données
    Réponses: 2
    Dernier message: 11/08/2004, 12h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo