2015-06-18 3 views
1

Я создаю приложение сервлета Tomcat, используя Hibernate с источником данных jta. Мой persistence.xml имеет следующее содержание:HibernatePersistence javax.naming.NameNotFoundException, созданный с помощью DataSource

<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> 
    <persistence-unit name="metadata.model" transaction-type="JTA"> 
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 
    <jta-data-source>jdbc/BitronixJTADataSource</jta-data-source> 

... 
</persistence> 

В моем ${web-app}/WebContent/META-INF/Context.xml я следующее содержание:

<Context> 
<Resource name="jdbc/BitronixJTADataSource" auth="Container" 
      type="javax.sql.DataSource" 
      maxActive="100" maxIdle="30" maxWait="10000" 
      username="root" password="mysecretpassword" 
      driverClassName="com.mysql.jdbc.Driver" 
      url="jdbc:mysql://localhost:3306/metadatadb" /> 
</Context> 

Сразу же после запуска приложения, я выдаю:

emf = Persistence.createEntityManagerFactory("metadata.model"); 
entityManager = emf.createEntityManager(); 

и получить a

javax.naming.NameNotFoundException: Name [jdbc/BitronixJTADataSource] is not bound in this Context. Unable to find [jdbc]. 

У вас есть идеи, почему это происходит?

ответ

1

Похоже, что в файле persistence.xml jta-data-source должен был иметь значение java:comp/env/jdbc/BitronixJTADataSource, чтобы его можно было найти в InitialContext.