事务不光可以在服务器端各个service的不同方法中传播,
也可以在服务器端和客户端传播。这里给出一个EJB中在客户端开启JTA事务的例子
有一段客户端代码:
public void testAddStudent01() throws Exception{
InitialContext context = new InitialContext();
StudentManager sm = (StudentManager)context.lookup("StudentManager/remote");
for(int i=0; i<10; i++){
sm.addStudent("Student"+i);
if(i == 5){
throw new RuntimeException("随便一个异常!");
}
}
}
调用后台ejb bean的addStudent()方法的时候,事务的边界在addStudent方法上;
事务被添加在addStudent方法的外部,而不是for循环的外部。所以,每次的addStudent()调用都在不同的事务中(每次调用都会开启一个事务)。所以,上述代码会在数据库中插入六条数据(i从0到5的六条数据)
那怎么样保证客户端代码for循环在一个事务中那?答案是使用JTA事务管理接口UserTransaction:
/**
* 使用JTA事务管理接口在客户端开启事务,控制事务边界
**/
public void testAddStudent02() throws Exception{
InitialContext context = new InitialContext();
StudentManager sm = (StudentManager)context.lookup("StudentManager/remote");
//JTA事务管理接口
UserTransaction utx = (UserTransaction)context.lookup("UserTransaction");
try{
utx.begin();
for(int i=0; i<10; i++){
sm.addStudent("Student"+i);
if(i == 5){
throw new RuntimeException("随便一个异常!");
}
}
utx.commit();
}catch(Exception e){
e.printStackTrace();
utx.rollback();
}
}
这样,该客户端代码中事务的边界被控制在了整个for循环上;并且该事务传播到服务器端;在抛出runtimeexception后,整个事务回滚,数据库中不会有数据被插入。
分享到:
相关推荐
在提供的"SimpleDemo"示例中,可能包含了一个简单的JTA事务管理的例子,比如如何在Java代码中启动和结束一个事务,以及如何在事务中操作数据库。具体实现细节可能包括使用JPA、JDBC或其他持久化框架与JTA集成的方法...
**JTA事务**则适用于分布式环境,可以跨越多个数据源管理事务。JTA通过`UserTransaction`接口提供事务控制,支持两阶段提交(2PC)协议。在2PC中,事务处理监视器(TPM)先询问所有资源管理器(如数据库)是否准备好...
4. 使用`@Transactional`注解:在需要进行分布式事务的方法上添加此注解,Spring Boot会自动处理事务的提交和回滚。 最后,压缩包中的`demo`文件很可能是包含了上述配置和示例代码的项目模板。你可以下载并运行这个...
JTA(Java Transaction API)是Java平台上的一个标准接口,用于处理分布式事务,它允许应用程序在不同的数据源之间进行协调,确保事务的ACID特性(原子性、一致性、隔离性和持久性)。本示例代码旨在展示如何在Java...
4. 开启JTA支持:在Spring Boot的主类上添加`@EnableJtaTransactionManager`注解,开启JTA事务管理。 5. 编写业务代码:在服务类中,使用`@Transactional`注解标记方法,以开启分布式事务。事务边界内的所有操作将在...
XA协议是数据库层面的一套分布式事务管理的规范,JTA是XA协议在Java中的实现,多个数据库或是消息厂商实现JTA接口,开发人员只需要调用SpringJTA接口即可实现JTA事务管理功能。 JTA事务比JDBC事务更强大。一个JTA事务...
Hibernate支持JTA事务,使得在分布式环境中处理事务变得可能。 `分布式事务` 在多数据库或者微服务架构中尤为重要,它能保证即使在分布式系统中,一系列操作也如同在一个事务内执行一样,要么全部成功,要么全部...
本文将详细介绍如何在Spring中使用JTA事务管理,包括通过集成JOTM(Java Open Transaction Manager)以及引用Tomcat的JTA事务。 ### 1. 通过集成JOTM,直接在Spring中使用JTA事务 #### 1.1. 添加JOTM类库到类路径...
本篇文章将深入探讨如何在Spring中配置JTA事务管理,以实现跨数据库和资源的事务一致性。 首先,让我们了解JTA的基本概念。JTA是一个规范,它定义了接口和API,使得应用程序可以控制跨越多个数据存储(如数据库、...
- 使用`@EnableJtaTransactionManagement`注解开启JTA事务管理。 5. **编写代码**: - 在需要进行多数据源事务操作的服务类上,使用`@Transactional`注解声明事务边界。 - 在事务方法内部,根据业务逻辑切换数据...
使用JTA事务可以确保分布式事务的一致性和可靠性,例如,在一个分布式事务中,如果某个资源管理器执行失败,可以使用rollback()方法来回滚事务,以确保分布式事务的一致性。 JTA事务工作流程 JTA事务工作流程可以...
Mybatis则是一个轻量级的持久层框架,它简化了SQL操作,但在JTA事务中,Mybatis需要配合Spring的TransactionManager来工作,使得每个数据库操作都在同一个事务上下文中。 实现步骤如下: 1. 添加依赖:在Spring ...
本文将深入探讨如何在Tomcat应用服务器上集成JTA,并使用JOTM(Java Open Transaction Manager)或Atomikos作为事务管理器来实现分布式事务。 首先,我们需要理解JTA的核心概念。JTA是Java EE平台的一部分,提供了...
JTA规范定义了事务管理器与分布式事务系统中各方参与者(应用、资源管理器和应用服务器)之间的高级接口。该规范不仅限于技术细节,还提供了在组件化的基于企业级应用服务器环境中的通用使用场景和实现考虑。 #### ...
对于分布式事务,Spring支持JTA事务管理,并且可以无缝集成JOTM。 1. **配置JOTM**:首先,你需要在项目的类路径下添加JOTM的依赖库。然后,在Spring的配置文件中定义JOTM的事务管理器 bean,例如: ```xml ...
6. **配置Spring JTA事务**:在Spring的配置文件中,你需要配置 `UserTransaction` 和 `TransactionManager`,并启用事务管理。同时,你需要在MyBatis的相关配置中,指定使用JTA数据源。 7. **源码分析**:在...
本文将深入探讨如何使用Spring、JTA和Atomikos来实现分布式事务。 首先,了解JTA的基本概念。JTA定义了一套规范,允许在多资源环境下进行事务管理,比如跨越多个数据库或者消息队列的服务。它包括三个主要组件:...
在JTA分布式事务的场景下,iBATIS作为数据访问层,参与到事务处理中,其执行的SQL操作会受到JTA的控制,确保在事务中的所有数据库操作要么全部成功,要么全部回滚。 MySQL是广泛使用的开源关系型数据库管理系统,它...
在现代项目中,我们通常会使用更兼容的版本或Spring Data JPA来配合JTA事务。 3. **JTA事务管理**: JTA定义了用户事务API(`UserTransaction`接口)和事务管理器API(`TransactionManager`接口)。`...
1. **配置数据源**:为每个数据库创建独立的数据源,并确保它们支持JTA事务。 2. **注册XAResource**:将每个数据源作为XAResource注册到事务协调器。 3. **开始事务**:通过UT接口启动一个新的全局事务。 4. **执行...