业务场景:
客户下发订单后,订单到竣工需要走三个岗位1,2,3包括两个迁移过程:
1-》2的迁移 实现方式为无状态EJB,容器控制事务
2-》3的迁移 实现方式为无状态EJB,容器控制事务
备注:2-》3的迁移中还调用其它系统的EJB和RMI服务,webservice服务。相对复杂。
现在将1-》2 的状态迁移和2-3的迁移放置在一起给外围系统提供接口(EJB实现),同时需要控制1-》2,2->3迁移过程中的事务,当2-》3失败的时候,不影响1->2的事务提交。
解决思路:
1. 使用无状态EJB再次进行封装后,如果使用容器控制失误,则1-》2和2-》3的事务无法分离控制。舍弃
2. 将1-》2和2->3分别提供给外围系统,然后由调用方自己控制。 此方案尽量避免,给外围系统的接口尽量简单符合业务场景。(最坏的方案)
3. 使用JTA进行事务控制。
使用JTA控制事务的步骤:
1. 获取javax.transaction.UserTransaction userTransaction = sessionContext
.getUserTransaction();
2. 执行第一次状态迁移
userTransaction.begin();
1-》2
userTransaction.commit();
3. 执行第二次状态迁移
userTransaction.begin();
2-》3
userTransaction.commit();
4. 配置文件设置
将EJB的事务控制类型设置为Bean
<transaction-type>Bean</transaction-type>
这样就实现了对容器控制事物EJB 的分离事务控制。
分享到:
相关推荐
3. 配置数据源和消息队列:JTA事务管理通常需要与JNDI注册的数据源和消息队列配合使用。你需要确保这些资源在应用服务器中已经正确配置,并可以通过JNDI名访问。 4. 配置事务属性:Spring提供了`@Transactional`...
JTA(Java Transaction API) 为 J2EE 平台提供了分布式事务服务。 要用 JTA 进行事务界定,应用程序要调用 javax.transaction.UserTransaction 接口中的方法。
本示例代码旨在展示如何在Java环境中使用JTA来解决多数据源的事务问题。 首先,我们需要了解JTA的基本概念。JTA定义了两个主要组件:Transaction Manager(事务管理器)和XAResource(事务资源)。事务管理器负责...
Spring+iBatis+JOTM实现JTA事务: 如何处理跨库事物:spring + jtom 的jta事务是个很好的选择. 这个源码示例非常不错,包括所有的源码和jar包,下载后eclipse 或 myeclipse 导入就能用。 里面有详细的说明和注释,...
本文将详细介绍如何在Spring中使用JTA事务管理,包括通过集成JOTM(Java Open Transaction Manager)以及引用Tomcat的JTA事务。 ### 1. 通过集成JOTM,直接在Spring中使用JTA事务 #### 1.1. 添加JOTM类库到类路径...
Spring Boot支持JTA事务管理,主要通过以下组件实现: 1. Atomikos:这是一个开源的JTA实现,提供了一种在Spring Boot中实现分布式事务的方式。 2. Bitronix:另一种JTA实现,也可以与Spring Boot集成,处理分布式...
在tomcat 中配置JTA 事务,方便管理web项目
在提供的"SimpleDemo"示例中,可能包含了一个简单的JTA事务管理的例子,比如如何在Java代码中启动和结束一个事务,以及如何在事务中操作数据库。具体实现细节可能包括使用JPA、JDBC或其他持久化框架与JTA集成的方法...
XA协议是数据库层面的一套分布式事务管理的规范,JTA是XA协议在Java中的实现,多个数据库或是消息厂商实现JTA接口,开发人员只需要调用SpringJTA接口即可实现JTA事务管理功能。 JTA事务比JDBC事务更强大。一个JTA事务...
**JTA事务**则适用于分布式环境,可以跨越多个数据源管理事务。JTA通过`UserTransaction`接口提供事务控制,支持两阶段提交(2PC)协议。在2PC中,事务处理监视器(TPM)先询问所有资源管理器(如数据库)是否准备好...
使用JTA事务可以确保分布式事务的一致性和可靠性,例如,在一个分布式事务中,如果某个资源管理器执行失败,可以使用rollback()方法来回滚事务,以确保分布式事务的一致性。 JTA事务工作流程 JTA事务工作流程可以...
- 使用`@EnableJtaTransactionManagement`注解开启JTA事务管理。 5. **编写代码**: - 在需要进行多数据源事务操作的服务类上,使用`@Transactional`注解声明事务边界。 - 在事务方法内部,根据业务逻辑切换数据...
但在迁移到基于Mina框架的API时,Resin不再作为依赖,因此需要寻找新的JTA事务管理工具。在这个过程中,Atomikos 2.Api被选中作为替代方案。然而,一个主要的问题出现了:Atomikos的数据库连接配置缺少类似于`...
Mybatis则是一个轻量级的持久层框架,它简化了SQL操作,但在JTA事务中,Mybatis需要配合Spring的TransactionManager来工作,使得每个数据库操作都在同一个事务上下文中。 实现步骤如下: 1. 添加依赖:在Spring ...
Atomikos是一个开源的JTA事务管理器,它提供了对分布式事务的支持。在分布式系统中,由于多个资源(如数据库、消息队列等)需要进行原子操作,因此需要一个事务管理器来协调这些操作,确保事务的ACID特性(原子性、...
MySQL是广泛使用的开源关系型数据库管理系统,它支持事务处理,是分布式事务中的关键组件。在这个项目中,MySQL作为数据存储,与JOTM和Spring配合,共同确保分布式事务的正确执行。 项目文件“AjtaAbatisTest”可能...
1. **配置数据源**:为每个数据库创建独立的数据源,并确保它们支持JTA事务。 2. **注册XAResource**:将每个数据源作为XAResource注册到事务协调器。 3. **开始事务**:通过UT接口启动一个新的全局事务。 4. **执行...
使用`PlatformTransactionManager`接口的实现`JtaTransactionManager`来启用JTA事务。 3. **配置Hibernate**:配置Hibernate的`hibernate.cfg.xml`,设置JTA数据源,并指定使用Spring的事务管理。 4. **编写业务...
4. **配置Hibernate**:配置Hibernate的SessionFactory,指定使用的数据源,并启用JTA事务。 5. **配置Spring事务管理器**:创建Atomikos事务管理器的bean,并配置Spring的PlatformTransactionManager,指定使用...