- 浏览: 919861 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (537)
- Java SE (114)
- Struts (18)
- Hibernate (25)
- Spring (3)
- Page_Tech (41)
- Others (87)
- Database (29)
- Server (24)
- OpenSource_Tools (15)
- IDE_Tool (22)
- Algorithm (28)
- Interview (22)
- Test (28)
- Hardware (1)
- Mainframe (25)
- Web application (4)
- Linux (3)
- PHP (17)
- Android (1)
- Perl (6)
- ubuntu (1)
- Java EE (9)
- Web Analysis (5)
- Node.js (2)
- javascript (2)
最新评论
-
一键注册:
request.getRequestURL()和request.getRequestURI() -
SuperCustomer:
...
SED的暂存空间和模式空间 -
juyo_ch:
讲得挺好理解的,学习了
java 死锁及解决 -
chinaalex:
最后一题答案正确,但是分析有误.按照如下过程,上一行为瓶,下一 ...
zz智力题 -
liaowuxukong:
多谢博主啦,弱弱的了解了一点。
C++/Java 实现多态的方法(C++)
JTA(Java Transaction API) 为 J2EE 平台提供了分布式事务服务。
要用 JTA 进行事务界定,应用程序要调用 javax.transaction.UserTransaction 接口中的方法。例如:
utx.begin();
// ...
DataSource ds = obtainXADataSource();
Connection conn = ds.getConnection();
pstmt = conn.prepareStatement("UPDATE MOVIES ...");
pstmt.setString(1, "Spinal Tap");
pstmt.executeUpdate();
// ...
utx.commit();
让我们来关注下面的话:
“用 JTA 界定事务,那么就需要有一个实现 javax.sql.XADataSource 、 javax.sql.XAConnection 和 javax.sql.XAResource 接口的 JDBC 驱动程序。一个实现了这些接口的驱动程序将可以参与 JTA 事务。一个 XADataSource 对象就是一个 XAConnection 对象的工厂。 XAConnection s 是参与 JTA 事务的 JDBC 连接。”
要使用JTA事务,必须使用XADataSource来产生数据库连接,产生的连接为一个XA连接。
XA连接(javax.sql.XAConnection)和非XA(java.sql.Connection)连接的区别在于:XA可以参与JTA的事务,而且不支持自动提交。
Note:
Oracle, Sybase, DB2, SQL Server等大型数据库才支持XA, 支持分布事务。
My SQL 连本地都支持不好,更别说分布事务了。
MySql 在5.0的版本后增加了对xa的支持
JTA方式的实现过程:
用XADataSource产生的XAConnection它扩展了一个getXAResource()方法,事务通过这个方法把它加入到事务容器中进行管理.对于调用者来说,根本看不到事务是如果管理的,你只要声明开始事务,告诉容器我下面的操作要求事务参与了,最后告诉事务说到这儿可以提交或回滚了,别的都是黑箱操作。
在使用JTA之前,你必须首先实现一个Xid类用来标识事务(在普通情况下这将由事务管理程序来处理)。Xid包含三个元素:formatID、gtrid(全局事务标识符)和bqual(分支修饰词标识符)。
下面的例子说明Xid的实现:
import javax.transaction.xa.*;
public class MyXid implements Xid
{
protected int formatId;
protected byte gtrid[];
protected byte bqual[];
public MyXid()
{
}
public MyXid(int formatId, byte gtrid[], byte bqual[])
{
this.formatId = formatId;
this.gtrid = gtrid;
this.bqual = bqual;
}
public int getFormatId()
{
return formatId;
}
public byte[] getBranchQualifier()
{
return bqual;
}
public byte[] getGlobalTransactionId()
{
return gtrid;
}
}
其次,你需要创建一个你要使用的数据库的数据源:
public DataSource getDataSource()
throws SQLException
{
SQLServerDataSource xaDS = new
com.merant.datadirect.jdbcx.sqlserver.SQLServerDataSource();
xaDS.setDataSourceName("SQLServer");
xaDS.setServerName("server");
xaDS.setPortNumber(1433);
xaDS.setSelectMethod("cursor");
return xaDS;
}
例1?这个例子是用“两步提交协议”来提交一个事务分支:
XADataSource xaDS;
XAConnection xaCon;
XAResource xaRes;
Xid xid;
Connection con;
Statement stmt;
int ret;
xaDS = getDataSource();
xaCon = xaDS.getXAConnection("jdbc_user", "jdbc_password");
xaRes = xaCon.getXAResource();
con = xaCon.getConnection();
stmt = con.createStatement();
xid = new MyXid(100, new byte[], new byte[]);
try {
xaRes.start(xid, XAResource.TMNOFLAGS);
stmt.executeUpdate("insert into test_table values (100)");
xaRes.end(xid, XAResource.TMSUCCESS);
ret = xaRes.prepare(xid);
if (ret == XAResource.XA_OK) {
xaRes.commit(xid, false);
}
}
catch (XAException e) {
e.printStackTrace();
}
finally {
stmt.close();
con.close();
xaCon.close();
}
当然,实际过程中,我们不需要写这些代码,这些代码是JTA最终的实现代码。
关于“两步提交协议”,可以参看下面的文章:
http://www.jspcn.net/htmlnews/11049371131251752.html
http://www.vermicelli.pasta.cs.uit.no/ipv6/students/andrer/doc/html/node18.html
选择最好的方式
用 JDBC API 进事务界定来构建 DAO 类的。这些 DAO 类可以总结如下:
事务界定代码嵌入在 DAO 类中。
DAO 类使用 JDBC API 进行事务界定。
调用者不能界定事务。
事务范围局限于单个 JDBC 连接。
JDBC 事务并不总是适合复杂的企业应用程序。如果您的事务要跨越多个 DAO 或者多个数据库,那么下列实现策略也许更合适:
事务用 JTA 界定。
事务界定代码从 DAO 中分离出来。
调用者负责界定事务。
DAO 加入一个全局事务。
JDBC 方式由于其简单性而具有吸引力,JTA 方式提供了更大的灵活性。您所选择的实现将取决于应用程序的特定需求。
XADataSource例子:
<?xml version="1.0" encoding="UTF-8"?>
<!-- ===================================================================== -->
<!-- -->
<!-- JBoss Server Configuration -->
<!-- Thanks to Horia Muntean <horia@bvb.ro> -->
<!-- ===================================================================== -->
<!-- $Id: db2-xa-ds.xml,v 1.1.2.1 2003/05/30 18:25:57 d_jencks Exp $ -->
<datasources>
<!--
XADatasource for DB2 V8.1 (app driver)
copy $db2_install_dir/java/db2java.zip into $jboss_install_dir/server/default/lib
-->
<xa-datasource>
<jndi-name>DB2XADS</jndi-name>
<xa-datasource-class>COM.ibm.db2.jdbc.DB2XADataSource</xa-datasource-class>
<xa-datasource-property name="DatabaseName">yout_database_name</xa-datasource-property>
<xa-datasource-property name="User">your_user</xa-datasource-property>
<xa-datasource-property name="Password">your_password</xa-datasource-property>
</xa-datasource>
</datasources>
发表评论
-
zz 如何安装两个MYSQL在同一机器
2012-08-01 23:04 1079说白了就一句话:一个自动安装服务,另一个手动安装服务! ... -
[zz] MySQL SQL语句练习
2012-04-10 14:43 1588MySQL SQL语句练习:1.建库建表--create d ... -
zz delete和truncate的区别
2012-03-08 16:18 724delete from aatruncate table aa ... -
【原创】MYSQL 安装时候的1045错误的解决方法
2012-03-04 21:02 809在安装的时候,出现这个问题网上的很多方法是卸载后重新 ... -
SQL删除重复记录,并只剩一条
2012-02-24 14:59 1356在几千条记录里,存在着些相同的记录,如何能用SQL语句,删 ... -
数据库驱动的载入有三种方法!
2012-01-11 15:58 9621. import java.sql.DriverM ... -
JDBC 完全总结
2012-01-11 14:46 921一、JDBC 简介 SUN 公司为了简化、统一数 ... -
oracle基础书籍推荐
2012-01-10 10:00 2744很多朋友要我帮忙推荐一下Oracle的入门书籍,能够了解Ora ... -
实例分析JDBC连接数据库代码
2011-11-15 10:37 855一、jdbc连接数据库代码速查表下面罗列了各种jdbc连接 ... -
mysql 5.0存储过程学习总结
2010-11-21 20:11 810mysql存储过程的创建,删除,调用及其他常用命令 ... -
MySQL的事务管理
2010-11-21 19:59 39141,MySQL的事务支持 MySQL的事务支持不是绑定在MyS ... -
同事今天下午的MYSQL性能优化分享
2010-10-18 23:22 795下午的分享,同事讲了 ... -
视图——ALGORITHM
2010-10-18 15:22 1372修改视图需要create view ... -
MySQL视图的应用
2010-10-18 15:09 1545MySQL视图的应用 视图也称虚表,包括执行某个查询返回的一 ... -
Mysql中IFNULL和IF函数
2010-10-15 17:01 8451. IFNULL(expr1,expr2) 2. 如果e ... -
数据库水平切分的实现原理解析---分库,分表,主从,集群,负载均衡器
2010-10-09 15:39 846第1章 引言 随着互联 ... -
SQL 日期函数
2010-10-08 17:44 1066SYSDATE与CURRENT_DATE区别 ... -
Oracle truncate table 与 delete tabel的区别
2010-09-03 17:05 857一、 1.delete产生rollback,如 ... -
JDBC的连接方式和驱动类型
2010-08-24 13:49 10091.连接数据库的方式:ODBC , JDBC ODBC:Op ... -
数据库原理—— 视图
2010-08-06 10:10 2419视图是一个虚拟表,其 ...
相关推荐
在这个“JAVA JTA jar-doc-spec”压缩包中,包含的是关于JTA的文档和规范文件。 JTA的核心概念包括: 1. **事务(Transaction)**:事务是一组操作,这些操作要么全部成功,要么全部失败,遵循ACID原则。ACID分别...
、JTA组件简介 1、JTA基本概念 JTA即Java-Transaction-API,JTA允许应用程序执行分布式事务处理,即在两个或多个网络计算机资源上访问并且更新数据。JDBC驱动程序对JTA的支持极大地增强了数据访问能力。 XA协议是...
Java Transaction API(JTA)是Java平台上的标准接口,用于管理分布式事务处理。jta.jar文件是这个API的实现库,它包含了一系列类和接口,允许应用程序在不同的数据存储系统间进行协调一致的事务操作。在Java应用中...
### 最新的JTA规范:Java事务API概览与解析 #### 核心概念与功能 **JTA(Java Transaction API)规范**是Java平台中处理分布式事务管理的关键组件,它定义了事务管理器与分布式系统中各个参与方之间的高级接口。...
### Java Transaction API (JTA) 使用手册与帮助文档解析 #### 概述 Java Transaction API(JTA)是Java平台中用于处理分布式事务的核心技术之一。JTA规范定义了事务管理器与分布式事务系统中各方参与者(应用、...
描述中提到了"jbarcode-0.2.8"和"jbarcodebean-1.2.0",这是关于Java条形码生成库JBarcode的不同版本,但主要关注点是JTA,因为"jta-1.0.1B"和"jta-1.1"再次被提及。这表明讨论的是用于处理分布式事务的Java技术。 ...
因此,确保Quartz的配置文件(如`quartz.properties`)中关于事务管理的部分是正确的至关重要。 在给定的压缩包文件`jta-1.3.1(1)`中,我们可以看到JTA的一个版本。JTA 1.3.1是JTA的较新版本,包含了处理分布式事务...
在文档中,你可以找到关于UserTransaction、TransactionManager、XAResource等关键接口的详细说明。这些接口是实现跨不同数据源的事务一致性的重要组成部分。UserTransaction允许应用程序开始、提交、回滚事务,而...
由于无法直接访问该链接,以下将提供一些关于Spring JTA的一般性知识。 1. **Spring JTA的配置**: - XML配置:在`<beans>`标签内定义`<tx:annotation-driven/>`,指定事务管理器为JTA类型,如`...
Spring框架在企业级Java应用中广泛用于实现事务管理,而JTA(Java Transaction API)是Java平台上的标准事务处理API,适用于分布式环境。本篇文章将深入探讨如何在Spring中配置JTA事务管理,以实现跨数据库和资源的...
在标题"quartz_jta_collections"中,我们看到与Quartz相关的三个关键组件:quartz-all-1.6.0.jar、jta-1.1.jar和commons-collections.jar。这些组件对于理解Quartz如何在分布式环境中运行以及它如何处理数据集合至关...
最近往javaEE项目中集成quartz2.2.1时,要用到jta的jar包,下载了最新版的jta-4.0.jar后,发现不能使用,于是又下载了1.1和1.3.1版本的jar包,比较了一下,发现4.0版本的jar包,包名跟以前版本的不一样。quartz2.2.1...
`geronimo-jta_1.1_spec-1.1.1.jar`是Apache Geronimo项目提供的一份关于Java Transaction API (JTA) 1.1规范的实现,它是Java EE平台的核心部分,用于管理分布式事务。本篇将详细解析这个jar包在Hibernate框架中的...
本话题主要聚焦于如何在Spring框架中结合Java Transaction API (JTA) 和 MyBatis 实现分布式事务管理。下面我们将详细探讨相关知识点。 1. **分布式事务**:在分布式系统中,事务处理跨越多个资源或服务,例如...
- **help-doc.html**:帮助文档,提供了关于如何使用和理解JTA 1.1的指南。 - **overview-tree.html**:包和类的层次结构,展示了JTA 1.1 API的组织结构。 - **overview-summary.html**:概述摘要,简要介绍了JTA...
EJB中的JTA与JTS例子代码,JTA是一种高层的,与实现无关的,与协议无关的J2ee API,应用程序和应用服务器可以使用JTA来访问事务。JTS则规定了支持JTA的事务管理器的实现规范,在高层API之下实现了OMG Object ...
本资源针对的是Spring Boot动态多数据源和JTA(Java Transaction API)分布式事务的实现,对于初学者来说非常实用。下面我们将深入探讨这些知识点。 首先,让我们了解一下Spring Boot的多数据源。在许多业务场景下...
Java JTA,全称为Java Transaction API,是Java平台上的事务处理标准,用于管理跨系统或跨资源的事务。它提供了一种统一的方式来控制应用程序中的事务,使得开发者可以在不同的数据库、消息队列等资源之间进行协调,...
本项目“springboot+jta+atomikos”旨在利用Spring Boot框架、Java Transaction API (JTA) 和 Atomikos 这一开源事务管理器来实现分布式事务的统一管理。下面将详细阐述这三个关键组件以及它们如何协同工作。 **...
### JTA 1.2 规范详解 #### 一、引言 Java Transaction API (JTA) 是一种用于管理分布式事务的高级接口规范。它定义了事务管理器与分布式事务系统中的各参与方(应用、资源管理器及应用服务器)之间的交互方式。JTA...