繁体   English   中英

Wildfly 8.0.0.Final JTA交易问题

[英]Wildfly 8.0.0.Final JTA transaction issues

由于我们在事务中使用了大量的@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等?

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM