TransactionManager.begin() 和 QuarkusTransaction.begin() 有什么区别?

What is the difference between TransactionManager.begin() and QuarkusTransaction.begin()?

Quarkus 2.8.0.Final 引入 QuarkusTransaction

有什么区别
@ApplicationScoped
public class MyClass {

    @Inject
    TransactionManager tm;

    public void doSomething() throws Exception {
        tm.begin();
        // ...
        tm.commit();
    }
}

@ApplicationScoped
public class MyClass {

    public void doSomething() {
        QuarkusTransaction.begin();
         // ...
        QuarkusTransaction.commit();
     }
}

?

我在很多测试中都使用了 TransactionManager,当我用 QuarkusTransaction 替换它时,当出现问题时我收到不同的错误消息:

使用 TransactionManager 时,我得到

javax.transaction.NotSupportedException: BaseTransaction.checkTransactionState - ARJUNA016051: thread is already associated with a transaction!

使用 QuarkusTransaction 时,我得到

javax.enterprise.context.ContextNotActiveException

Quarkus 文档并没有真正解释为什么引入 QuarkusTransaction

QuarkusTransactionthis 合并请求一起引入,其想法是提供更易于使用的交易 API.

正如在 this 测试中所见,它意味着在请求范围处于活动状态时使用