2010-04-18 13 views
9

Estoy construyendo una aplicación de escritorio usando hibernate 3.5 & JPA 2.0.JPA 2.0, hibernate 3.5, jars y persistence.xml location

tengo 2 tarros,

la lib, que define todas las entidades y DAO, los paquetes se parece a esto:

org.my.package.models 
org.my.package.models.dao 
org.my.package.models.utils 

En org.my.package.utils he definido mi clase de utilidad de hibernación para conseguir EM & casos EMF, lo que significa la lib está ligado a un nombre de unidad de persistencia pero eso no es un problema por el momento (de todos modos me puede recomendar una mejor manera de manejar eso)

el segundo frasco se construye de la siguiente manera:

org.my.package.app

META-INF se define en la raíz del proyecto lo que significa en mi tarro puedo encontrar este directorios directamente en la raíz:

META-INF/ 
META-INF/persistence.xml 
org/ 
org/my/ 
... 
org/my/package/app/Main.class 

Cuando ejecuta la aplicación, hibernate no logra encontrar persistence.xml arroja una excepción algo así como "paquete o clase para PersistenceUnitName no encontrado".

SLF4J: The requested version 1.5.11 by your slf4j binding is not compatible with [1.5.5, 1.5.6, 1.5.7, 1.5.8] 
SLF4J: See http://www.slf4j.org/codes.html#version_mismatch for further details. 
3 [main] INFO org.hibernate.cfg.annotations.Version - Hibernate Annotations 3.5.0-Final 
25 [main] INFO org.hibernate.cfg.Environment - Hibernate 3.5.0-Final 
28 [main] INFO org.hibernate.cfg.Environment - hibernate.properties not found 
33 [main] INFO org.hibernate.cfg.Environment - Bytecode provider name : javassist 
41 [main] INFO org.hibernate.cfg.Environment - using JDK 1.4 java.sql.Timestamp handling 
153 [main] INFO org.hibernate.annotations.common.Version - Hibernate Commons Annotations 3.2.0.Final 
160 [main] INFO org.hibernate.ejb.Version - Hibernate EntityManager 3.5.0-Final 
Exception in thread "main" java.lang.ExceptionInInitializerError 
     at Main.main(Main.java:171) 
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: PMMPU] class or package not found 
     at org.hibernate.ejb.Ejb3Configuration.addNamedAnnotatedClasses(Ejb3Configuration.java:1316) 
     at org.hibernate.ejb.Ejb3Configuration.addClassesToSessionFactory(Ejb3Configuration.java:1094) 
     at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:981) 
     at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:275) 
     at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:359) 
     at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:55) 
     at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:48) 
     at dil.tal.polymarmots.utils.HibernateUtil.getEmf(HibernateUtil.java:45) 
     at dil.tal.polymarmots.utils.HibernateUtil.getEm(HibernateUtil.java:54) 
     at dil.tal.polymarmots.utils.HibernateUtil.getMotDAOImpl(HibernateUtil.java:115) 
     at dil.tal.polymarmots.models.Mot.<clinit>(Mot.java:30) 
     ... 1 more 
Caused by: java.lang.ClassNotFoundException: model.Extrait 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:200) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:188) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:307) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:252) 
     at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320) 
     at java.lang.Class.forName0(Native Method) 
     at java.lang.Class.forName(Class.java:247) 
     at org.hibernate.util.ReflectHelper.classForName(ReflectHelper.java:170) 
     at org.hibernate.ejb.Ejb3Configuration.classForName(Ejb3Configuration.java:1232) 
     at org.hibernate.ejb.Ejb3Configuration.addNamedAnnotatedClasses(Ejb3Configuration.java:1304) 
     ... 11 more 

Busqué en Google un poco acerca de the problem pero no puedo conseguir la organización del código fuente correcta.

¿Algún ayuda?

+0

¿Estás seguro de que el mensaje significa que no se encuentra el archivo, en lugar de un problema dentro del archivo? – Bozho

+1

Publique la excepción ** exacta (y el rastro) y su persistence.xml –

+1

http://techblog.bozho.net/?p=155 – Bozho

Respuesta

9

La clase o paquete no encontraron mensaje se explican por sí mismos: una clase o un paquete no se encuentra - no es el persistence.xml - como lo sugiere la causa de la excepción:

Caused by: java.lang.ClassNotFoundException: model.Extrait 

La entidad model.Extrait no refleja el paquete que está mostrando, pero es muy probable que se declare en su persistence.xml (que no se muestra) pero no está presente en la ruta de la clase.

+1

es una pena que esto sea realmente estúpido. – amirouche

+3

Este error me ayudó a entender que no entendía la salida de Java Exceptions ... – amirouche

+2

@phmr Todos aprendemos de los errores :) Algunos llaman sucesión de errores "experiencia". –

Cuestiones relacionadas