首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bitronix + Spring + Hibernate +持久性

Bitronix + Spring + Hibernate +持久性
EN

Stack Overflow用户
提问于 2011-02-17 10:11:10
回答 5查看 10.6K关注 0票数 2

我正在尝试创建事务管理器,并将其与Hibernate一起用于Oracle。

我的persistence.xml文件是:

代码语言:javascript
复制
<persistence-unit name="org.drools.persistence.jpa"
        transaction-type="JTA">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <jta-data-source>jdbc/testDS1</jta-data-source>
        <class>org.drools.persistence.session.SessionInfo</class>
        <class>org.jbpm.persistence.processinstance.ProcessInstanceInfo</class>
        <class>org.drools.persistence.processinstance.WorkItemInfo</class>

        <exclude-unlisted-classes>true</exclude-unlisted-classes>
        <properties>
            <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect" />
            <property name="hibernate.connection.autocommit" value="false" />
            <property name="hibernate.max_fetch_depth" value="3" />
            <property name="hibernate.jndi.class" value="bitronix.tm.jndi.BitronixInitialContextFactory"/> 
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.transaction.manager_lookup_class"
                value="org.hibernate.transaction.BTMTransactionManagerLookup" />
        </properties>
    </persistence-unit>

在applicationContext.xml of spring中,我添加了以下内容:

代码语言:javascript
复制
<bean id="dataSource" class="bitronix.tm.resource.jdbc.PoolingDataSource" init-method="init" destroy-method="close"> 
           <property name="className" value="oracle.jdbc.xa.client.OracleXADataSource" /> 
           <property name="uniqueName" value="jdbc/testDS1" /> 
           <property name="minPoolSize" value="1" /> 
           <property name="maxPoolSize" value="5" /> 
           <property name="driverProperties">
            <props>
                <prop key="URL">myURL</prop>
                <prop key="user">username</prop>
                <prop key="password">password</prop>
            </props>
        </property>       
    </bean> 

    <bean id="txManager" class="org.springframework.transaction.jta.JtaTransactionManager"> 
        <property name="transactionManager" ref="bitronixTransactionManager"/> 
        <property name="userTransaction" ref="bitronixTransactionManager"/> 
    </bean> 

    <bean id="bitronixTransactionManager" factory-method="getTransactionManager" 
          class="bitronix.tm.TransactionManagerServices" depends-on="dataSource,txManager" 
          destroy-method="shutdown"/>

但是,当我运行时:

代码语言:javascript
复制
EntityManagerFactory emf = Persistence.createEntityManagerFactory("org.drools.persistence.jpa");

我有个例外:

代码语言:javascript
复制
Caused by: org.hibernate.HibernateException: Could not find datasource: jdbc/testDS1

例外情况出现在Hibernate下文件的ds = (DataSource ) NamingHelper.getInitialContext(props).lookup(jndiName);上。

  1. 有什么问题吗?
  2. Hibernate持久性知道如何引用spring txManager bean吗?
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-03-22 10:20:25

您的持久性提供程序在jndi上进行查找。Spring应用程序上下文中定义的数据源不绑定到jndi。因此,持久性提供程序对数据源的查找尝试失败,因为没有绑定到jndi的此类数据源。

您可能需要检查http://forum.springsource.org/showthread.php?t=13984

您能否尝试在服务器上下文中定义数据源,并在spring应用程序中使用它们的jndi名称查找它们?

票数 2
EN

Stack Overflow用户

发布于 2011-03-16 12:23:58

有什么问题吗?

通过请求jdbc/testDS1,您能够在一个独立的java应用程序中使用这个数据源吗?在普通的Tomcat DataSources中,您需要请求java:comp/env/jdbc/testDS1,而不仅仅是jdbc/testDS1

Hibernate持久性知道如何引用spring txManager bean吗?

没有。你是对Hibernate这么说的:

代码语言:javascript
复制
        <property name="hibernate.transaction.manager_lookup_class"
            value="org.hibernate.transaction.BTMTransactionManagerLookup" />

因此,Hibernate将使用查找类来“查找”事务管理器:-)

票数 3
EN

Stack Overflow用户

发布于 2011-02-17 10:31:10

你是把这当成战争还是耳朵?您是否在web.xml中声明了数据源并将其设置在应用服务器上?

更新:既然您已经在WAR中声明了数据源,请确保您已经在Tomcat中设置了JNDI数据源。

您的错误是:“由: org.hibernate.HibernateException:未能找到数据源:jdbc/testDS1 1引起的”。这是一个JNDI查找名称。

那么“我不想”和这件事有什么关系呢?

Spring需要Java命名和目录服务来查找与此名称相关的数据源;这正是Tomcat提供的。如果不是Tomcat,你建议Spring从哪里得到它?命名服务是Java应用服务器的一部分。

您要么必须在Tomcat上设置JNDI数据源和连接池,要么放弃它提供的好处,并告诉Spring使用DriverManagerDataSource:

http://static.springsource.org/spring/docs/2.5.x/reference/jdbc.html

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

https://stackoverflow.com/questions/5027539

复制
相关文章

相似问题

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