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 :

Remplacer hibernate.cfg.xml par un autre fichier XML c'est possible ?


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Juillet 2007
    Messages
    456
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 456
    Par défaut Remplacer hibernate.cfg.xml par un autre fichier XML c'est possible ?
    Bonjour,
    Je voudrais regrouper l'ensemble de fichiers de configuration de mon application dans un seul fichier XML. Je voudrais savoir si c'est possible de reprendre le code que j'ai dans hibernate.cfg.xml et le mettre dans mon nouveau fichier.

    Si oui comment dois je procéder et faut il mettre mon nouveau fichier (le chemin).

    Merci à vous

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    dans Configuration, qui te sert à créer les SessionFactory, tu va trouver un bonne quantité de méthode pour passer les détails de la configuration. Il y a tout ce qui faut (exemple configure(String resource) )

  3. #3
    Membre éclairé
    Inscrit en
    Juillet 2007
    Messages
    456
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 456
    Par défaut
    Et donc au moment ou je vais lire mon fichier XML, j'initialiserai alors mon sessionFactory, c'est ça ? ou bien j'ai rien compris ...

    thks

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Ton sessionFactory, normalement, tu le récupère avec un object Configuration sur lequel tu appelle buildSessionFactory(). Il suffit donc que, au lieu d'appeler configuration.configure(), tu appelle configuration.configure(monfichierdeconfig). Voir la doc mentionnée plus haut.

    edit: pardon, mal lu la question tu veux tout dans un meme fichier (hibernate et autre)... Ca risque d'etre vachement dur à maintenir, ne serait-ce qu'au niveau du respect des différents shémas xml.

  5. #5
    Membre éclairé
    Inscrit en
    Juillet 2007
    Messages
    456
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 456
    Par défaut
    Ok merci bq, j'essayerai de bien lire tous cela. je vais laisser le topic ouvert au cas où je bloque.

    merci encore

  6. #6
    Membre éclairé
    Inscrit en
    Juillet 2007
    Messages
    456
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 456
    Par défaut
    Re
    je viens de remarquer votre edit, oui c'est ce que je veux.
    Au fait le but c'est de facilité le déploiement, ainsi la personne chargé du déploiement n'aura pas à modifier plusieurs fichiers de conf, qui se trouve dans différents endroits.

    edit : ça sera difficile car je dois avoir une seule racine, c'est pour ça ?

    edit 2 :
    Je viens de réfléchir un peu, le bout de code que je voudrais externalisé dans un autre fichier , c'est que les propriétés ci-dessous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <property name="dialect">org.hibernate.dialect.PostgreSQLDialect</property>
    		<property name="connection.driver_class">org.postgresql.Driver</property>
    		<property name="connection.username">postgres</property>
    		<property name="connection.password">postgres</property> 
    		<property name="connection.url">jdbc:postgresql://localhost/db_memberarea</property>
    Il me suffit alors juste de pouvoir récupérer la sessionfactory est lui injectée c'est propriétés. Vous savez comment je pourrais faire ça et si le principe est propre ou pas. Merci

  7. #7
    Membre éclairé
    Inscrit en
    Juillet 2007
    Messages
    456
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 456
    Par défaut [Exception] configuration dynamique d'hibernate
    Bonjour,
    J'essaye de rendre les paramétres du user et le chemin de BD configurable à partir d'un autre fichier XML autre que hibernate.cfg.xml.
    Pour cela j'utilise le code suivant :
    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
    25
    26
    27
               Configuration configuration = new Configuration();
          configuration.configure();
     
          /* Initialiser le fichier hibernate.cfg.xml */
     
          Preferences dataBasePrefs = prefs.node("database");
     
          Properties propreties1 = new Properties();
          String str1 = dataBasePrefs.get("connection.username", "");
          propreties1.put("connection.username", str1);
     
          Properties propreties2 = new Properties();
          String str2 = dataBasePrefs.get("connection.password", "");
          propreties2.put("connection.password", str2);
     
          Properties propreties3 = new Properties();
          String str3 = dataBasePrefs.get("connection.url", "");
          propreties3.put("connection.url", str3);
     
     
          configuration.addProperties(propreties1);
          configuration.addProperties(propreties2);
          configuration.addProperties(propreties3);
     
          SessionFactory sessionFactory = configuration.buildSessionFactory();
          HibernateUtil.setSessionFactory(sessionFactory);
          /* Fin initialisation */

    Mais j'ai l'exception suivante :
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    java.lang.UnsupportedOperationException: The user must supply a JDBC connection
       at org.hibernate.connection.UserSuppliedConnectionProvider.getConnection(UserSuppliedConnectionProvider.java:30)
       at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:423)
       at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:144)
       at org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:119)
       at org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:57)
       at org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1326)
       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
       at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
       at java.lang.reflect.Method.invoke(Unknown Source)
       at org.hibernate.context.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:301)
       at $Proxy0.beginTransaction(Unknown Source)
       at com.ullink.extranet.module.orderBookMonitoring.dao.OrderBook.DaoOrderBookImpl.getAllTblconfeventsync(DaoOrderBookImpl.java:746)
       at com.ullink.extranet.module.orderBookMonitoring.service.OrderBook.ServiceOrderBookImpl.getAllTblconfeventsync(ServiceOrderBookImpl.java:446)
       at com.ullink.extranet.module.orderBookMonitoring.web.Connection.MemberAreaFacesServlet$1.run(MemberAreaFacesServlet.java:46)
       at java.lang.Thread.run(Unknown Source)
    
    
    L'exception est lancé quand on essaye de commencer une transaction (la 2eme ligne)
    
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    12
    Session session = HibernateUtil.getSessionFactory().getCurrentSession();
    session.beginTransaction();
    Voila aussi le fichier hibernate.cfg.xml que j'utilise : <?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="dialect">org.hibernate.dialect.PostgreSQLDialect</property> <property name="connection.driver_class">org.postgresql.Driver</property> <!--<property name="connection.username">postgres</property> <property name="connection.password">postgres</property> <property name="connection.url">jdbc:postgresql://localhost/db_memberarea</property>--> <!-- Echo all executed SQL to stdout <property name="show_sql">true</property>--> <property name="hibernate.transaction.factory_class"> org.hibernate.transaction.JDBCTransactionFactory </property> <!-- Enable Hibernate's automatic session context management --> <property name="current_session_context_class">thread</property> <!-- JDBC connection pool (use the built-in) --> <property name="connection.pool_size">1</property> <!-- <property name="hibernate.jdbc.batch_size">0</property> --> <!-- Disable the second-level cache --> <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property> <mapping resource="com/ullink/extranet/module/orderBookMonitoring/mapping/Tblorder.hbm.xml" /> <mapping resource="com/ullink/extranet/module/orderBookMonitoring/mapping/Tbltrade.hbm.xml" /> <mapping resource="com/ullink/extranet/module/orderBookMonitoring/mapping/Tblconfeventsync.hbm.xml" /> </session-factory> </hibernate-configuration>


    Est ce que vous avez une idée concernant cette erreur ?
    Merci

  8. #8
    Membre éclairé
    Inscrit en
    Juillet 2007
    Messages
    456
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 456
    Par défaut
    Si on fait hibernate.connection.username au lieu de connection.username (pour les autres aussi), l'exception disparait. Mais malheureusement une autre la remplace :
    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
    25
    org.hibernate.exception.JDBCConnectionException: Cannot open connection
    	at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:74)
    	at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
    	at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:29)
    	at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:426)
    	at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:144)
    	at org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:119)
    	at org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:57)
    	at org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1326)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    	at java.lang.reflect.Method.invoke(Unknown Source)
    	at org.hibernate.context.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:301)
    	at $Proxy0.beginTransaction(Unknown Source)
    	at com.ullink.extranet.module.orderBookMonitoring.dao.OrderBook.DaoOrderBookImpl.getAllTblconfeventsync(DaoOrderBookImpl.java:746)
    	at com.ullink.extranet.module.orderBookMonitoring.service.OrderBook.ServiceOrderBookImpl.getAllTblconfeventsync(ServiceOrderBookImpl.java:446)
    	at com.ullink.extranet.module.orderBookMonitoring.web.Connection.MemberAreaFacesServlet$1.run(MemberAreaFacesServlet.java:46)
    	at java.lang.Thread.run(Unknown Source)
    Caused by: java.sql.SQLException: No suitable driver
    	at java.sql.DriverManager.getConnection(Unknown Source)
    	at java.sql.DriverManager.getConnection(Unknown Source)
    	at org.hibernate.connection.DriverManagerConnectionProvider.getConnection(DriverManagerConnectionProvider.java:110)
    	at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:423)
    	... 14 more
    edit : j'ai essayé de mettre configuration.configure() aprés les set cad juste avant le buildSessionFactory() mais ca marche pas aussi

  9. #9
    Membre éclairé
    Inscrit en
    Juillet 2007
    Messages
    456
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 456
    Par défaut
    Le faiite de mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    propreties1.put("hibernate.connection.username", str1);
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    propreties1.put("connection.username", str1);
    et executer la méthode configure() apres les set, étaient bien la solution à mon probléme. Sauf qu'au moment où j'ai corriger le hibernate.connection.username, j'ai oublié et j'ai changé les noms de cles du fichier pref.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String str1 = dataBasePrefs.get("hibernate.connection.username", "");
    il faut mettre
    String str1 = dataBasePrefs.get("connection.username", "");

    voila, maintenant ca marche nikel

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

Discussions similaires

  1. [DOM] copie des noeuds d'un fichier xml dans un autre fichier xml
    Par chiraz86 dans le forum Format d'échange (XML, JSON...)
    Réponses: 0
    Dernier message: 10/04/2010, 11h48
  2. Réponses: 2
    Dernier message: 18/12/2008, 13h38
  3. Réponses: 3
    Dernier message: 06/08/2007, 03h44
  4. [DOM] (org.w3c.dom) copier un noeud d'un fichier XML dans un autre fichier XML
    Par snoop dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 13/02/2007, 17h22
  5. Importer le contenu un fichier xml dans un autre fichier xml
    Par gedeon555 dans le forum XML/XSL et SOAP
    Réponses: 5
    Dernier message: 27/07/2005, 11h49

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