2012-05-11 5 views
13

Stiamo cercando di aggiornare da Hibernate 3.6.7 a 4.1.2 e Hibernate Tools 3.2.0 a 3.5.0Hibernate Tools: errore di nome JNDI analisi

Generiamo uno script di creazione DB usando 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> 

il nostro sguardo unità di persistenza in questo modo:

<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> 

Dopo l'aggiornamento otteniamo il seguente errore:

[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 

Perché Hibernate tenta di risolvere il nome JNDI poiché tutte le informazioni su PersistenceUnit sono disponibili? Non abbiamo avuto problemi con la vecchia versione.

E in ogni caso come possiamo specificare un NamingFactory? (e quale?)

risposta

1

Il problema deriva dal tuo strumento di ibernazione, hai configurato lo strumento di ibernazione per usare l'unità di persistenza che ha una sorgente di dati jta configurata tramite JNDI. Per poter comunicare con JNDI all'attività ant, è necessario nominare l'url e il provider di fabbrica. Utilizzare la classe factory di denominazione del server applicazioni in cui è stata configurata l'origine dati.

Spero che aiuti.

48

Avevo un problema simile, causando in particolare "Errore durante l'analisi del nome JNDI", ed è stato risolto facilmente rimuovendo semplicemente l'attributo del nome vuoto dal tag di sessione-factory.

mio hibernate.cfg.xml avevano

<session-factory name=""> 

Questo è stato generato automaticamente, quindi ho solo rimosso il name attrib.

Questa correzione è stato trovato qui: https://forum.hibernate.org/viewtopic.php?f=1&t=1014760

Buona fortuna.

+1

Benvenuti in Stack Overflow! Mentre questo può teoricamente rispondere alla domanda, [sarebbe preferibile] (http://meta.stackexchange.com/q/8259) includere qui le parti essenziali della risposta e fornire il link per riferimento. – Spontifixus

+1

Grazie per la segnalazione. –

+0

Qualche idea perché il letargo non è così? – webber