【问题标题】:Hibernate and Resin working togetherHibernate 和 Resin 一起工作
【发布时间】:2014-02-26 00:53:36
【问题描述】:

我是树脂新手,正在尝试让 Hibernate 使用它。我在数据源的 JNDI 查找中遇到了一些问题。我不断收到“javax.naming.NameNotFoundException”。我有一个特殊情况,我需要通过传入 url 属性来动态创建一个 EntityManager。所以当我设置我的 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/evolution

我还尝试将 jdbc/evolution 放入 persistence.xml 中的 jta-data-source 标记中。奇怪的是,当我第一次在 servlet 中遇到断点并通过 InitialContext 自己查找“java:comp/env/jdbc/evolution”对象时,它会找到它,但是一旦它进入休眠代码,它就不能了。有人知道为什么吗?

【问题讨论】:

    标签: hibernate web.xml persistence.xml resin


    【解决方案1】:

    昨晚得到足够的睡眠后,我意识到我正在尝试混合 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>
    

    现在我从 Entity Manager 得到结果。耶!

    【讨论】:

      猜你喜欢
      • 2012-01-25
      • 2015-05-19
      • 1970-01-01
      • 1970-01-01
      • 2015-06-18
      • 2018-08-19
      • 1970-01-01
      • 2015-10-07
      • 1970-01-01
      相关资源
      最近更新 更多