- 浏览: 1064771 次
- 性别:
- 来自: 长沙
文章分类
- 全部博客 (639)
- 服务器配置篇 (58)
- hibernate篇 (14)
- spring篇 (33)
- struts篇 (28)
- JS篇 (46)
- 其他技术篇 (46)
- 数据库集群配置 (6)
- JAVA基础相关 (48)
- 分布式框架HadHoop的应用 (2)
- FLEX篇 (8)
- SQLSERVER技术 (32)
- Android学习 (13)
- amchart学习笔记 (1)
- openfire+smark搭建即时通讯 (9)
- Linux学习 (18)
- Oracle数据库 (15)
- 网站优化技术 (12)
- mysql数据库 (2)
- 项目学习总结 (18)
- 工具类(JAVA) (12)
- 工具类(JS) (2)
- 设计模式 (10)
- Lucene学习 (24)
- EJB3学习 (6)
- Sphinx搜索引擎 (3)
- 工作中用到的软件小工具 (5)
- .NET (49)
- JAVA 连接SQLSERVER2008步骤 (1)
- MongoDB (19)
- Android手机开发 (3)
- Maven (6)
- vue (9)
- Shiro (4)
- mybatis (3)
- netty框架 (1)
- SpringCloud (3)
- spring-cloud (7)
- Git (1)
- dubbo (2)
- springboot (13)
- rocketmq (1)
- git学习 (2)
- kafka服务器 (2)
- linux (10)
- WEB系统辅助项目 (1)
- jenkins (2)
- docker (4)
- influxdb (3)
- python (2)
- nginx (1)
最新评论
-
jiangfuofu555:
这样数据量大,效率怎么样?
sqlserver 实现分页的前台代码 以及后台的sqlserver语句 -
w156445045:
博主请问下,如何做到实时的刷新呢,
另外我后台是Java 谢谢 ...
web 版本的汽车仪表盘,非常好看。还有各种图形 -
jackyin5918:
<transportConnector name=&qu ...
ActiveMQ的activemq.xml详细配置讲解 -
握着橄榄枝的人:
你这个不是spring1.x的吧
spring1.x使用AOP实例 -
xiaophai:
全乱套了!
openfire+spark搭建完美的及时通讯
测试环境:mysql-5.5.14,Oracle 10g Express,ow2-jotm-dist-2.1.9,JDK7,Win7
1,背景说明:两个数据库中分别有一张用户表,表结构设计类似,如下:
MySQL中:
CREATE TABLE TUSER ( id INT, name VARCHAR(10) NOT NULL, PRIMARY KEY (id) )
Oracle中:
2,新建Java Project,将两个数据库的驱动以及jotm中lib目录下的相关jar文件加入buildpath中
3,编写实体类
- package com.tanlan.jta.entity;
- public class User {
- private int id;
- private String name;
- public int getId() {
- return id;
- }
- public void setId(int id) {
- this.id = id;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- }
package com.tanlan.jta.entity; public class User { private int id; private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
4,编写DAO
- package com.tanlan.jta.dao;
- import java.sql.Connection;
- import java.sql.PreparedStatement;
- import java.sql.SQLException;
- import com.tanlan.jta.entity.User;
- public class UserDAO {
- /**
- * 增加用户信息到MySQL数据库中
- *
- * @param user
- * @param connection
- * @throws SQLException
- */
- public void addUserToMySQL(User user, Connection connection)
- throws SQLException {
- String sql = "insert into TUser values(?,?)";
- PreparedStatement pstmt = connection.prepareStatement(sql);
- pstmt.setInt(1, user.getId());
- pstmt.setString(2, user.getName());
- pstmt.execute();
- }
- /**
- * 增加用户信息到Oracle数据库中
- *
- * @param user
- * @param connection
- * @throws SQLException
- */
- public void addUserToOracle(User user, Connection connection)
- throws SQLException {
- String sql = "insert into TUser values(?,?)";
- PreparedStatement pstmt = connection.prepareStatement(sql);
- pstmt.setInt(1, user.getId());
- pstmt.setString(2, user.getName());
- pstmt.execute();
- }
- }
package com.tanlan.jta.dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import com.tanlan.jta.entity.User; public class UserDAO { /** * 增加用户信息到MySQL数据库中 * * @param user * @param connection * @throws SQLException */ public void addUserToMySQL(User user, Connection connection) throws SQLException { String sql = "insert into TUser values(?,?)"; PreparedStatement pstmt = connection.prepareStatement(sql); pstmt.setInt(1, user.getId()); pstmt.setString(2, user.getName()); pstmt.execute(); } /** * 增加用户信息到Oracle数据库中 * * @param user * @param connection * @throws SQLException */ public void addUserToOracle(User user, Connection connection) throws SQLException { String sql = "insert into TUser values(?,?)"; PreparedStatement pstmt = connection.prepareStatement(sql); pstmt.setInt(1, user.getId()); pstmt.setString(2, user.getName()); pstmt.execute(); } }
5,编写帮助类,实现启动与停止事务管理服务,以及取得数据库连接:
- package com.tanlan.jta.dao;
- import java.sql.Connection;
- import javax.naming.NamingException;
- import javax.sql.XAConnection;
- import javax.transaction.UserTransaction;
- import org.enhydra.jdbc.standard.StandardXADataSource;
- import org.objectweb.jotm.Jotm;
- import org.objectweb.transaction.jta.TMService;
- public class JotmHelper {
- private TMService jotm;
- private UserTransaction userTransaction;
- /**
- * 启动事务管理服务
- */
- public void startTMService() {
- try {
- jotm = new Jotm(true, false);
- userTransaction = jotm.getUserTransaction();
- } catch (NamingException e1) {
- e1.printStackTrace();
- }
- }
- /**
- * 取得数据库连接
- *
- * @param db
- * @return
- * @throws Exception
- */
- public Connection getConnection(String db) throws Exception {
- StandardXADataSource xads = new StandardXADataSource();
- XAConnection xaconn = null;
- if ("mysql".equals(db)) {
- xads.setDriverName("com.mysql.jdbc.Driver");
- xads.setUrl("jdbc:mysql://localhost/test");
- xads.setTransactionManager(jotm.getTransactionManager());
- xaconn = xads.getXAConnection("root", "root");
- } else if ("oracle".equals(db)) {
- xads.setDriverName("oracle.jdbc.driver.OracleDriver");
- xads.setUrl("jdbc:oracle:thin:@localhost:1521:XE");
- xads.setTransactionManager(jotm.getTransactionManager());
- xaconn = xads.getXAConnection("tanlan", "tanlan");
- } else {
- }
- return xaconn.getConnection();
- }
- public void begin() {
- try {
- userTransaction.begin();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- public void commit() {
- try {
- userTransaction.commit();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- public void rollback() {
- try {
- userTransaction.rollback();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- /**
- * 停止事务管理服务
- */
- public void stopTMService() {
- jotm.stop();
- jotm = null;
- }
- }
package com.tanlan.jta.dao; import java.sql.Connection; import javax.naming.NamingException; import javax.sql.XAConnection; import javax.transaction.UserTransaction; import org.enhydra.jdbc.standard.StandardXADataSource; import org.objectweb.jotm.Jotm; import org.objectweb.transaction.jta.TMService; public class JotmHelper { private TMService jotm; private UserTransaction userTransaction; /** * 启动事务管理服务 */ public void startTMService() { try { jotm = new Jotm(true, false); userTransaction = jotm.getUserTransaction(); } catch (NamingException e1) { e1.printStackTrace(); } } /** * 取得数据库连接 * * @param db * @return * @throws Exception */ public Connection getConnection(String db) throws Exception { StandardXADataSource xads = new StandardXADataSource(); XAConnection xaconn = null; if ("mysql".equals(db)) { xads.setDriverName("com.mysql.jdbc.Driver"); xads.setUrl("jdbc:mysql://localhost/test"); xads.setTransactionManager(jotm.getTransactionManager()); xaconn = xads.getXAConnection("root", "root"); } else if ("oracle".equals(db)) { xads.setDriverName("oracle.jdbc.driver.OracleDriver"); xads.setUrl("jdbc:oracle:thin:@localhost:1521:XE"); xads.setTransactionManager(jotm.getTransactionManager()); xaconn = xads.getXAConnection("tanlan", "tanlan"); } else { } return xaconn.getConnection(); } public void begin() { try { userTransaction.begin(); } catch (Exception e) { e.printStackTrace(); } } public void commit() { try { userTransaction.commit(); } catch (Exception e) { e.printStackTrace(); } } public void rollback() { try { userTransaction.rollback(); } catch (Exception e) { e.printStackTrace(); } } /** * 停止事务管理服务 */ public void stopTMService() { jotm.stop(); jotm = null; } }
6,测试代码
- package com.tanlan.jta.test;
- import java.sql.Connection;
- import com.tanlan.jta.dao.JotmHelper;
- import com.tanlan.jta.dao.UserDAO;
- import com.tanlan.jta.entity.User;
- public class TestUSer {
- public static void main(String[] args) {
- User user=new User();
- user.setId(300);
- user.setName("a122456");
- UserDAO dao = new UserDAO();
- JotmHelper helper = new JotmHelper();
- try {
- helper.startTMService();
- Connection mysqlConn = helper.getConnection("mysql");
- Connection oracleConn = helper.getConnection("oracle");
- helper.begin();
- dao.addUserToMySQL(user, mysqlConn);
- dao.addUserToOracle(user, oracleConn);
- helper.commit();
- } catch (Exception e) {
- helper.rollback();
- e.printStackTrace();
- } finally {
- helper.stopTMService();
- }
- }
- }
package com.tanlan.jta.test; import java.sql.Connection; import com.tanlan.jta.dao.JotmHelper; import com.tanlan.jta.dao.UserDAO; import com.tanlan.jta.entity.User; public class TestUSer { public static void main(String[] args) { User user=new User(); user.setId(300); user.setName("a122456"); UserDAO dao = new UserDAO(); JotmHelper helper = new JotmHelper(); try { helper.startTMService(); Connection mysqlConn = helper.getConnection("mysql"); Connection oracleConn = helper.getConnection("oracle"); helper.begin(); dao.addUserToMySQL(user, mysqlConn); dao.addUserToOracle(user, oracleConn); helper.commit(); } catch (Exception e) { helper.rollback(); e.printStackTrace(); } finally { helper.stopTMService(); } } }经过测试,这种方法能够较好的控制对两个数据库操作数据的事务。
发表评论
-
非关系型数据库
2011-09-29 22:53 984随着互联网web2.0网站的兴起,非关系型的数据库现在成了一个 ... -
部署SQLSERVER2005群集
2011-02-21 08:46 1000部署SQLSERVER2005群集 -
Squoia的后台管理
2008-11-19 17:12 1123虚拟数据库管理界面: 1. 在你的虚拟数据库安装目录中(我的 ... -
在做数据库集群的时候碰到的问题(连载一)
2008-11-19 17:03 1155[Sequoia] Not Starting VDB (Not ... -
Squoia集群数据库的安装
2008-11-19 16:57 1595Squoia是C-JDBC的一个子项 ...
相关推荐
本文将深入探讨如何使用JOTM(Java Open Transaction Manager)来实现这样的功能,尤其关注在多数据源环境下的事务协调。 JOTM是Java世界里一个开源的事务管理器,遵循JTA(Java Transaction API)规范,提供了...
然后,你可以使用`HibernateTransactionManager`,但要注意将其与JOTM的事务管理器配合使用,以确保跨数据源的事务一致性。 总结来说,Spring结合JOTM和Hibernate进行多数据源事务管理,主要涉及以下几个步骤:配置...
在集成Spring+iBatis+JOTM的环境中,Spring主要负责事务策略的配置和管理,iBatis则作为持久层框架,负责SQL的执行,而JOTM作为事务管理器,确保跨数据库的事务一致性。 1. **环境搭建** - 首先,确保安装了JDK ...
在配置中指定`transaction.manager_lookup_class`,可以使其与JTA事务管理器协同工作,实现跨数据库的事务控制。 综上所述,跨多个数据库操作和同时连接多个数据库的能力是企业级应用不可或缺的。通过Spring的事务...
本教程将深入探讨如何使用Spring框架、Java Transaction API (JTA) 和 Java Open Transaction Manager (JOTM) 来实现这样的分布式事务管理。 首先,我们来了解一下JTA。JTA是Java平台的标准事务API,它允许应用程序...
JOTM支持X/Open XA规范,允许管理跨越多个资源(如数据库和消息队列)的事务。在Tomcat中配置JOTM,可以提供更高级别的事务控制,这对于处理复杂的Web应用程序是至关重要的。 接下来,我们来看`carol.properties`...
JOTM支持XAResource,使得它可以与其他数据库系统、消息队列等资源适配器协同工作,实现跨多个资源的分布式事务。 **3. 集成Spring与JOTM:** 要将JOTM集成到Spring中,首先需要在项目中引入JOTM的依赖。通常,这...
在JTA分布式事务的场景下,iBATIS作为数据访问层,参与到事务处理中,其执行的SQL操作会受到JTA的控制,确保在事务中的所有数据库操作要么全部成功,要么全部回滚。 MySQL是广泛使用的开源关系型数据库管理系统,它...
这个项目可能旨在演示如何在Spring MVC环境中配置和管理事务,特别是使用JOTM作为外部事务管理器来处理数据库操作。 **Spring MVC框架**: Spring MVC是Spring框架的一个模块,专门用于构建Web应用程序。它提供了...
JOTM,全称Java Open Transaction Manager,是一个开源的、完全符合JTA(Java Transaction API)规范的事务管理器。...理解和掌握如何使用JOTM,能够帮助开发者在面临复杂事务场景时,更好地设计和实现可靠的系统。
本文将深入探讨如何在Tomcat应用服务器上集成JTA,并使用JOTM(Java Open Transaction Manager)或Atomikos作为事务管理器来实现分布式事务。 首先,我们需要理解JTA的核心概念。JTA是Java EE平台的一部分,提供了...
这个项目旨在展示如何在Java应用程序中有效地管理和协调数据库事务,特别是对于分布式事务处理。 Spring是一个广泛使用的轻量级应用框架,它提供了一个全面的基础架构,支持面向切面编程(AOP)和依赖注入(DI),...
5. **XAResource接口**:JOTM与数据库或者其他资源管理系统交互是通过实现XAResource接口来完成的。理解这个接口的实现,有助于你在自己的项目中集成其他资源。 6. **性能优化**:JOTM源码还包含了各种性能优化措施...
1. **分布式事务管理**:JOTM能够协调跨越多个资源(如数据库、消息队列等)的事务,确保数据的一致性和完整性。它支持两阶段提交(2PC)协议,这是分布式事务处理中的标准模式。 2. **JTA兼容**:遵循Java EE的JTA...
本文将深入探讨如何使用Spring、Java Transaction API (JTA) 和 Java Object Transaction Manager (JOTM) 实现多数据源更新的解决方案。 首先,让我们理解什么是多数据源。在传统的单数据源环境中,应用程序通常...