JTA事务
环境介绍
整合前
|
系统A
|
系统B
|
框架
|
B/S
|
C/S
|
服务器
|
tomcat5.5
|
glassfish-v2ur2
|
展现层
|
webwork2.2.6(JSP+ftl+applet)
|
swing
|
连接层
|
spring2.0.7
|
无
|
数据库访问
|
hibernate3.2.5
|
JDBC
|
数据库
|
Sqlserver2000
|
oracle9i
|
整合后
框架
|
C/S+S/B
|
服务器
|
glassfish-v2ur2
|
展现层
|
webwork2.2.6(JSP+ftl+applet)+ swing
|
连接层
|
spring2.0.7
|
数据库访问
|
hibernate3.2.5+ JDBC
|
数据库
|
oracle9i
|
应用场景:
系统A调用系统B所暴露的service
下面的伪代码:
1. Class A{
2. Public static Void main(String[] args){
3. aMethod();
4. Bservice bService=new BServeiceImpl();
5. bService. bMethod ();
6. }
7. Public static void aMethod(){
8. //todo insert or update database(“insert into table --------==”)
9. }
10. }
A系统和B系统的数据库目前共用一个,但是以后随着业务的发展又可能用不同的数据库
那么在调用的时候如何做到事务一致呢?
解决方案
针对以上的要求有下面两种思考:
一、同一数据库:
1. 客户数据库操作与我们的服务使用同一个数据库连接。然后编程处理事务。存在两种方式:一种是把客户的连接传给我们,另一种则是把我们的连接传给客户。第一种方式对我们的影响太大,所以最后决定采用后一种方式:从hibernate session中获取connection然后传递给客户。接下来查看一下HibernateTemplate的execute()方法,思路就很简单了:获取定义的sessionFactory-->创建一个新的session并打开-->将session与当前线程绑定-->给客户代码返回connection-->打开事务-->客户使用我们传递的connection进行数据库操作-->我们不带声明事务的服务操作-->提交事务-->解除绑定。
实际要注意的地方是:1、将session与当前线程绑定使用的TransactionSynchronizationManager.bindResource()方法,这样在HibernateTemplate里才能找到session;
2、我们的服务一定要把声明式事务彻底干掉,否则会有commit;
3、我们服务调用完毕后一定要flush session,否则客户代码不会感知数据库里的数据变化。
最终解决:使用了spring里常用的模板和回调。
详细代码请访问:http://www.blogjava.net/RongHao/archive/2007/10/09/151411.html
二、不同数据库
采用JTA事务
期待的方式:
- Class A{
2. Public static Void main(String[] args){
3. Try{
4. //JTA事务开始
5. aMethod();
6. Bservice bService=new BServeiceImpl();
7. bService. bMethod ();
8. //JTA事务提交
9. }catch{
10. //JTA事务回滚
}
下面将详细的介绍从glassfish数据源配置、spring数据源配置、JNDI数据源调用等配置
笔者默认用户已经安装了glassfish和oracle(安装过程可以google相关文章)
glassfish数据源配置
http://localhost:4848/ 进入glassfish的管理页面
- 大小: 8.2 KB
分享到:
相关推荐
3. **开始事务**:通过UT接口启动一个新的全局事务。 4. **执行操作**:在事务内对每个数据源执行相应的操作。 5. **提交或回滚**:根据操作结果,决定是提交还是回滚事务。 博客可能还讨论了以下几个关键点: - **...
JTA是Java平台中处理分布式事务的标准API,它允许应用程序在一个全局事务中操作多个资源(如数据库、消息队列等)。Spring Boot支持JTA事务管理,主要通过以下组件实现: 1. Atomikos:这是一个开源的JTA实现,提供...
JTA是Java平台提供的一种标准API,用于管理跨越多个资源(如数据库、消息队列等)的事务。它定义了开始、提交、回滚事务以及参与事务的资源管理器接口。通过JTA,我们可以实现分布式事务的一致性,即使在分布式环境...
在2PC中,事务处理监视器(TPM)先询问所有资源管理器(如数据库)是否准备好提交,然后再决定全局提交或回滚。JTA事务更复杂,但能保证分布式事务的一致性。 最后,我们提到的是**事务的传播特性**,这是Spring...
使用JTA事务可以确保分布式事务的一致性和可靠性,例如,在一个分布式事务中,如果某个资源管理器执行失败,可以使用rollback()方法来回滚事务,以确保分布式事务的一致性。 JTA事务工作流程 JTA事务工作流程可以...
JTA(Java Transaction API)是Java平台上的一个标准接口,用于处理分布式事务,它允许应用程序在不同的数据源之间进行协调,确保事务的ACID特性(原子性、一致性、隔离性和持久性)。本示例代码旨在展示如何在Java...
一个JTA事务可以有多个参与者,而一个JDBC事务则被限定在一个单一的数据库连接。下列任一个Java平台的组件都可以参与到一个JTA事务中 2、分布式事务 分布式事务(DistributedTransaction)包括事务管理器...
在提供的"SimpleDemo"示例中,可能包含了一个简单的JTA事务管理的例子,比如如何在Java代码中启动和结束一个事务,以及如何在事务中操作数据库。具体实现细节可能包括使用JPA、JDBC或其他持久化框架与JTA集成的方法...
JTA(Java Transaction API) 为 J2EE 平台提供了分布式事务服务。 要用 JTA 进行事务界定,应用程序要调用 javax.transaction.UserTransaction 接口中的方法。
JTA是一个规范,它定义了接口和API,使得应用程序可以控制跨越多个数据存储(如数据库、消息队列等)的事务。它允许开发者编写无感知具体事务实现的代码,从而提高代码的可移植性和可维护性。 Spring通过...
"多数据源事务之解决方案jta+atomikos"这个主题正是针对这一挑战提出的。JTA(Java Transaction API)和Atomikos是两个关键的组件,它们一起为Java应用提供了强大的分布式事务管理能力。 首先,JTA是Java平台企业版...
在JPA中,我们可以使用JTA(Java Transaction API)来处理全局事务。 **全局事务的应用**: 1. **声明式事务管理**:在Spring框架中,可以通过@Transactional注解实现声明式事务管理,只需在需要事务的方法上添加此...
通过JTA,应用可以协调不同资源管理器(如数据库、JMS提供者等)中的事务,实现全局事务。 4. **MyBatis**:MyBatis 是一个轻量级的持久层框架,它允许开发者将SQL语句直接写在XML配置文件或者注解中,提供灵活的...
在tomcat 中配置JTA 事务,方便管理web项目
Spring+iBatis+JOTM实现JTA事务: 如何处理跨库事物:spring + jtom 的jta事务是个很好的选择. 这个源码示例非常不错,包括所有的源码和jar包,下载后eclipse 或 myeclipse 导入就能用。 里面有详细的说明和注释,...
JTA是Java平台的标准事务API,它允许应用程序进行跨多个数据源(如数据库或消息队列)的全局事务处理。通过JTA,开发者可以编写不关心具体事务管理细节的代码,这样就提高了代码的可移植性和可维护性。 JOTM则是JTA...
3. **XAResource**:这是JTA定义的一个接口,表示能够参与全局事务的资源。例如,数据库连接、JMS队列等。每个参与事务的资源都必须实现这个接口。 4. **Xid**:代表一个全局事务的唯一标识,由三部分组成:全局...
jta.jar文件是这个API的实现库,它包含了一系列类和接口,允许应用程序在不同的数据存储系统间进行协调一致的事务操作。在Java应用中,特别是在企业级Java应用服务器如JEE环境中,JTA扮演着关键角色,确保数据的一致...
Spring支持JTA(Java Transaction API),这是一个Java标准,用于定义应用程序与事务管理器之间的接口,使得在分布式环境中进行事务处理变得可能。 JOTM(Java Open Transaction Manager)是Java世界中的一个开源...
Atomikos是一个开源的JTA事务管理器,它提供了对分布式事务的支持。在分布式系统中,由于多个资源(如数据库、消息队列等)需要进行原子操作,因此需要一个事务管理器来协调这些操作,确保事务的ACID特性(原子性、...