2010-01-12 16 views
0

J'ai un problème lorsque j'essaie d'instancier Hibernate et de me connecter à une base de données MySQL (voir le message d'erreur ci-dessous).Hibernate échoue avec NullPointerException dans EntityTuplizerFactory.constructTuplizer? Pourquoi?

Assez curieusement la connexion fonctionne bien en utilisant le même fichier hibernate.cfg.xml exacte lors de l'exécution des tests JUnit, mais il refuse de travailler lorsqu'il est exécuté de Tomcat ...

Je commence à manquer d'idées.

Des indices ou une astuce où chercher?

Causée par: org.hibernate.HibernateException: Impossible d'instancier par défaut tuplizer [org.hibernate.tuple.entity.DynamicMapEntityTuplizer] à org.hibernate.tuple.entity.EntityTuplizerFactory.constructTuplizer (EntityTuplizerFactory.java:110) à org.hibernate.tuple.entity.EntityTuplizerFactory.constructDefaultTuplizer (EntityTuplizerFactory.java:135) à org.hibernate.tuple.entity.EntityEntityModeToTuplizerMapping. (EntityEntityModeToTuplizerMapping.java:69) à org.hibernate.tuple.entity. EntityMetamodel. (EntityMetamodel.java:323) à org.hibernate.persister.entity.AbstractEntityPersister. (AbstractEntityPersister.java:456) at org.hibernate.persister.entity.SingleTableEntityPersister. (SingleTableEntityPersister.java:131) à org.hibernate.persister.PersisterFactory.createClassPersister (PersisterFactory.java:84) à org.hibernate.impl.SessionFactoryImpl. (SessionFactoryImpl.java : 267) à org.hibernate.cfg.Configuration.buildSessionFactory (Configuration.java:1341) à se.fmt.atlantism.util.HibernateUtil.buildSessionFactory (HibernateUtil.java:16) ... 38 plus causés par : java.lang.NullPointerException à org.hibernate.tuple.entity.EntityTuplizerFactory.constructTuplizer (EntityTuplizerFactory.java:107) ... 47 plus

Répondre

2

J'écris pour de futures Googlers et référence.

J'ai fait d'autres recherches et la source du problème n'est toujours pas connue. Cependant, l'article suivant me met sur la bonne voie.

http://www.howtogeek.com/howto/linux/installing-tomcat-6-on-ubuntu/

Il semble que les paquets Tomcat (version 6 au moins) disponible dans Ubuntu (et Debian) ne fonctionnent pas correctement.Au lieu de cela que j'ai installé Tomcat en utilisant le guide suivant:

http://www.ctrip.ufl.edu/tomcat6-debian-lenny-howto

Bien que cela pourrait ne pas être le choix de la prime d'installation, il semble nécessaire d'obtenir la version Tomcat 6 fonctionnement sans problème sur Ubuntu et/ou Debian Lenny.

+0

Les deux guides utilisent les scripts startup.sh et shutdown.sh de Tomcat pour contrôler l'instance Tomcat. C'est très bien pour le développement, mais en production, vous devriez utiliser jsvc pour exécuter Tomcat avec un compte dédié, à faible privilège. Vous devez compiler jsvc - sources livré avec Tomcat dans $ CATALINA_HOME/bin/jsvc-src.tar.gz Tomcat5.sh dans cette archive fournit un script d'installation approprié - il aura besoin de peaufiner pour votre jvm/environnement. Plus de détails ici à partir d'Apache: http://tomcat.apache.org/tomcat-6.0-doc/setup.html Ceci s'applique uniquement aux installations * nix - l'installateur Windows crée par magie un service jsvc. –

0

Voici comment le processus démon Tomcat semble:

 
root  2605 0.0 0.0 16584 376 ?  Ss 15:39 0:00 
    /usr/bin/jsvc -user tomcat6 
-cp /usr/share/java/commons-daemon.jar:/usr/share/tomcat6/bin/bootstrap.jar 
-outfile SYSLOG -errfile SYSLOG -pidfile /var/run/tomcat6.pid 
-Djava.awt.headless=true -Xmx128M 
-Djava.endorsed.dirs=/usr/share/tomcat6/endorsed 
-Dcatalina.base=/var/lib/tomcat6 -Dcatalina.home=/usr/share/tomcat6 
-Djava.io.tmpdir=/tmp/tomcat6-temp -Djava.security.manager 
-Djava.security.policy=/var/lib/tomcat6/work/catalina.policy 
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager 
-Djava.util.logging.config.file=/var/lib/tomcat6/conf/logging.properties 
org.apache.catalina.startup.Bootstrap 

Voici comment le processus Tomcat semble lorsqu'il est exécuté à partir d'Eclipse en utilisant le plugin lance Tomcat Sysdeo:
(celui-ci fonctionne réellement)

 
jzaruba 2655 19.7 4.5 358304 46152 ?  Sl 15:43 0:01 
/usr/lib/jvm/java-6-sun-1.6.0.15/bin/java 
-agentlib:jdwp=transport=dt_socket,suspend=y,address=localhost:37377 
-Dcatalina.home=/usr/share/tomcat6 
-Djava.endorsed.dirs=/usr/share/tomcat6/endorsed 
-Dcatalina.base=/var/lib/tomcat6 -Djava.io.tmpdir=/var/lib/tomcat6/temp 
-Dfile.encoding=UTF-8 -classpath 
/usr/share/tomcat6/bin/bootstrap.jar:/usr/lib/jvm/java-6-sun-1.6.0.15/lib/tools.jar 
org.apache.catalina.startup.Bootstrap start 

Le travail (Eclipse lancé) est exécuté en utilisant java-6-sun-1.6.0.15, je suis un utilisateur Windows, donc je ne sais pas comment dire quel JRE est utilisé pour/usr/lib/jsvc (en regardant bien que), mais je suppose que c'est un peu OpenJDK ... Serait-ce la différence?

mise à jour: jsvc utilise probablement le même lanceur Tomcat Sysdeo ne JRE

+0

J'utilise java-6-sun-1.6.0.15 jdk donc je doute que la version de Java soit à blâmer. –

1

Dans mon cas, cette erreur a été résolue en basculant l'ordre de dépendance </> dans mon fichier pom.xml. Quand hibernate (3.2.7.ga) vient avant hibernate-annotations (3.4.0.GA) cette erreur se produit. L'inverse, ça fonctionne bien. C'est le cas même avec scope = compile.

Je suppose que vous avez besoin de modifier votre chemin de classe, sauf que (en supposant que vous avez supprimé les deux jars dans WEB-INF/lib), il devrait trier alpha dans le bon ordre. Mais peut-être que cela donnera à quelqu'un un indice sur la façon d'aller de l'avant.

+0

Cela semble intéressant. Je vais y jeter un coup d'œil quand j'aurai du temps à consacrer à ce problème. –

1

Dans mon cas c'était une simple erreur - le fichier de configuration * .hbm.xml avait une propriété que l'objet mappé n'avait pas! J'ai également entendu des cas de cette erreur apparaissant lorsque vous avez mal orthographié une fonction get/set - très similaire à mon cas.

+0

Merci pour votre contribution. Je ne pense pas que ce soit un problème avec les fichiers * .hbm.xml pour différentes raisons; mais je suppose que ce problème a beaucoup de racines et de raisons. –