在weblogic中的spring / eclipselink项目中使用本地/全局JNDI数据源查找时未提交事务

时间:2014-04-04 12:56:22

标签: spring transactions weblogic eclipselink jndi

当我在persistence.xml中使用全局JNDI名称时,一切正常。

使用本地JNDI名称时出错,将resource-ref添加到web.xml并将本地名称映射到weblogic.xml中的全局名称。他成功部署,找到数据源,选择和插入,但从不提交!当我在persistence.xml中直接使用全局JNDI名称时,确实会发生提交。

我的春季背景如下:

<bean id="localContainerEntityManagerFactoryBean" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="persistenceUnitName" value="rctUnit" />
</bean>

<bean id="transactionManager" class="org.springframework.transaction.jta.WebLogicJtaTransactionManager" />

<tx:annotation-driven transaction-manager="transactionManager" />

更改后的persistence.xml:

<persistence-unit name="rctUnit" transaction-type="JTA">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<jta-data-source>java:comp/env/jdbc/rct</jta-data-source>

以下内容添加到web.xml和weblogic.xml:

<resource-ref>
    <description>RCT DB</description>
    <res-ref-name>jdbc/rct</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
</resource-ref>

<resource-description>
    <res-ref-name>jdbc/rct</res-ref-name>
    <jndi-name>db.datasource.rct</jndi-name>
</resource-description>

使用以下版本:

  • eclipselink:2.0.2
  • jpa:1.0.0
  • spring:3.2.0.RELEASE
  • weblogic:10.3.3

2 个答案:

答案 0 :(得分:0)

我能够通过向persistence.xml添加eclipseLink属性来解决它:

<property name="eclipselink.target-server" value="weblogic" />

我不知道为什么在persistence.xml中使用全局JNDI名称时不需要此属性。然后不需要eclipse属性来使其工作。在persistence.xml中使用本地JNDI名称时,需要此属性才能进行事务提交。

答案 1 :(得分:0)

可能因为前缀java:comp /根据部署环境不同,有些可能不会使用“comp”部分