使用JOTM实现分布式事务的例子
发布时间:2009/4/18 11:55:07 | 32 人感兴趣 | 0 人参与 | 评分:3
import java.sql.Connection;
import javax.transaction.TransactionManager;
import javax.transaction.UserTransaction;
import org.enhydra.jdbc.standard.StandardXADataSource;
import org.hsqldb.Server;
import org.objectweb.jotm.Jotm;
import org.springframework.jdbc.core.JdbcTemplate;
public class XADataSourceTest {
public static void main(String[] args) throws Exception {
startDataBase();
//创建JTA的UserTransaction和TransactionManager。
//下面会使用UserTransaction进行事务的提交和回滚。
//TransactionManager用来管理事务源。
Jotm jotm = new Jotm(true, false);
TransactionManager transactionManager = jotm.getTransactionManager();
UserTransaction utx = jotm.getUserTransaction();
//创建一个分布式数据源 XADataSource
StandardXADataSource dataSource1 = new StandardXADataSource();
dataSource1.setDriverName("org.hsqldb.jdbcDriver");
dataSource1.setUser("sa");
dataSource1.setUrl("jdbc:hsqldb:testdb1");
//将该数据源加入到TransactionManager管理范围内
dataSource1.setTransactionManager(transactionManager);
StandardXADataSource dataSource2 = new StandardXADataSource();
dataSource2.setDriverName("org.hsqldb.jdbcDriver");
dataSource2.setUser("sa");
dataSource2.setUrl("jdbc:hsqldb:testdb2");
dataSource2.setTransactionManager(transactionManager);
//得到两个分布式Connection
Connection cn1 = dataSource1.getXAConnection().getConnection();
Connection cn2 = dataSource2.getXAConnection().getConnection();
try{
cn1.createStatement().execute("DROP TABLE table1");
cn2.createStatement().execute("DROP TABLE table2");
}catch(Exception e){}
cn1.createStatement().execute("CREATE TABLE table1(id int primary key, money int)");
cn2.createStatement().execute("CREATE TABLE table2(id int primary key, money int)");
//插入初始数据。
cn1.createStatement().execute("INSERT INTO table1 VALUES(1, 50)");
cn2.createStatement().execute("INSERT INTO table2 VALUES(1, 50)");
utx.begin();
try{
cn1.createStatement().execute("UPDATE table1 SET money=money-10 WHERE id=1");
cn2.createStatement().execute("UPDATE table2 SET money=money+10 WHERE id=1");
//模拟抛出一个业务异常
int a = 1 / 0;
utx.commit();
}catch(Exception e) {
utx.rollback();
}
System.out.println(new JdbcTemplate(dataSource1).queryForInt("SELECT money FROM table1 WHERE id=1"));
System.out.println(new JdbcTemplate(dataSource2).queryForInt("SELECT money FROM table2 WHERE id=1"));
}
//启动HSQL,其中有两个数据库testdb1和testdb2。
private static void startDataBase() {
Server.main(new String[]{"-database.0", "hsqldb/testdb1", "-dbname.0", "testdb1", "-database.1", "hsqldb/testdb2", "-dbname.1", "testdb2"});
}
}
运行结果为:
50
50
说明事务回滚了。
分享到:
相关推荐
这篇博客文章“使用JOTM实现分布式事务管理(多数据源)”将深入探讨如何利用JOTM来处理复杂的分布式环境中的事务。 首先,理解JTA是至关重要的。JTA是Java平台的标准,定义了API,使得应用开发者可以控制跨数据库、...
本文详细介绍了如何使用 JOTM 来管理跨多个数据源的分布式事务。通过合理的配置和编码实践,我们可以轻松地实现在不同数据源间保持事务一致性的目标。此外,还介绍了如何使用 Spring 的 `@Transactional` 注解简化...
本教程将深入探讨如何使用Spring框架、Java Transaction API (JTA) 和 Java Open Transaction Manager (JOTM) 来实现这样的分布式事务管理。 首先,我们来了解一下JTA。JTA是Java平台的标准事务API,它允许应用程序...
Spring框架作为一个广泛使用的Java应用程序开发框架,提供了多种支持事务管理的解决方案,其中包括集成JOTM(Java Open Transaction Manager)来处理分布式事务。本文将深入探讨Spring与JOTM结合使用的知识点,帮助...
例子虽小,可覆盖面广,设计spring载入.properties文件,spring配置jta和jotm分布式事务,设置数据源连接池,注解事务驱动。功能是在mysql上建立了两个数据库分别为dbone和dbtwo,在dbone里有表tb1,表中只有一个字段...
本项目“spring+jotm+ibatis+mysql实现JTA分布式事务”旨在利用这些技术来确保在分布式环境中的数据一致性。下面将详细介绍这个项目所涉及的知识点。 首先,Spring框架是Java开发中最常用的应用框架之一,它提供了...
在Spring中,当需要处理分布式事务时,可以使用PlatformTransactionManager接口的实现,例如JtaTransactionManager,它是基于JTA的。Spring会自动检测到`jotm.properties`配置文件,并自动配置JOTM作为事务管理器。`...
2. **配置JNDI**:在Tomcat的`server.xml`文件中添加一个全局JNDI资源,定义JOTM事务管理器。 3. **Spring配置**:在Spring的配置文件中,使用`jee:jta-data-source`或`jee:resource-ref`元素来引用之前创建的JNDI...
【使用JOTM实现跨数据库事务控制】 在分布式系统中,常常需要对多个数据库进行操作,确保数据的一致性。JOTM(Java Open Transaction Manager)是一个开源的Java事务管理器,它支持JTA(Java Transaction API),...
NULL 博文链接:https://jackyin5918.iteye.com/blog/1922379
【标题】"开源分布式事务管理Jtom"是一个关键的话题,主要关注的是在Java环境中...开发者可以通过阅读"jotm.pdf"来深入理解Jtom的工作原理和使用方法,将其有效地应用于实际项目中,以解决分布式环境下的事务处理问题。
- 配置JOTM事务管理器,通过`UserTransaction`接口进行事务的开始、提交和回滚。 - 使用`PlatformTransactionManager`接口配置Spring的声明式事务管理,设置事务传播属性、隔离级别和超时时间。 4. **iBatis配置*...
2.Spring+Jotm整合实现JTA分布式事务,应用场景如转账等,同一事务内完成db1用户加100元、db2用户减100元。 3.Spring+Junit4单元测试,优点:不会破坏数据库现场,等等。 (特别注意:Spring3.0里不在提供对jotm的...
而在Tomcat等轻量级服务器中,则需要借助外部框架如Jotm、Atomikos来实现分布式事务。 **特点**: - 实现相对简单,适用于单体应用中跨库操作的需求。 - 对性能影响较大,不适合高并发场景。 #### 四、本地消息表...
这个资源包包含了JOTM的核心组件以及相关的配置和示例文件,对于理解和使用JOTM进行分布式事务处理至关重要。 在Java应用程序中,事务管理是确保数据一致性、完整性和可靠性的关键部分。JTA作为Java平台的标准接口...
在Spring中,Java Transaction API (JTA) 和 JOTM(Java Open Transaction Manager)是实现分布式事务管理的关键组件。 **Spring 框架** Spring 是一个开源的Java平台,它提供了一个全面的编程和配置模型,用于现代...
标题中的“spring 3.0.5 + jotm 实现的的spring mvc 的例子”表明这是一个关于使用Spring 3.0.5版本与JOTM(Java Open Transaction Manager)结合构建Spring MVC应用的示例项目。这个项目可能旨在演示如何在Spring ...