我对树脂是新手,我正试图让冬眠来使用它。我在数据源的JNDI查找中遇到了一些问题。我一直在说"javax.naming.NameNotFoundException“。我有一个特殊的情况,我需要动态地创建一个EntityManager,并传入url属性。所以当我设置我的web.xml时,它看起来是这样的
<?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: java:comp/env/jdbc/进化
我还尝试过在persistence.xml中的jta数据源标记中添加jdbc/演进。奇怪的是,当我第一次在servlet中碰到一个断点,自己通过InitialContext查找“java:comp/env/jdbc/流变”对象时,它就会找到它,但是一旦它进入hibernate代码,它就找不到了。
发布于 2014-02-26 18:41:16
昨晚睡眠充足后,我意识到我正在尝试混合2种技术,而且我根本不需要jta数据源。因为我只需要persistence.xml来创建一个持久性单元,然后在代码中提供其余的连接属性。我删除了jta数据源,之后大家都很高兴。所以我的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>现在我从实体管理器那里得到了一个结果。好尿啊!
https://stackoverflow.com/questions/22029471
复制相似问题