2014-02-26 48 views
0

我是新來的樹脂,我試圖讓Hibernate與它一起工作。我遇到了一些JNDI查找數據源的問題。我不斷收到「javax.naming.NameNotFoundException」。我有一個特殊情況,我需要通過傳遞url屬性動態創建一個EntityManager。所以當我建立了我的web.xml看起來這Hibernate和Resin一起工作

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns="http://caucho.com/ns/resin"> 
    <database jndi-name="jdbc/evolution"> 
     <driver> 
      <type>org.postgresql.Driver</type> 
     </driver> 
    </database> 

    <ejb-server data-source="jdbc/evolution"/> 
</web-app> 

和我的persistence.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0"> 
    <persistence-unit name="evolution"> 
     <provider>org.hibernate.ejb.HibernatePersistence</provider> 
     <!--<provider>com.caucho.amber.manager.AmberPersistenceProvider</provider>--> 
     <!--<jta-data-source>jdbc/evolution</jta-data-source>--> 
     <jta-data-source>java:comp/env/jdbc/evolution</jta-data-source> 
     <properties> 
      <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/> 
     </properties> 
    </persistence-unit> 
</persistence> 

這裏是我使用來獲取實體管理器代碼:

public class DatabaseConnectionFactory { 
    public static EntityManager createManager(String databaseName) { 
     EntityManagerFactory emf; 
     Map properties = new HashMap(); 

     properties.put("javax.persistence.jdbc.url", "jdbc:postgresql://localhost:5432/" + databaseName); 
     properties.put("javax.persistence.jdbc.user", "postgres"); 
     properties.put("javax.persistence.jdbc.password", ""); 
     properties.put("javax.persistence.jdbc.driver", "org.postgresql.Driver"); 


     emf = Persistence.createEntityManagerFactory("evolution", properties); 
     return emf.createEntityManager(); 
    } 
} 
記者:當它試圖創建實體管理器,我收到了

javax.naming.NameNotFoundException

ava:comp/env/jdbc/evolution

我也嘗試在jdbc/evolution標籤中的persistence.xml中放入jdbc/evolution。奇怪的是,當我第一次在servlet中找到一個斷點並通過InitialContext查找「java:comp/env/jdbc/evolution」對象時,它發現它,但一旦它進入hibernate代碼,它就不能。任何人有任何想法爲什麼?

回答

0

昨晚得到足夠的睡眠後,我意識到我在嘗試混合使用2種技術,而且我根本不需要jta-data-source。因爲我只需要persistence.xml來創建一個持久性單元,然後在代碼中提供剩餘的連接屬性。我刪除了jta-data-source,之後都很開心。所以我的persistence.xml現在看起來像

<?xml version="1.0" encoding="UTF-8"?> 
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0"> 
    <persistence-unit name="evolution"> 
     <provider>org.hibernate.ejb.HibernatePersistence</provider> 
     <properties> 
      <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/> 
     </properties> 
    </persistence-unit> 
</persistence> 

現在我得到的結果,從格蘭實體管理器了。 Yipee!

相關問題