2013-11-22 7 views
6

Ho difficoltà ad eseguire l'aggiornamento a Hibrernate 4.3.x da 4.2.7. Ho ottenuto questa eccezione:Hibernate 4.3 + Tomcat 7 Impossibile cercare il nome JNDI

Caused by: javax.naming.NameNotFoundException: Name [java:comp/env/jdbc/data] is not bound in this Context. Unable to find [java:comp]. 
at org.apache.naming.NamingContext.lookup(NamingContext.java:820) 
at org.apache.naming.NamingContext.lookup(NamingContext.java:154) 
at javax.naming.InitialContext.lookup(InitialContext.java:415) 
at org.hibernate.engine.jndi.internal.JndiServiceImpl.locate(JndiServiceImpl.java:114) 
... 82 more 

sto usando Tomcat 7.0.29 (7.0.47 provato pure) e JDK 7 (v25). Non ci sono problemi con Hibernate 4.2.7.

Ecco il mio persistence.xml:

<persistence-unit name="data" transaction-type="RESOURCE_LOCAL"> 
    <non-jta-data-source>java:comp/env/jdbc/data</non-jta-data-source> 
    <properties> 
     <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" /> 
     <property name="hibernate.hbm2ddl.auto" value="update" /> 
     <property name="hibernate.show_sql" value="false" /> 
     <property name="hibernate.format_sql" value="true" /> 
    </properties> 
</persistence-unit> 

Ma non credo che il problema è qui. Ho fatto un po 'di ricerca di debug e ho scoperto quanto segue:

JndiServiceImpl#locate(String jndiName) crea un contesto iniziale che differisce.

4.3.0 - org.apache.naming.NamingContext

4.2.7 - org.apache.naming.SelectorContext

A parte questo, non ho trovato nessun più differenze.

Ho trovato alcuni argomenti simili per questo problema, ma nessuno di aiuto. Grazie per qualsiasi aiuto.

+0

Hai definito qualsiasi origine dati in server.xml? –

+1

No, non l'ho fatto. Dovrei? Non ho mai definito alcun DS in server.xml. – vernjan

+0

Qualcuno ha postato un bug report qui: https://hibernate.atlassian.net/browse/HHH-8818 –

risposta

0

Sì, è in realtà buggy, perché si sono concentrati in modo diverso su come funziona un session-factory e quando viene richiesta una connessione alla fabbrica.

Quindi è necessario risolverlo dietro lo session-factory per utilizzarlo quando lo session-factory richiede una nuova connessione.

cercare di risolvere il DataSource in jndi a sua unica respolsibility di sospensione, attraverso il vecchio scool hibernate.cfg.xml come questo:

<hibernate-configuration> 
    <session-factory name="data"> 
     <property name="connection.datasource">java:comp/env/jdbc/data</property> 
    ... 

e risolvere la configurazione tramite persistence.xml come questo:

<persistence version="2.0"> 
    <persistence-unit name="data"> 
     <properties> 
      <property name="hibernate.ejb.cfgfile" value="hibernate.cfg.xml"/> 

Forse il tuo hbm2ddl deve quindi passare a hibernate.cfg.xml.

Buon divertimento.

Problemi correlati