2012-05-11 7 views
13

Estamos tratando de actualizar desde Hibernate 3.6.7 a 4.1.2 y 3.2.0 Herramientas Hibernate 3.5.0 aHerramientas de hibernación: Error de nombre JNDI análisis

Generamos un script de creación de base de datos utilizando Ant:

 <hibernatetool destdir="${target}"> 
     <jpaconfiguration persistenceunit="stdcmpOrderPersistenceUnit" propertyfile="@{propertyfile}"/> 
     <classpath refid="@{classpathid}"/> 
     <!-- the file name is relative to $destdir --> 
     <hbm2ddl outputfilename="@{output}" format="true" export="false" drop="false"/> 
    </hibernatetool> 

Nuestra mirada unidad de persistencia de esta manera:

<persistence-unit name="stdcmpOrderPersistenceUnit" transaction-type="JTA"> 

    <provider>org.hibernate.ejb.HibernatePersistence</provider> 
    <jta-data-source>jdbc/lakshmi_stdcmp</jta-data-source> 
    <mapping-file>META-INF/stdcmpOrderNamedQueries.xml</mapping-file> 

    <class>ch.ethz.id.wai.lakshmi.stdcmp.persistency.PersistentOrder</class> 

    <exclude-unlisted-classes>true</exclude-unlisted-classes> 

    <properties> 
     <property name="hibernate.show_sql" value="false"/> 
     <property name="hibernate.format_sql" value="false"/> 
    </properties> 

</persistence-unit> 

Después de la actualización se obtiene el siguiente error:

[hibernatetool] org.hibernate.service.jndi.JndiException: Error parsing JNDI name [jdbc/lakshmi_stdcmp] 
[hibernatetool] javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial 

¿Por qué Hibernate intenta resolver el nombre JNDI ya que toda la información en la PersistenceUnit está disponible? No tuvimos problemas con la versión anterior.

Y en cualquier caso, ¿cómo podemos especificar una NamingFactory? (y cuál?)

Respuesta

1

El problema es que desde su herramienta de hibernación, ha configurado la herramienta de hibernación para usar la unidad de persistencia que tiene una fuente de datos jta configurada a través de JNDI. Para que la tarea ant converse con JNDI, necesita nombrar el URL y el proveedor de fábrica. Use la clase de fábrica de nombres de su servidor de aplicaciones donde está configurada la fuente de datos.

Espero que ayude.

48

Estaba teniendo un problema similar, causando específicamente el "Error al analizar el nombre JNDI", y se solucionó fácilmente simplemente eliminando el atributo de nombre vacío de la etiqueta session-factory.

Mi hibernate.cfg.xml tenían

<session-factory name=""> 

Esto se genera automáticamente, por lo que acaba de quitar el attrib name.

Esta corrección se encontró aquí: https://forum.hibernate.org/viewtopic.php?f=1&t=1014760

Buena suerte.

+1

¡Bienvenido a Stack Overflow! Si bien esto podría responder teóricamente a la pregunta, [sería preferible] (http://meta.stackexchange.com/q/8259) incluir aquí las partes esenciales de la respuesta y proporcionar el enlace de referencia. – Spontifixus

+1

Gracias por señalarlo. –

+0

¿Alguna idea de por qué hibernar no es así? – webber

Cuestiones relacionadas