春季数据+ JTA事务+ JBoss7

时间:2018-08-07 10:05:19

标签: spring jboss spring-data-jpa eclipselink

我在MS SQL数据库上使用JBoss7和EclipseLink。我正在尝试将Spring Data添加到我的项目中,但是当生成存储库方法实现时,一切都会失败。 它尝试加入当前事务,并失败,并显示“ ARJUNA016083:由于事务处于中止状态而无法注册同步”。

我的Spring配置:

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" destroy-method="destroy">
    <property name="loadTimeWeaver">
        <bean class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver" />
    </property>
    <property name="persistenceUnitName" value="${module.persistence-unit-name}" />
</bean>

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

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

<bean id="PROPAGATION_REQUIRED" class="org.apache.camel.spring.spi.SpringTransactionPolicy">
    <property name="transactionManager" ref="transactionManager" />
    <property name="propagationBehaviorName" value="PROPAGATION_REQUIRED" />
</bean>

<bean id="PROPAGATION_REQUIRES_NEW" class="org.apache.camel.spring.spi.SpringTransactionPolicy">
    <property name="transactionManager" ref="transactionManager" />
    <property name="propagationBehaviorName" value="PROPAGATION_REQUIRES_NEW" />
</bean>

persistence.xml:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">

    <persistence-unit name="myUnit" transaction-type="JTA">
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
        <jta-data-source>java:jboss/datasources/mixx</jta-data-source>

        <class>package.MyEntity</class>

        <shared-cache-mode>NONE</shared-cache-mode>
        <validation-mode>NONE</validation-mode>

        <properties>
            <property name="eclipselink.target-server" value="JBoss" />
            <property name="eclipselink.deploy-on-startup" value="true" />
            <property name="eclipselink.weaving" value="static" />
            <property name="eclipselink.exception-handler" value="package.persistence.EclipseLinkExceptionHandler" />
            <property name="eclipselink.session.customizer" value="package.persistence.EclipseLinkSessionCustomizer" />
        </properties>
    </persistence-unit>

</persistence>

当它尝试调用(第136行)时,它在JTATransactionWrapper.registerIfRequired(UnitOfWorkImpl uow)中完全失败:

((Transaction)txn).registerSynchronization(new Synchronization() {

    public void beforeCompletion() {}
    public void afterCompletion(int status) {
        //let the wrapper know the listener is no longer registered to an active transaction
        isJoined = false;
    }
});

Spring Data是否可以在EclipseLink和JTA上正常工作?有机会在我的项目中使用它吗?

0 个答案:

没有答案
相关问题