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 :

ExceptionInInitializerError au lancement!


Sujet :

Hibernate Java

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 12
    Points : 3
    Points
    3
    Par défaut ExceptionInInitializerError au lancement!
    Bonjour,

    Je suis débutant sur hibernate et j'ai essayé de commencer un projet par la partie accés aux données.
    J'ai une simple classe métier qui va setter des attributs de mon objet User.
    J'ai configuré User.hbm.xml, Hibernate.cfg.xml, crée ma classe HibernateUtil et une classe Test avec un main pour tester la cinématique.

    J'ai ce message au lancement de ma classe Test:
    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
     
    log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
    log4j:WARN Please initialize the log4j system properly.
    Exception in thread "main" java.lang.ExceptionInInitializerError
            at com.myapp.hibernate.HibernateUtil.<clinit>(HibernateUtil.java:22)
            at com.myapp.business.SecurityManager.AuthentificateUser(SecurityManager.java:26)
            at com.myapp.test.Test.main(Test.java:22)
    Caused by: org.hibernate.HibernateException: Could not parse configuration: /hibernate.cfg.xml
            at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1494)
            at org.hibernate.cfg.Configuration.configure(Configuration.java:1428)
            at org.hibernate.cfg.Configuration.configure(Configuration.java:1414)
            at com.myapp.hibernate.HibernateUtil.<clinit>(HibernateUtil.java:17)
            ... 2 more
    Caused by: org.dom4j.DocumentException: Error on line 16 of document  : The content of elements must consist of well-formed character data or markup. Nested exception: The content of elements must consist of well-formed character data or markup.
            at org.dom4j.io.SAXReader.read(SAXReader.java:482)
            at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1484)
            ... 5 more
    Java Result: 1
    J'ai pourtant rajouté dom4j à mon classpath!
    Quelqu'un a une idée?
    Merci d'avance!

  2. #2
    Membre éprouvé
    Profil pro
    Développeur Back-End
    Inscrit en
    Avril 2003
    Messages
    782
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Avril 2003
    Messages : 782
    Points : 935
    Points
    935
    Par défaut
    Bonjour,

    Citation Envoyé par nono0803 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Exception in thread "main" java.lang.ExceptionInInitializerError
            at com.myapp.hibernate.HibernateUtil.<clinit>(HibernateUtil.java:22)
    ....
    Caused by: org.hibernate.HibernateException: Could not parse configuration: /hibernate.cfg.xml
    .....
    Caused by: org.dom4j.DocumentException: Error on line 16 of document  : The content of elements must consist of well-formed character data or markup. Nested exception: The content of elements must consist of well-formed character data or markup.
    l'erreur semble donc provenir de la ligne 16 du fichier "hibernate.cfg.xml" .

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    J'ai enlevé le commentaire qu'il y a avait en ligne 16.
    Maintenenant il me met une erreur en ligne 7 (correspondant à la balise <hibernate-configuration>

    Voila le fichier 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
    14
    15
    16
    17
    18
    19
     
    <?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="connection.datasource">
               jdbc:odbc:bd1
            </property>
            <property name="show_sql">true</property>
            <property name="dialect">
                  sun.jdbc.odbc.JdbcOdbcDriver
            </property>
            <mapping resource="User.hbm.xml"/>
        </session-factory>
    </hibernate-configuration>
    Une idée?

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    J'ai résolu les différents problèmes : log4j (j'ai rajouté un fichier log4j.properties dans src), au niveau du fichier hibernate.cfg.xml j'ai utilisé des balises plus appropriés (connection.url, connection.driver.class ...).
    Ca a l'air de fonctionner mieux au niveau du parsing, mais il me reste une erreur (espérons que ce soit la dernière!) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Exception in thread "main" java.lang.ExceptionInInitializerError
            at com.myapp.hibernate.HibernateUtil.<clinit>(HibernateUtil.java:22)
            at com.myapp.business.SecurityManager.AuthentificateUser(SecurityManager.java:26)
            at com.myapp.test.Test.main(Test.java:22)
    Caused by: org.hibernate.HibernateException: Hibernate Dialect must be explicitly set for database: ACCESS
            at org.hibernate.dialect.DialectFactory.determineDialect(DialectFactory.java:62)
            at org.hibernate.dialect.DialectFactory.buildDialect(DialectFactory.java:39)
            at org.hibernate.cfg.SettingsFactory.determineDialect(SettingsFactory.java:426)
            at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:128)
            at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2009)
            at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1292)
            at com.myapp.hibernate.HibernateUtil.<clinit>(HibernateUtil.java:17)
    En fait je n'ai pas mis le dialecte pour la base ACCESS, mais je ne le connais pas et j'ai verifié sur la FAQ et il y a tout sauf celle ci!
    Quelqu'un la connait?
    Merci d'avance!

  5. #5
    Membre éprouvé
    Profil pro
    Développeur Back-End
    Inscrit en
    Avril 2003
    Messages
    782
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Avril 2003
    Messages : 782
    Points : 935
    Points
    935
    Par défaut
    D'apres le fichier hibernate.cfg.xml

    il y a un problème concernant le choix du dialect (ce n'est pas le driver !)
    Quel est la base de donnée utilisée ?

  6. #6
    Membre éprouvé
    Profil pro
    Développeur Back-End
    Inscrit en
    Avril 2003
    Messages
    782
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Avril 2003
    Messages : 782
    Points : 935
    Points
    935
    Par défaut
    concernant le dialect Hibernate et MSAccess il semble qu'il n'existe pas (mais voir ce lien)

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par fnobb Voir le message
    concernant le dialect Hibernate et MSAccess il semble qu'il n'existe pas (mais voir ce lien)
    Oui j'avais corrigé ca!
    Merci pour le lien!
    Je vais essayer d'utiliser le dialecte programmé par cette personne en ésperant qu'il fonctionne.
    Je vous tiens au courant!

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    En fait, j'ai rajouté la classe et mis le nom du package ou il se trouve dans le fichier de conf, mais il ne le trouve pas!
    Apparement il faut mettre une adresse du type org.hibernate.dialect.Dialect sinon il ne trouve pas.
    J'ai essayé de mettre un autre dialecte, celui de db2, et ca passe à la compile.(pour le moment ...)

    Mais comme cette journée est placé sous le signe de la galère, j'ai un autre message d'erreur maintenant!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Hibernate: select max() from comptes
    Exception in thread "main" org.hibernate.PropertyValueException: not-null property references a null or transient value: com.myapp.hibernate.User.adresse
    Voilà mon User.hbm.xml:
    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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <hibernate-mapping>
        <class name="com.myapp.hibernate.User" table="comptes">
            <id name="id" type="int" column="N°" unsaved-value="0">
                <generator class="increment"/>
            </id>
            <property name="nom">
                <column name="nom" length="55" not-null="true"/>
            </property>
            <property name="password">
                <column name="password" length="55" not-null="true"/>
            </property>
            <property name="adresse">
                <column name="adresse" length="120" not-null="true"/>
            </property>
        </class>
    </hibernate-mapping>
    Je ne vois pas ou est le problème: je sette bien tous mes attributs notamment l'attribut adresse?
    Une piste?

  9. #9
    Membre éprouvé
    Profil pro
    Développeur Back-End
    Inscrit en
    Avril 2003
    Messages
    782
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Avril 2003
    Messages : 782
    Points : 935
    Points
    935
    Par défaut
    Citation Envoyé par nono0803 Voir le message
    En fait, j'ai rajouté la classe et mis le nom du package ou il se trouve dans le fichier de conf, mais il ne le trouve pas!
    Apparement il faut mettre une adresse du type org.hibernate.dialect.Dialect sinon il ne trouve pas.
    J'ai essayé de mettre un autre dialecte, celui de db2, et ca passe à la compile.(pour le moment ...)


    fait voir ce que tu a fait ? (classe du dialect et fichier config)

    si tu met un autre dialect cela ne marchera pas (pour parler avec un français il vaut mieux parler en français qu'en chinois )

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 12
    Points : 3
    Points
    3
    Par défaut

    Ca marche!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    je ne comprends pas pkoi il a eu du mal à me mettre l'adresse mais il a suffit que je mette not-null="false", pour qu'il arrete de me prendre la tete avec l'adresse.
    Les autres attributs ont bien été enregistré à la base, et l'id a été incrémenté.


    Merci pour l'aide!

  11. #11
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par fnobb Voir le message


    fait voir ce que tu a fait ? (classe du dialect et fichier config)

    si tu met un autre dialect cela ne marchera pas (pour parler avec un français il vaut mieux parler en français qu'en chinois )
    Ben apparemment il y a des bilingues car le dialect ne m'a pas empeché d'enregistrer mes données!
    Les dialectes sql ont forcément des points en commun.
    Reste à savoir quand est ce que cela posera des problèmes....

  12. #12
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    Nouveau problème:

    j'essaye de récuperer des données de ma base et pour cela j'utilise une requete HQL que j'envoie à la méthode createQuery de ma session.
    Bien que cela marche (la console m'affiche bien les données correspondant aux objets récuperés), j'ai un message d'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    java.sql.SQLException: [Microsoft][Pilote ODBC Microsoft Access]Fonction optionnelle non installée
    Quand je clique en bas sur le lien vers l'instruction qui genere l'exception, il s'agit de la requete HQL:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    List result = ses.createQuery("from User").list();
    Voilà la source complète:
    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
     
    package com.myapp.business;
     
    import com.myapp.hibernate.HibernateUtil;
    import com.myapp.hibernate.User;
    import java.io.Serializable;
    import java.util.List;
    import org.hibernate.*;
     
    /**
     *
     * @author 
     */
    public class SecurityManager {
     
        /** Creates a new instance of SecurityManager */
        public SecurityManager() {
        }
     
        public boolean AuthentificateUser(){
            List luser = listUsers();
            for(int i = 0; i < luser.size(); i++){
            User toto = (User) luser.get(i);
            System.out.println("User=  "+toto.getNom());
            System.out.println("Adresse= "+toto.getAdresse());
            System.out.println("Password= "+toto.getPassword());
     
            }
     
     
            HibernateUtil.closeSession();
     
        return true;    
        }
        private List listUsers(){
          Session ses =  HibernateUtil.currentSession();
          Transaction tx = ses.beginTransaction();  
          List result = ses.createQuery("from User").list();
          tx.commit();
          return result;
        }
    Est ce que cela signifie que le pilote pour les requètes HQL ne sont pas installés (dans ce cas, pourquoi est ce que finalement ma requète aboutit correctement?), ou est ce que cela a à voir avec le fichier de conf d'hibernate qui pointe vers le mauvais dialecte?

    Merci d'avance pour votre aide.

  13. #13
    Membre éprouvé
    Profil pro
    Développeur Back-End
    Inscrit en
    Avril 2003
    Messages
    782
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Avril 2003
    Messages : 782
    Points : 935
    Points
    935
    Par défaut
    que donne la requête SQL générée par Hibernate (<property name="show_sql">true</property>) ?

  14. #14
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    Voilà ce qu'il me met:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    DEBUG SQL:401 - select user0_.N° as N1_0_, user0_.nom as nom0_, user0_.password as password0_, user0_.adresse as adresse0_ from comptes user0_
    Hibernate: select user0_.N° as N1_0_, user0_.nom as nom0_, user0_.password as password0_, user0_.adresse as adresse0_ from comptes user0_
    11:19:32,592  WARN AbstractBatcher:280 - exception clearing maxRows/queryTimeout

  15. #15
    Membre éprouvé
    Profil pro
    Développeur Back-End
    Inscrit en
    Avril 2003
    Messages
    782
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Avril 2003
    Messages : 782
    Points : 935
    Points
    935
    Par défaut
    Sans garantie, mais cela ressemble à une problème de dialect :
    C'est lui qui traduit le requête HQL en requête SQL.

  16. #16
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    C'est aussi mon avis. à verifier!
    Merci pour ton aide.

  17. #17
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 156
    Points : 191
    Points
    191
    Par défaut
    D'un autre coté ne souhaites tu pas remplacer ton attribut en Base 'N°' par 'No' ou 'Num'.
    Le caractère ° peut poser problème

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

Discussions similaires

  1. ExceptionInInitializerError au lancement du programme
    Par diabli73 dans le forum Hibernate
    Réponses: 4
    Dernier message: 26/10/2010, 13h59
  2. [Kylix] Erreur au lancement de K3 en open C++
    Par Glouferu dans le forum EDI
    Réponses: 9
    Dernier message: 14/03/2003, 16h27
  3. Réponses: 1
    Dernier message: 13/01/2003, 09h26
  4. [Kylix] PB au lancement
    Par sebounator dans le forum EDI
    Réponses: 3
    Dernier message: 09/01/2003, 12h10
  5. Réponses: 2
    Dernier message: 22/07/2002, 12h13

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