Java Transaction服务

时间:2009-09-09 07:34:05

标签: java transactions

我想在我的Java应用程序中使用Java Transaction服务进行分布式事务管理。

我有3个不同的数据库,我必须使用3个不同的Connection对象连接到这些数据库。我想在3个数据库中的每一个中插入某些数据。 我的要求是应保持原子性。因此,要么将数据插入所有3个数据库中,要么不应将其插入任何数据库中。 我在网上搜索这种交易,我得到了Java Transaction服务。 我可以在这里找到它的API http://java.sun.com/products/jts/javadoc/index.html 但我仍然没有得到如何实现使用它的交易。有人可以向我提供Java Transaction Service示例代码或教程的链接。

先谢谢, Aniket Kedari

3 个答案:

答案 0 :(得分:3)

有些观点:

  1. XA并不是解决这个问题的唯一可能的解决方案,尽管它可能是最简单的因为它周围的工具的成熟度(搜索CAP定理和BASE - 基本上可用的软状态最终一致)。
  2. XA事务具有故障模式,您仍然可以在参与的数据库之间获得不一致的窗口。
  3. 您没有说明您使用的是哪个数据库 - 可能其中一个或所有数据库都不支持XA交易。
  4. 您不太可能希望在Java中使用原始JTS / JTA API,而是可以使用任何知名的Java应用程序服务器,因为它们包含事务管理器(使用JTS / JTA)。
  5. 因此,假设您决定使用Java Application Server,我建议使用Spring,EJB 3.0或类似的东西进行数据库交互,因为它们允许您执行声明式事务,这比自己手动编写事务逻辑要简单得多。

    这是Spring关于交易的文档的link

答案 1 :(得分:0)

您需要搜索的主题是XA事务。

您需要了解的内容包括:

http://www.javaworld.com/javaworld/jw-04-2007/jw-04-xa.html

  

分布式事务处理   系统旨在促进   跨越异构的事务,   a中的事务感知资源   分布式环境。运用   分布式交易   应用程序可以完成任务   从邮件中检索邮件   排队并更新一个或多个   单个事务中的数据库   单位坚持ACID(原子性,   一致性,隔离性和耐用性)   标准。本文概述了一些内容   分布式的用例   可以使用交易(XA)   应用程序如何实现   使用JTA进行事务处理   以及最好的品种   技术。主要关注点   使用Spring作为服务器框架和   如何整合各种JTA   无缝实现   企业级分布式   交易。

答案 2 :(得分:0)

对于使用单个数据库的简单情况,您不必担心这种情况,JDBC和数据库自身功能的组合就足够了。你的情况更复杂。需要有一个事务管理器,它负责管理跨数据库管理分布式事务的所有细节。所以你需要一个提供JTA apis的实现。

虽然你原则上可以自己开发,但这是一项非常特殊的工作,所以实际上你需要使用现有的实现。这是您使用Java EE应用程序服务器时获得的一件事。

因此,去获取众多可用的Java EE App服务器之一,有很好的零成本服务器。

WebSphere Community Edition是IBM的,JBOSS是一个广泛使用的服务器,Glassfish可以从Sun获得。

您选择哪一个,请确保将JDBC连接池用于JDBC连接(非常容易),我建议使用简单的会话Bean(在EJB 3中这也很容易)来标记您的事务。

总的来说,您需要编写大约4行新代码(或注释)。你现在拥有的和“宾果!”你正在进行2PC交易。获取App Server并学习如何使用这些设施有一点学习曲线,但如果您需要Java分布式事务,则需要基础结构服务和编程框架,因此某些级别的学习是不可避免的。