gpt4 book ai didi

java - 我可以在 commit() 之后重用 UserTransaction 实例吗?

转载 作者:搜寻专家 更新时间:2023-11-01 03:13:50 25 4
gpt4 key购买 nike


以下代码中 ut 实例的重用是否正确?

UserTransaction ut = (UserTransaction)ctx.lookup("java:comp/UserTransaction");  
ut.begin();
doSomeWork();
ut.commit();//Or rollback (I think it doesn't matter)
ut.begin(); //Or rollback (I think it doesn't matter)
doOtherWork();
ut.commit();

当这样定义 JNDI 资源时:

Reference atomikosUserTransactionFactoryDS = new Reference("com.atomikos.icatch.jta.UserTransactionImp", 
"com.atomikos.icatch.jta.UserTransactionFactory", null);
atomikosUserTransactionFactoryDS.add(new RefAddr("name") {
public Object getContent() {
return "UserTransaction";
}});
atomikosUserTransactionFactoryDS.add(new RefAddr("type") {
public Object getContent() {
return "com.atomikos.icatch.jta.UserTransactionImp";
}});
initContext.rebind("java:comp/UserTransaction", atomikosUserTransactionFactoryDS);

我不确定是否需要添加另一个查找,以便在开始新的 UserTransaction 之前从工厂检索新的 UserTransaction?

我认为它不相关,但正如资源定义所述,我使用 Atomikos 作为我的事务管理器(因此它是工厂作为工厂)。

谢谢,
一泰

最佳答案

可以重复使用。

UserTransaction 并不代表一个具体的事务实例,而是提供了一种管理当前Thread 的事务上下文的方式。如果您愿意,可以将其视为单例。 UserTransaction 通常是无状态的。

事务的单个实例是一个独特的实体,通常用户代码不需要直接使用。为每个 tx 创建一个,不能重复使用。

如果您喜欢 hibernate ,那么请考虑 SessionFactory 和 Session。

关于java - 我可以在 commit() 之后重用 UserTransaction 实例吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4255422/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com