【问题标题】:Wildfly 8.0.0.Final JTA transaction issuesWildfly 8.0.0.Final JTA 交易问题
【发布时间】:2014-03-04 05:39:03
【问题描述】:

由于我们在事务中使用了很多 @ApplicationScoped bean,但我们不想使用 EJB(ApplicationScoped bean 不适用于无状态 bean),因此我们创建了自己的事务拦截器,例如:

@Resource
UserTransaction tx; 
@Resource(mappedName="java:jboss/TransactionSynchronizationRegistry")
TransactionSynchronizationRegistry tsr;

@AroundInvoke
public Object manageTransaction(InvocationContext context) throws Exception {
    Object result;
    if (Status.STATUS_NO_TRANSACTION == tsr.getTransactionStatus()) {
        tx.begin();
        // System.out.println("Starting transaction");
        result = context.proceed();
        tx.commit();
    } else {
        result = context.proceed();
    }
    // System.out.println("Committing transaction");

    return result;
}

但是,在 JTA 事务的情况下,我们得到了如下错误:

使用自己的 TransactionInterceptor 导致
原因:java.sql.SQLException: java.sql.SQLException: XAER_RMFAIL: 全局事务处于IDLE状态时无法执行命令

我们曾经使用 Seam3 托管事务,它似乎工作正常。但它不再适用于 Wildfly。我们尝试了 Deltaspike 的 jpa 模块,但它似乎在围绕多个数据源进行事务处理时出现问题(非 JTA 似乎很好),即使我们遵循了他们的指示。

我们也尝试了@Applicationscoped @TransactionalManagement,但它没有给我们事务。

我在使用 Wildfly 而不是 @Stateful 或 @Statelss @Singleton 等方面有哪些选择?

【问题讨论】:

    标签: java transactions jta wildfly


    【解决方案1】:

    您是否尝试过javax.transaction.Transactional(Java EE 7 中的新功能)?

    @ApplicationScoped
    @Transactional
    public MyTransactionalBean {
        // ...
    }
    

    【讨论】:

      猜你喜欢
      • 2023-03-03
      • 2014-04-02
      • 1970-01-01
      • 2015-05-16
      • 1970-01-01
      • 2015-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多