首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JTA -如何注册交易?

JTA -如何注册交易?
EN

Stack Overflow用户
提问于 2013-06-05 11:40:53
回答 2查看 1.2K关注 0票数 2

我正在使用我在网上找到的以下代码(这里)作为JTA事务处理的示例:

代码语言:javascript
复制
// Get a UserTransaction
        UserTransaction txn = new InitialContext().lookup("java:comp/UserTransaction");
try {
     System.out.println("Starting top-level transaction.");

     txn.begin();
     stmtx = conn.createStatement(); // will be a tx-statement 

     stmtx.executeUpdate("INSERT INTO test_table (a, b) VALUES (1,2)");
     stmtx.executeUpdate("INSERT INTO test_table2 (a, b) VALUES (3,4)");

     System.out.print("\nNow attempting to rollback changes.");

     txn.rollback();
}

总的来说,我有几个关于JTA的问题,这些问题都是从上面的例子中得出的:

  1. 我假定说txn.begin,然后回滚的全部意思是能够(非常地)回滚两个SQL语句,对吗?
  2. 每个更新查询都是事务本身,对吗?他们一定是成功了,这样我们才能在底部进行回退。好吧,如果他们成功了,那我们怎么能突然把他们击退呢?
  3. 最重要的问题是:当我们说txn.begin()时会发生什么?我从JTA中了解到,它应该通过TransactionManager实例使用一个调用线程注册这个事务。TM是如何与UserTransaction连接的?最后,txn如何意识到我们对DB进行了两次修改,并能够与DB对话以回滚?我们没有向它注册任何ResourceManager,所以它不应该知道有任何资源在起作用.

我有点迷路了,所以任何信息都会很感激的.问题3最让我烦恼。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-05 11:51:33

  1. 是的,或者只是一件事。它也是在事务结束时提交事务的能力,因此其他并发事务只能在事务提交之后看到新的状态,而不是事务开始到结束之间的所有临时状态(即I在ACID中)。
  2. 不是的。更新就是更新。它作为您之前开始的事务的一部分执行。如果其中一个没有成功,您将有一个异常,并且仍然可以选择提交事务(即提交了所有以前的更新),或者回滚事务(即取消所有以前的更新)。
  3. UserTransaction可能对它的事务管理器有一个引用。当您从Java环境中的DataSource获得连接时,DataSource将链接到Java容器的事务管理器,而回滚JTA事务将使用XA协议回滚事务期间对所有数据源所做的所有操作。那是集装箱的事不是你的。
票数 1
EN

Stack Overflow用户

发布于 2013-06-05 11:58:13

在交易方面有很多需要学习的地方,但也许我可以给你一个先机:

  1. 是。但是您通常只希望在出现问题时才回滚--由于技术问题(语法错误、表找不到、段溢出、.),事务的某些步骤无法完成。或者是应用程序逻辑问题(例如,客户没有足够的资金购买所有订单行项目)。
  2. 如果禁用了自动提交模式,则在实际提交之前不会提交插入。它们临时应用于数据库,使用预写日志(PostgreSQL、InnoDB、甲骨文)和复杂的多版本并发控制(MVCC)来确定每个事务客户端可以看到的数据库的状态。一个非常有趣的话题是:-)。
  3. UserTransaction已在当前线程中注册。资源(即数据库或消息传递服务)在UserTransaction中登记。这通常只有在使用分布式事务(XA事务,2PC)时才有必要。

我建议好好阅读一下SQL (例如头第一SQL),并查看Java 6教程

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16938978

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档