【问题标题】:CMT JTA, but "no transaction is in progress"CMT JTA,但“没有交易正在进行中”
【发布时间】:2015-04-20 09:27:33
【问题描述】:

我可以打电话给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 UserTransactionBEAN 事务管理,但它说我不能,与 JTA。只是没有交易正在进行。

我的方法有

@Transactional  
@TransactionAttribute(TransactionAttributeType.REQUIRED)  

它是一个 EJB,所以我很生气。 CMT JTA 应该自己做交易。

【问题讨论】:

  • 如果它是 EJB 那么为什么要使用 spring?如果你使用 Spring,你需要添加 &lt;tx:annotation-driven /&gt; 来告诉 spring 使用 @Transactional 做一些事情。
  • 将 bean 代码添加到问题中,因为看起来您正在将 EJB 与 Spring 混合。如果您使用的是 EJB,那么您不应该尝试通过 Spring 注入 entityManager。你用的是什么服务器?
  • 我已经有 了。我正在混合 Spring (v4.0.6) 和 EJB3,并使用 JBoss eap 6.3。我可以改为通过 JNDI 获取 entityManager,但这对事务没有帮助。
  • @djb 如果您的班级中有@Stateless(您的问题中仍然缺少),则删除@Transactional,并从您的Spring 配置中删除所有与事务相关的条目,因为它不是必需的。还要确保您的数据源设置为 JTA,因为在 JBoss 中默认情况下不是。
  • 我确实有 @Stateless,现在我已经删除了所有 @Transactional ,我的数据源是 transaction-type="JTA" 并定义了 jta-data-source。但不是。我同意它应该工作。也许问题在于代码位于骆驼路线的处理器中。但是该链的所有部分都是@Stateless 直到该代码。

标签: java spring jpa transactions jta


【解决方案1】:

原来它不是 JPA/JBoss/等。问题。这是因为我的线程是在骆驼上下文中运行的。

我花了一天时间搜索find out:

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

仅供参考: “Camel 3.0.0 中的异步事务”

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多