Précédent   Forum du club des développeurs et IT Pro > Java > Général Java > Persistance > Hibernate
Hibernate Forum d'entraide sur l'API de persistance et de mapping O/R Hibernate. Avant de poster -> FAQ Hibernate
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 09/01/2013, 16h48   #1
amallek
Candidat au titre de Membre du Club
 
Inscription : décembre 2010
Messages : 27
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 27
Points : 12
Points : 12
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.
amallek est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2013, 09h46   #2
amallek
Candidat au titre de Membre du Club
 
Inscription : décembre 2010
Messages : 27
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 27
Points : 12
Points : 12
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
amallek est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2013, 12h05   #3
chtig
Membre Expert
 
Inscription : janvier 2007
Messages : 1 331
Détails du profil
Informations personnelles :
Âge : 36
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : janvier 2007
Messages : 1 331
Points : 1 561
Points : 1 561
Tu utilises maven pour construire ton war ?
__________________
Program manager chez TraceOne. http://www.traceone.com
chtig est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2013, 22h54   #4
tchize_
Expert Confirmé Sénior
 
Avatar de tchize_
 
Homme
Responsable de service informatique
Inscription : avril 2007
Messages : 18 280
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 33
Localisation : Belgique

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

Informations forums :
Inscription : avril 2007
Messages : 18 280
Points : 32 756
Points : 32 756
Envoyer un message via MSN à tchize_ Envoyer un message via Skype™ à tchize_
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>
__________________
⥀⥁ Чиз faq java, cours java, javadoc. Pensez à et
Laisse entrer le jour après une nuit sombre. Si tu es toujours là, tu n'es pas faite pour mourir.
tchize_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2013, 20h54   #5
amallek
Candidat au titre de Membre du Club
 
Inscription : décembre 2010
Messages : 27
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 27
Points : 12
Points : 12
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.
amallek est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2013, 15h12   #6
tchize_
Expert Confirmé Sénior
 
Avatar de tchize_
 
Homme
Responsable de service informatique
Inscription : avril 2007
Messages : 18 280
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 33
Localisation : Belgique

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

Informations forums :
Inscription : avril 2007
Messages : 18 280
Points : 32 756
Points : 32 756
Envoyer un message via MSN à tchize_ Envoyer un message via Skype™ à tchize_
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.
__________________
⥀⥁ Чиз faq java, cours java, javadoc. Pensez à et
Laisse entrer le jour après une nuit sombre. Si tu es toujours là, tu n'es pas faite pour mourir.
tchize_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/01/2013, 11h36   #7
amallek
Candidat au titre de Membre du Club
 
Inscription : décembre 2010
Messages : 27
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 27
Points : 12
Points : 12
Bonjour,
Citation:
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,
amallek est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/01/2013, 12h27   #8
amallek
Candidat au titre de Membre du Club
 
Inscription : décembre 2010
Messages : 27
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 27
Points : 12
Points : 12
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
amallek est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/01/2013, 13h22   #9
tchize_
Expert Confirmé Sénior
 
Avatar de tchize_
 
Homme
Responsable de service informatique
Inscription : avril 2007
Messages : 18 280
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 33
Localisation : Belgique

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

Informations forums :
Inscription : avril 2007
Messages : 18 280
Points : 32 756
Points : 32 756
Envoyer un message via MSN à tchize_ Envoyer un message via Skype™ à tchize_
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
__________________
⥀⥁ Чиз faq java, cours java, javadoc. Pensez à et
Laisse entrer le jour après une nuit sombre. Si tu es toujours là, tu n'es pas faite pour mourir.
tchize_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/01/2013, 16h24   #10
amallek
Candidat au titre de Membre du Club
 
Inscription : décembre 2010
Messages : 27
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 27
Points : 12
Points : 12
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,
amallek est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 07h23.


 
 
 
 
Partenaires

Hébergement Web