`
make19830723
  • 浏览: 34472 次
  • 性别: Icon_minigender_1
  • 来自: 常州
社区版块
存档分类
最新评论

mysql使用JTA实例

阅读更多
JTA(Java Transaction API) 为 J2EE 平台提供了分布式事务服务。
测试使用的jdk中自带了javax.transaction和javax.transaction.xa
参考http://blog.csdn.net/turkeyzhou/archive/2008/10/13/3071683.aspx 该文章后自己修改的程序的测试

import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.sql.XAConnection;
import javax.sql.XADataSource;
import javax.transaction.xa.XAException;
import javax.transaction.xa.XAResource;
import javax.transaction.xa.Xid;

import com.mysql.jdbc.jdbc2.optional.MysqlXADataSource;

public class JTATest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd");
		XADataSource xaDs1=JTATest.getDataSource("jdbc:mysql://192.168.*.*:3306/mx2", "root", "root");
		XAConnection xaCon1=null;
		XAResource xaRes1 = null;
		Connection conn1=null;
		Statement stmt1 =null;
		
		
		XADataSource xaDs2=JTATest.getDataSource("jdbc:mysql://192.168.*.*:3306/mx1", "root", "root");
		XAConnection xaCon2=null;
		XAResource xaRes2 = null;
		Connection conn2=null;
		Statement stmt2 =null;
		
		int ret1=0;
		int ret2=0;
		
		Xid xid1=new MyXid(100,new byte[]{0x01}, new byte[]{0x02});
		Xid xid2=new MyXid(100, new byte[]{0x01}, new byte[]{0x03});
		try {			
			xaCon1 = JTATest.getXAConnetion(xaDs1);
			conn1= JTATest.getConnection(xaCon1);
			stmt1=conn1.createStatement();
			xaRes1=xaCon1.getXAResource();
			
			xaCon2 = JTATest.getXAConnetion(xaDs2);
			conn2= JTATest.getConnection(xaCon2);
			stmt2=conn2.createStatement();
			xaRes2=xaCon2.getXAResource();
			
			xaRes1.start(xid1, XAResource.TMNOFLAGS); 
			stmt1.execute("INSERT INTO mx_user (uid,name,add_time) VALUES (148,'aaabbb','"+dateFormat.format(new Date())+"')");
			xaRes1.end(xid1, XAResource.TMSUCCESS);
			
			if (xaRes2.isSameRM(xaRes1)) {
				xaRes2.start(xid1, XAResource.TMNOFLAGS); 
				stmt2.execute("INSERT INTO mx_user (uid,name,add_time) VALUES (148,'aaabbb','"+dateFormat.format(new Date())+"')");
				xaRes2.end(xid1, XAResource.TMSUCCESS);
			}else{
				
				xaRes2.start(xid2, XAResource.TMNOFLAGS); 
				stmt2.execute("INSERT INTO mx_user (uid,name,add_time) VALUES ('148','aaabbb','"+dateFormat.format(new Date())+"')");
				xaRes2.end(xid2, XAResource.TMSUCCESS);
				ret1=xaRes2.prepare(xid2);
//				if (ret==XAResource.XA_OK) {
//					xaRes2.commit(xid2, false);
//				}
			}
			ret2 = xaRes1.prepare(xid1); 
			if (ret1 == XAResource.XA_OK&&ret2==XAResource.XA_OK) { 
			 //xaRes1.commit(xid1, false); 			 
			 xaRes1.rollback(xid1);		
			 if (xaRes2.isSameRM(xaRes1)) {
				xaRes2.rollback(xid1);
			 }else{
				 xaRes2.rollback(xid2);
			 }
			} 			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (XAException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	

	private static XADataSource getDataSource(String url,String user,String password) {
		// TODO Auto-generated method stub
		MysqlXADataSource dataSource = new MysqlXADataSource();
		dataSource.setUrl(url);
		dataSource.setUser(user);
		dataSource.setPassword(password);
		return dataSource;
	}	
	

	public static XAConnection getXAConnetion(XADataSource dataSource) {
		XAConnection XAConn = null;
		try {
			XAConn = dataSource.getXAConnection();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return XAConn;
	}

	public static Connection getConnection(XAConnection XAConn) {
		Connection conn = null;
		try {
			conn = XAConn.getConnection();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return conn;
	}

	public static void closeConnection(Connection conn) {
		try {
			conn.close();
		} catch (SQLException e) {
			System.out.println("连接关闭失败");
		}
	}

}




这里测试的是 如果两个操作都成功了就回滚, 实现了这样的功能。不过运用到实际程序中还需要更改。
分享到:
评论
1 楼 javaPrimary 2016-06-13  
com.mysql.jdbc.jdbc2.optional.MysqlXADataSource 这个类在哪个jar包中?

相关推荐

    jbpm连接mysql数据库的实例以及问题解决方案

    JBPM需要一个持久化存储来保存工作流实例、任务、变量等信息,而MySQL是一个常用的数据库管理系统,适合这种需求。在配置JBPM与MySQL的连接时,你需要在jbpm-datasources.xml文件中设置数据源。确保以下几点: 1. *...

    java实现JTA简单例子

    在描述中提到了`mysql-connector-java`,这意味着我们将使用MySQL数据库,并且其JDBC驱动支持JTA。 在实际操作中,一个简单的JTA示例可能如下: 1. 首先,通过`UserTransaction`开始一个事务。 2. 然后,获取到`XA...

    spring+hibernate+jta demo

    通过XML配置文件或注解方式,我们可以声明组件间的依赖,Spring会自动进行实例化和装配。同时,Spring的AOP功能可以方便地实现切面逻辑,如事务管理。 二、Hibernate框架 Hibernate是一个流行的ORM工具,它允许...

    jtademo:基于btm实现的jta对两个mysql数据源的demo项目

    本项目"jtademo"就是这样一个示例,它演示了如何利用Bitronix Transaction Manager (BTM)在两个MySQL数据源之间实现JTA事务。 1. **JTA简介** JTA是Java EE平台的一部分,提供了一种标准的方式来管理分布式事务。...

    hibernate需要的jar包,mysql驱动包

    为了使用Hibernate连接到MySQL数据库,我们需要以下几类JAR包: 1. Hibernate核心库:这是Hibernate的基础,包含了ORM的主要功能,如实体管理、会话接口、查询语言等。文件名通常为`hibernate-core.jar`。 2. ...

    jbpm开发实例详解

    为了存储jbpm运行所需的数据,你需要在MySQL数据库中创建一个名为jbpmdb的数据库,并运行jbpm.mysql.create.sql脚本来创建所需的表结构。此外,还需要创建一个表来存储业务数据,例如请假申请表(ask_for_leave),...

    Hibernate5 + Mysql实现Demo源码

    本Demo基于Hibernate5,结合MySQL数据库,提供了完整的源码实例,帮助开发者快速理解和应用Hibernate。以下将详细介绍Hibernate5和MySQL的集成过程以及核心概念。 1. **Hibernate5概述** Hibernate5是Hibernate ...

    Hibernate+Mysql

    【Hibernate+Mysql】是一个经典的Java开发中的持久化框架与数据库结合的应用实例,主要涉及到的技术栈包括Maven作为项目构建工具,Hibernate作为对象关系映射(ORM)框架,以及MySQL作为常用的开源关系型数据库。...

    分布式事务实践 解决数据一致性

    还有XA以及两阶段提交,并通过实例演示了使用JTA,通过两阶段提交,实现多数据源的事务实现。... 4-1 Spring事务机制_基本接口 4-2 Spring事务机制_实现 4-3 Jpa事务实例 4-4 Jms事务原理 4-5 Jms-session事务实例 4...

    J2EE专业项目实例开发

    6. **数据库集成**:通常,J2EE项目会涉及与关系型数据库如MySQL、Oracle的交互,使用JDBC或ORM框架如Hibernate进行数据访问。 7. **Web服务**:SOAP或RESTful风格的Web服务可以扩展J2EE应用,使其能够与其他系统...

    数据同步spingboot连接多个mysql数据库.zip

    - 数据库复制:可以使用MySQL的主从复制、双活或者基于中间件如GoldenGate、Maxwell等实现数据的实时同步。 - 异步任务:使用SpringTask或者消息队列如RabbitMQ、Kafka,将同步任务异步化,保证主业务的高并发性能...

    ejb3整合Struts1.x实例

    首先,`mysql-ds.xml`文件通常用于配置数据源,这表明我们的应用将使用MySQL 5.x作为后端数据库。在Java EE应用中,数据源配置通常在`context.xml`或`web.xml`中,通过JNDI(Java Naming and Directory Interface)...

    hibernate-orm实例

    - **事务管理**: 支持JTA和JDBC事务管理。 ### 2. Hibernate 配置 在开始使用Hibernate之前,我们需要配置`hibernate.cfg.xml`文件。这个文件包含了数据库连接信息、方言设置、缓存配置等关键信息。例如: ```xml...

    开发ejb3的第一个实例

    在本实例中,我们将使用MyEclipse6.0作为集成开发环境,以及JBoss3.2.1作为应用服务器来创建一个基本的EJB3入门项目。 **1. 开发环境准备** 首先,确保安装了JDK 1.5或更高版本,因为EJB3需要Java 5以上的支持。在...

    hibernate实例

    Hibernate支持多种数据库,包括MySQL、Oracle、PostgreSQL等,并提供了丰富的API和查询语言HQL(Hibernate Query Language)。 **2. Hibernate配置** 在开始hibernate实例之前,我们需要进行一些基本的配置。这通常...

    Mysql 和javaee 中文说明文档

    这份文档将结合实例,深入浅出地解释这些概念,帮助读者快速掌握MySQL和JavaEE的核心技能。无论是初学者还是有经验的开发者,都能从中受益,提升自己的技术水平。通过API说明文档,你将能更好地理解和应用这些技术,...

    5.0javaEE_原生Servlet_MySql塞北村镇旅游网站设计.zip

    标题中的“5.0javaEE_原生Servlet_MySql塞北村镇旅游网站设计”表明这是一个基于Java EE技术栈,使用原始Servlet实现的Web应用程序,主要用于塞北村镇的旅游信息发布和管理。该程序可能集成了MySQL数据库来存储旅游...

    Java 集成开发实例精解

    在《Java 集成开发实例精解》中,我们主要探讨的是如何使用Java语言进行高效、稳定且灵活的集成开发。这本书的核心是通过具体的实例来解析Java在实际项目中的应用,帮助开发者深入理解Java集成开发的关键技术和最佳...

    atomikos-Spring-Mybatis(Oracle,Mysql)

    Atomikos作为JTA(Java Transaction API)的实现,可以与Spring的声明式事务管理相结合,提供分布式事务的解决方案。 Mybatis是一款轻量级的持久层框架,它简化了SQL与Java对象之间的映射过程。Mybatis并不直接支持...

    利用Myeclipse6和jboss开发EJB3入门实例

    ### 利用Myeclipse 6与JBoss开发EJB3入门实例详解 #### 一、概述 本文将详细介绍如何使用Myeclipse 6和JBoss来开发一个EJB3入门级的应用程序。通过本教程,您将学习到EJB3的基本概念、所需开发工具的配置、以及...

Global site tag (gtag.js) - Google Analytics