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
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