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 :

Hibernate + plusieurs Bases de données.


Sujet :

Hibernate Java

  1. #1
    Membre régulier
    Profil pro
    Sr. Software Engineer
    Inscrit en
    Août 2007
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Software Engineer

    Informations forums :
    Inscription : Août 2007
    Messages : 169
    Points : 118
    Points
    118
    Par défaut Hibernate + plusieurs Bases de données.
    Bonjour,

    je développe une outil en utilisant Hibernate + postgresql qui permettra à des utilisateur de créer des projet (ensemble très volumineux d'informations). pour optimiser les performances, nous avons fait le choix de construire une BD par connexion utilisateur pour ne sauvegarder que les données de sont projet. En gros Un USER= Une BD.
    Cependant, les services de la couche d'accès au données reste les même. il s'agit donc, à la connexion d'un USER
    (1) de créer une BD pour ses données, et
    (2) de rediriger Hibernate vers la bonne BD.
    Une solution peu-être naïve serait de modifier le fichier hibernate.cfg.xml au démarrage. ll faudrait alors mettre à jour le classpath.ce qui ne m'intéresse pas.
    on m'a aussi dit que je pouvais utiliser les sources de données hibernate. Quelqu'un aurait t-il un exemple de code utilisant les sources de données dans hibernate?

    Je reste également preneur pour toute autre approche de résolution de ce problème.

    Merci.

  2. #2
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Points : 3 938
    Points
    3 938
    Par défaut
    Oui tout à fait tu peux définir autant de sources de données que tu veux dans le fichier persistence.xml, voila un exemple :
    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
    16
    <persistence-unit name="dataSourceUser1" transaction-type="RESOURCE_LOCAL">
           <non-jta-data-source/>
          <properties>
             <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
    		 <property name="hibernate.hbm2ddl.auto" value="create-update" />
    		 <property name="hibernate.query.factory_class" value="org.hibernate.hql.classic.ClassicQueryTranslatorFactory" /> 
        	 <property name="hibernate.connection.driver_class" value="org.postgresql.Driver" />
        	<property name="hibernate.connection.url" value="jdbc:postgresql://ton_serveur:port_serveur/nom_bd_user1"/>
        	 <property name="hibernate.connection.username" value="ton_login_user1" />
        	 <property name="hibernate.connection.password" value="..." />
        	 <property name="dialect" value="net.sf.hibernate.dialect.PostgreSQLDialect" />
        	<property name="show_sql" value="true"/>
        	 <property name="hibernate.jdbc.batch_size" value="0"/>
          	<property name="hibernate.jdbc.use_streams_for_binary" value="true"/>
          </properties>
       </persistence-unit>
    Et coté java,selon l'utilisateur connecté, via ton emf tu charges la source concernée. voila voila

  3. #3
    Membre régulier
    Profil pro
    Sr. Software Engineer
    Inscrit en
    Août 2007
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Software Engineer

    Informations forums :
    Inscription : Août 2007
    Messages : 169
    Points : 118
    Points
    118
    Par défaut
    DevServlet, merci pour ta réponse mais ta proposition ne se prête pas à mon cas car je veux plutôt faire ces configuration de façon programmatique.
    En fait le nombre d'utilisateur potentiel n'est pas connu au départ. C'est à la création d'un User que je génère son espace de travail (ici un base de donné créée à chaud). je veux pouvoir ensuite utiliser mes fichiers de mapping hibernate pour y accéder à cette base de données. Pour un autre utilisateur, je fais pareil et ainsi de suite.

    En gros je souhaiterai avoir des exemples d'utilisation des sources de données dans une approche programmatique.

  4. #4
    Membre régulier
    Profil pro
    Sr. Software Engineer
    Inscrit en
    Août 2007
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Software Engineer

    Informations forums :
    Inscription : Août 2007
    Messages : 169
    Points : 118
    Points
    118
    Par défaut Construction dynamique de Session Hiernate
    Pour ceux que ca intéresse voici la solution que j'ai adoptée et qui resoud mon problème.
    J'ai en effet utiliser une initialisation programmatique de la propriété URL de connexion à la base de données. Ci-dessous un code simplifié de ma factory de session dynamique.

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    public class DynamicSessionFactoryImpl{
    Configuration config;
    SessionFactory sessionFactory;
     
    public static Session openDynamicSession(URL databaseURL){
     
    try {
    //le fichier hibernate.cfg.xml comporte tous les paramètres initialisation excepté l'url de la base de données
    config= new Configuration().configure("hibernate.cfg.xml");
     
    //initialisation programmatique de l'url de la base de données.
    config.setProperty("hibernate.connection.url","jdbc:postgresql://"+databaseURL);
    sessionFactory = config.buildSessionFactory();
     
    } catch (HibernateException ex) {
    	throw new RuntimeException("Exception building SessionFactory: " +ex.getMessage(),ex);
    }
     
     
    return sessionFactory.openSession();
    }
     
    }

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

Discussions similaires

  1. Plusieurs bases de données avec Hibernate
    Par khalid_kha dans le forum Hibernate
    Réponses: 7
    Dernier message: 14/08/2008, 13h36
  2. [Hibernate][J2EE][EJB3]Persistance dynamique à plusieurs base de données
    Par Soronite dans le forum Persistance des données
    Réponses: 2
    Dernier message: 31/07/2008, 15h25
  3. connexion a plusieurs bases de données oracle
    Par tarik75 dans le forum JDBC
    Réponses: 1
    Dernier message: 06/07/2005, 13h33
  4. triggers sur plusieurs bases de données
    Par Shabata dans le forum Langage SQL
    Réponses: 2
    Dernier message: 04/05/2004, 10h02

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