先写个题目 前段时间看了看这些标准 其实就是定制的一系列的接口规则,然后那些框架其实就是利用这些来写,所以 这些貌似是基础中的基础 这段时间 来组织组织这些,呼呼 最近在看restlet,这就涉及到javaee中的JAX-WS JAX-RS 等等规范,不过 我还是想从 JTA 事务开始学起。。。。呼呼 这个是开篇,后续更新
说起事务,总是联想到Spring aop,或者就是@transaction标签,再或者就是各种框架的集成
今天从基本的开始说起,
首先是最基本的 JDBC 编程,一个数据源,我们可以用最基本的
conn.setAutoCommit(false)来开启 事务,最后调用conn.commit(); 来提交事务就可以了.
这是在一个数据源的情况下,如果我这边有两个数据库,从从不同的数据库来操作要保证事务呢
这时候就要用到J2ee标准中的 JTA 和 JTS 事务编程接口和事务服务
先不说理论,看看怎么用
userTx = (UserTransaction)getContext().lookup(" javax.transaction.UserTransaction"); // 从数据库 A 中取得数据库连接 connA = getDataSourceA().getConnection(); // 从数据库 B 中取得数据库连接 connB = getDataSourceB().getConnection(); // 启动事务 userTx.begin();
1.UserTransaction是 面向开发人员的接口
2.我们下面来看下JNDI怎么获取这个分布式事务管理器
//1.由于tomcat不支持JTA 所以 要引入JOTM来支持,这个搜一搜就好了,很多,这样,我们就配置完tomcat //和JTA 了。然后基本代码就是从JNDI中找到JTA 然后基本的 begin commit 就行了。。这是基本的 ,明天看//下String+JTA的整合
2 多说两句
上面写的UserTranscation 是用户接口,那当我们调用UserTranscation的时候,发生了什么事情呢
,这里就要说到JTA标准中的 三个接口 (1)userTranscation (2)TranscationManager(3) Transcation
简单的说 userTranscation调用begin的时候 然后调用transcarionManager,然后呢,TranscationManage里面有个threadlocal,这个就很明了了,每个线程都有自己的manager manager再调用Transcation的begin。好吧 其实就是这样,改天看看源码把这个贴上来。
------------------------------------我是分界线-----------------------------------------------
纸上谈兵终究是要一败涂地的
最新的Spring 3.0 已经不支持Jtom 所以上面的我就注释了 下面就直接看代码吧
<!-- 配置JTA 数据源 -->
<!-- 配置atomikos的事务管理器 -->
<bean id="atomikosTransactionManager" class="com.atomikos.icatch.jta.UserTransactionManager"
init-method="init" destroy-method="close">
<property name="forceShutdown" value="true" />
</bean>
<bean id="atomikosUserTransaction" class="com.atomikos.icatch.jta.UserTransactionImp">
<property name="transactionTimeout" value="300" />
</bean>
<!-- spring的JTA事务管理器 -->
<bean id="springTransactionManager"
class="org.springframework.transaction.jta.JtaTransactionManager">
<property name="transactionManager" ref="atomikosTransactionManager" />
<property name="userTransaction" ref="atomikosUserTransaction" />
</bean>
MAVEN 引入
<dependency>
<groupId>com.atomikos</groupId>
<artifactId>transactions-jta</artifactId>
<version>3.7.0</version>
</dependency>
再加上上面的配置 就能得到 一个事物管理对象了
@Autowired
JtaTransactionManager springTransactionManager;
简单看了下atomikos 的源码 思想和上面说的差不多 三个接口 userTranscation TranscationManager Transcation
不过 他们这里的 TranscationManager是自己实现了一个线程安全的方式 类似于一个threadlocal 不过是自己实现的BaseTransactionManager,其中就有hashtable 来分配线程
TransactionImp 这个就是真正执行事务的那个类了 具体的没怎么看了 具体实现还是比较复杂的。。。不过 现在我们已经得到了 UserTranscation这个开发人员接口了 接下来 就用就ok了
---------------
最后补充下 分布式事务可以再很多场合下使用,比如 JMS 中 来控制事务的完整性。。
接下来 我们就来看看JMS规范
相关推荐
JavaEE5学习笔记01-JTA和数据库事务.
jOOQ JavaEE 示例 此示例显示了 JavaEE 7 兼容应用服务器上 jOOQ 的基本配置(已使用 Wildfly 8.x 进行测试)。 该示例关注几个元素,在实现非基于 JPA 的“数据库... 在此示例中,我们使用@Transactional注释(自 JTA
第4章 利用JDBC和JTA访问 数据库和管理全局事务 178 4.1 JDBC和容器管理的数据源 179 4.1.1 JDBC概述 179 4.1.2 使用JDBC执行数据库访问 180 4.1.3 使用WebLogic服务器管理的 数据源 182 4.1.4 使用JBoss服务器管理...
10.1.3在hibernate中使用jta事务 210 10.1.4并发控制 211 10.2hibernate缓存 213 10.2.1缓存的工作原理 213 10.2.2应用一级缓存 214 10.2.3应用二级缓存 214 10.2.4应用第三方缓存 216 10.3项目实战——借还...
此过程具有一个JTA事务,该事务将“客户”,“预订”和“座位”数据保存到MySQL数据库,此Web应用程序的作者还设计并开发了该数据库,作为“软件开发”中的开放大学MSc计算(软件工程)模块的一部分。
例如,Spring能使用AOP提供声明性事务管理而不通过EJB容器,如果你仅仅需要与单个数据库打交道,甚至不需要一个JTA实现。 Spring为数据存取提供了一个一致的框架,不论是使用的是JDBC还是O/R mapping产品(如...
1.4.5 JTA/JTS(Java事务) 1.4.6 JNDI(Java命名和目录服务) 1.4.7 JavaMail(Java邮件服务) 1.4.8 RMI(远程方法调用) 1.4.9 JMS(Java消息服务) 1.4.10 JMX(Java分布式管理) 1.4.11 JACC(Java容器授权合同...
1.4.5 JTA/JTS(Java事务) 1.4.6 JNDI(Java命名和目录服务) 1.4.7 JavaMail(Java邮件服务) 1.4.8 RMI(远程方法调用) 1.4.9 JMS(Java消息服务) 1.4.10 JMX(Java分布式管理) 1.4.11 JACC(Java容器授权合同...
1.4.5 JTA/JTS(Java事务) 1.4.6 JNDI(Java命名和目录服务) 1.4.7 JavaMail(Java邮件服务) 1.4.8 RMI(远程方法调用) 1.4.9 JMS(Java消息服务) 1.4.10 JMX(Java分布式管理) 1.4.11 JACC(Java容器授权合同...
1.4.5 JTA/JTS(Java事务) 1.4.6 JNDI(Java命名和目录服务) 1.4.7 JavaMail(Java邮件服务) 1.4.8 RMI(远程方法调用) 1.4.9 JMS(Java消息服务) 1.4.10 JMX(Java分布式管理) 1.4.11 JACC(Java容器授权合同...