CMT JTA,但“没有交易正在进行中”

时间:2015-04-20 09:27:33

标签: java spring jpa transactions jta

我可以拨打entityManager.merge(obj),但不能拨打entityManager.flush()

我收到“没有正在进行的交易”。

我的申请背景有:

<jee:jndi-lookup jndi-name="${persistenceEMFJndiServerName}"
    id="entityManagerFactory" expected-type="javax.persistence.EntityManagerFactory" />


<bean id="entityManager"
    class="org.springframework.orm.jpa.support.SharedEntityManagerBean">
    <property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>

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

我的持久性单位表示transaction-type =“JTA”

我正在通过

加载它
@PersistenceContext 
private EntityManager entityManager;

我尝试了一些事情,比如:
entityManager.joinTransaction()
entityManager.getTransaction().begin()/.end()
@Resource UserTransaction进行BEAN事务管理,但它说我不能使用JTA。没有交易正在进行中。

我的方法有

@Transactional  
@TransactionAttribute(TransactionAttributeType.REQUIRED)  

它是一个EJB,所以我很生气。 CMT JTA应该单独进行交易。

1 个答案:

答案 0 :(得分:0)

原来它不是JPA / JBoss /等。问题。这是因为我的线程在驼峰环境中运行。

我花了一天时间搜索find out

重要 :一个事务与单个执行线程相关联! - 如果您在子路径中使用“seda”,“vm”,“jms”或任何其他协议来处理不同线程中的交换,则此执行将不属于此事务上下文!

供参考: &#34; Camel 3.0.0&#34;

中的异步事务

我在一个线程中有了我的entityManager.merge / flush代码。因此,没有交易。摆脱线程,现在它工作正常。