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

发布于 2024-10-04 03:00:48 字数 1077 浏览 2 评论 0原文


下面代码中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 作为我的事务管理器(因此它是工厂就是工厂)。

谢谢,
一泰

Is the reusage of the ut instance in the following code correct?

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();  

When the JNDI resource is defined so:

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

What I'm not sure about is whether I need to add another lookup, and so to retrieve a new UserTransaction from the factory, before beginning a new UserTransaction?

I don't think it's relevant but as the resource definition states I'm using Atomikos as my Transaction Manager (and so it's factory as the factory).

Thanks,
Ittai

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

哎呦我呸! 2024-10-11 03:00:48

重复使用就可以了。

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

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

如果您是一个休眠用户,那么请考虑 SessionFactory 和 Session。

reuse is ok.

UserTransaction does not represent a specific transaction instance, but rather provides a way of managing the transaction context of the current Thread. Think of it as a singleton if you like. UserTransaction is typically stateless.

An individual instance of a Transaction is a distinct entity and not normally needed directly by user code. One is created for each tx and can't be reused.

If you're a hibernate person then think in terms of SessionFactory and Session.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文