我是新來的樹脂,我試圖讓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代碼,它就不能。任何人有任何想法爲什麼?