首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >冬眠和树脂协同工作

冬眠和树脂协同工作
EN

Stack Overflow用户
提问于 2014-02-26 00:53:36
回答 1查看 369关注 0票数 0

我对树脂是新手,我正试图让冬眠来使用它。我在数据源的JNDI查找中遇到了一些问题。我一直在说"javax.naming.NameNotFoundException“。我有一个特殊的情况,我需要动态地创建一个EntityManager,并传入url属性。所以当我设置我的web.xml时,它看起来是这样的

代码语言:javascript
复制
<?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:

代码语言:javascript
复制
<?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>

下面是我用来获取实体管理器的代码:

代码语言:javascript
复制
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代码,它就找不到了。

EN

回答 1

Stack Overflow用户

发布于 2014-02-26 18:41:16

昨晚睡眠充足后,我意识到我正在尝试混合2种技术,而且我根本不需要jta数据源。因为我只需要persistence.xml来创建一个持久性单元,然后在代码中提供其余的连接属性。我删除了jta数据源,之后大家都很高兴。所以我的persistence.xml现在看起来

代码语言:javascript
复制
<?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>

现在我从实体管理器那里得到了一个结果。好尿啊!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22029471

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档