在发生未检查异常时,事务将回滚并数据库中的操作将被撤销。检查异常(checked exception):当事务方法抛出检查异常时,默认情况下Spring不会自动回滚事务。...这是因为检查异常通常表示一个业务逻辑错误,可能是临时的或者可以修复的。如果想要让Spring也回滚事务,可以使用@Transactional注解的rollbackFor属性指定需要回滚的异常类型。...对于分布式事务的处理,Spring提供以下支持和解决方案:JTA(Java Transaction API)事务管理器:Spring支持使用JTA事务管理器来处理分布式事务。...JTA是Java平台上的标准分布式事务管理API,可以与不同的事务管理器(如JBOSS、WebSphere等)集成。...开发者可以通过配置数据源和事务管理器来启用数据库XA事务。基于消息队列(MQ)的事务消息:Spring提供了对JMS和AMQP(如RabbitMQ)的支持,可以使用消息队列来处理分布式事务。
JTA只提供接口,没有具体的实现,需要J2EE服务提供商根据JTS规范提供,常见的JTA实现方式: J2EE容器提供的JTA实现(如JBOSS) 独立的JTA实现:如JOTM、Atomikos。...(如Tomcat、Jetty以及普通的java应用) JTA提供了 java.transaction.UserTransaction,里面定义了下面的方法: begin:开启一个事务 commit:提交一个事务...就能把普通的JDBC操作直接转成JTA操作,JTA对DataSource、Connection与Resource都是有要求的,只有符合XA规范,并且实现了XA规范的相关接口的类才能参与到JTA事务中来。...事务,本例中是由Jboss容器管理 javax.sql.DataSource ds = (javax.sql.DataSource) context .lookup("java:/XAOracleDS"...如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
下面介绍一下在JTA规范中,模型中各个组件的作用: 事务管理器(transaction manager): 处于图中最为核心的位置,其他的事务参与者都是与事务管理器进行交互。...一些常见的其他web容器,如:jboss、weblogic、websphere等,都可以作为application server,这些web容器都实现了JTA规范。...特别需要注意的是,并不是所有的web容器都实现了JTA规范,如tomcat并没有实现JTA规范,因此并不能提供事务管理器的功能。...又或者我们使用的web容器并没有事务管理器的功能,如tomcat。对于这些情况,我们可以直接使用一些第三方的事务管理器类库,如JOTM和Atomikos。...常见的TM提供者包括我们前面提到的application server,包括:jboss、ejb server、weblogic等,以及一些以第三方类库形式提供事务管理器功能的jotm、Atomikos
一些常见的其他web容器,如:jboss、weblogic、websphere等,都可以作为application server,这些web容器都实现了JTA规范。...特别需要注意的是,并不是所有的web容器都实现了JTA规范,如tomcat并没有实现JTA规范,因此并不能提供事务管理器的功能。...又或者我们使用的web容器并没有事务管理器的功能,如tomcat。对于这些情况,我们可以直接使用一些第三方的事务管理器类库,如JOTM和Atomikos。...JTA规范中,规定CRM需要实现JTS规范定义的接口。 下图更加直观的演示了JTA规范中各个模型组件之间是如何交互的: ?...常见的TM提供者包括我们前面提到的application server,包括:jboss、ejb server、weblogic等,以及一些以第三方类库形式提供事务管理器功能的jotm、Atomikos
基于MQ,JTA实现多服务的分布式事务 Orderservice监听新订单队列中的消息,获取之后新增订单,成功则往新订单缴费队列中写消息,中间新增订单的过程使用JTA事务管理,当新增失败则事务回滚,不会往新订单缴费队列中写消息...,此时可以使用事务失败回滚的方式依次回退,这种叫弱一致性;又或者可以把处理失败的内容发送至一个错误队列中,由人工处理等方式解决,这种叫最终一致性。...使用 Spring JTA 可以使用 如JBoss之类的应用服务器提供的JTA事务管理器 Atomikos、Bitronix等库提供的JTA事务管理器 禁止使用JTA 为什么禁用JTA ?...因为JTA采用两阶段提交方式: 第一次是预备阶段 第二次才是正式提交 当第一次提交出现错误,则整个事务出现回滚,一个事务的时间可能会较长,因为它要跨越多个数据库多个数据资源的的操作,所以在性能上可能会造成吞吐量低...MQ 事务尚未提交,所以可直接回滚。这也就是不使用 JTA 时遇到的最大难题。
-- Jta-data-source 用于指定持久化提供商使用的JTA数据源的全局JNDI名称(可选) --> java:/DefaultMySqlDS</jta-data-source...jta-data-source: 节点指定实体Bean使用的数据源JNDI名称,如果应用发布在jboss下,数据源名称就必须带有java:/前缀,数据源名称大小写敏感。...对于properties 节点需要说明的是,各个应用服务器使用的持久化产品都不一样,如jboss使用的是hibernate,weblogic10使用的是kodo。...(Data Source) 应用使用的事务类型(Transaction Type) 持久化单元能够被打包成WAR文件,EJB-JAR文件,EAR文件的一部分,或者直接打包成应用程序能够直接使用的...JAR文件的META-INF目录中。
事物概念 事物特性(ACID) 原子性(A) 所谓的原子性就是说,在整个事务中的所有操作,要么全部完成,要么全部不做,没有中间状态。...持久性(D) 所谓的持久性,就是说一单事务完成了,那么事务对数据所做的变更就完全保存在了数据库中,即使发生停电,系统宕机也是如此。...XA实现分布式事务的原理如下: 什么是Jta 作为java平台上事务规范JTA(Java Transaction API)也定义了对XA事务的支持,实际上,JTA是基于XA架构上建模的,在JTA 中,...像很多其他的java规范一样,JTA仅仅定义了接口,具体的实现则是由供应商(如J2EE厂商)负责提供,目前JTA的实现主要由以下几种: 1.J2EE容器所提供的JTA实现(JBoss) 2.独立的JTA...实现:如JOTM,Atomikos.这些实现可以应用在那些不使用J2EE应用服务器的环境里用以提供分布事事务保证。
分布式事务介绍 在分布式系统中实现的事务就是分布式事务,分布式系统的CAP原则是: 一致性 可用性 分区容错性 是分布式事务主要是保证数据的一致性,主要有三种不同的原则 强一致性 弱一致性 最终一致性...监听新订单队列中的消息,获取之后新增订单,成功则往新订单缴费队列中写消息,中间新增订单的过程使用JTA事务管理,当新增失败则事务回滚,不会往新订单缴费队列中写消息; 再比如User service 扣费成功后...,往新订单转移票队列写消息,这时Ticket service 正在处理中或者处理中发生了失败,这中间的过程中用户查看自己的余额已经扣费成功,但票的信息却没有,此时可以使用事务失败回滚的方式依次回退,这种叫弱一致性...Spring JTA分布式事务实现 可以使用如JBoss之类的应用服务器提供的JTA事务管理器 可以使用Atomikos、Bitronix等库提供的JTA事务管理器 不使用Spring JTA的分布式事务实现...,消息放回至MQ队列,重试重新触发该方法 可能存在问题:会重复数据库操作,因为database transaction不是使用JTA事务管理,所以database已经commit成功;如何避免,需要忽略重发消息
分布式事务是指操作多个数据库之间的事务,spring的org.springframework.transaction.jta.JtaTransactionManager,提供了分布式事务支持...JTA全称为Java Transaction API,顾名思义JTA定义了一组统一的事务编程的接口,这些接口如下: XAResource XAResource接口是对实现了X/Open CAE规范的资源管理器...注意:在上图中3和5的步骤之间省略了应用程序对资源的操作 (如CRUD)。另外,应用服务器什么时机 enlistResource,又是什么时候delistResource呢?这在后文中会解释。...有关JCA 下图为JCA的架构图 ? 中间涉及元素说明如下: 1)Enterprise Information System 简称EIS,在JTA中它又被称为资源管理器。...典型的应用服务器有JBoss、JOnAS、Geronimo、GlassFish等。
)和其他 JTA 资源管理的事务。...因此,Apache Geode 必须被定位为JTA 事务(准备阶段)中的“最后一个资源”,因为它没有实现两阶段提交协议,或者更确切地说,它不处理分布式事务。...许多支持 CMT 的托管环境在基于 JTA 的事务中维护对“最后资源”、非 XA 兼容资源的支持,尽管 JTA 规范实际上并不需要它。...但是,无论您是在具有支持“最后资源”的开源 JTA 事务管理实现的独立环境中使用 Apache Geode ,还是在托管环境(例如 Java EE AS,如 WAS)中使用 Apache Geode,Apache...并且 Spring 的 事务管理基础设施和 Spring Data for Apache Geode 的 @EnableGemFireAsLastResource注解配置的组合就可以解决问题。
我们在实际项目中,尽量规避分布式事务。但是,有些时候是真的需要做一些服务拆分从而会引出分布式事务问题。 同时,分布式事务也是面试中市场被问,可以拿着这个案例练练手,面试就可以说上个123了。...分布式事务解决实现方案有: 基于消息队列的分布式事务方案(如RocketMQ的开源方案) 基于分布式事务框架的分布式事务方案(如Seata、TCC-Transaction等框架) 基于XA协议的分布式事务方案...(如JTA等) 基于可靠消息最终一致性的分布式事务方案(如阿里巴巴的分布式事务中间件GTS) 基于CAP原理的分布式事务方案(如CQRS架构中的事件溯源模式) 什么是JTA ?...如果我们有一个应用,它使用JTA接口实现事务,应用在运行的时候,就需要一个实现JTA的容器,一般情况下,这是一个J2EE容器,像JBoss,Websphere等应用服务器。...这样我们就能够在Tomcat或者Jetty之类的服务器上运行使用JTA实现事务的应用系统。 在上面的本地事务和外部事务的区别中说到,JTA事务是外部事务,可以用来实现对多个资源的事务性。
那么下面就让我们详细介绍一下两种的区别: Web 服务器通常比应用服务器简单,如apache就是web服务器,jboss就是ejb应用服务器。...J2EE也是一个框架,包括JDBC、JNDI、RMI、JMS、EJB、JTA等技术。...5、请对以下在J2EE中常用的名词进行解释(或简单描述) web容器: 给处于其中的应用程序组件(JSP,SERVLET)提供一个环境,使JSP,SERVLET直接更容器中的环境变量接口交互,不必关注其它系统问题...主要实现各个应用程序之间的通讯。包括点对点和广播。 JTA: (Java Transaction API)JAVA事务服务。 提供各种分布式事务服务。应用程序只需调用其提供的接口即可。...12、如何在weblogic中进行ssl配置与客户端的认证配置或说说j2ee(标准)进行ssl的配置?
(6)commons-beanutils.jar: Apache Commons包中的一个,包含了一些Bean工具类类。必须使用的jar包。...另外强调一点,如果在EJB中使用Hibernate,一定要用App Server的连接池,不要用以上4种连接池,否则容器管理事务不起作用。...jta.jar: JTA规范,当Hibernate使用JTA的时候需要,不过App Server都会带上,所以也是多余的。...XPath 处理引擎 jboss-cache.jar JBoss 的一种树状缓存实现工具 jboss-common.jar Jboss 的基础包,在使用 JBoss 的树状缓存时必须有此包 jboss-jmx.jar....jar 网络通信工具包 jta.jar 标准的 JAVA 事务处理接口 junit-3.8.1.jar JUnit 测试框架 log4.j-1.2.9.jar log4j 库,Apache 的日志工具
数据库与缓存双写问题 计算机领域任何一个问题都可以通过增加一个抽象“层”来解决。 业务中为了减少热点数据不必要的db查询,往往会增加一层缓存来解决I/O性能。...可是I/O多了一层也就多了一层的更新维护与容错保障,当修改db中某些数据时,往往会面临缓存更新的问题,在这里简单介绍 数据库与缓存双写问题以及在业务场景如何使用双写策略。...缓存操作问题 在上一节中提到的所有缓存更新策略都是在暂时不考虑缓存操作失败的情况(如网络原因、redis服务不可用等)前提下讨论的,如果缓存操作失败,则必须通过业务代码重试、消息队列或者设置缓存超时解决...分布式事务 比较遗憾的是,在node领域还没有类似JAVA的JTA规范及其实现,JTA规范中的核心“事务管理器TM”大都由容器来实现,如常见的jboss和websphere;TM接收业务层的事务请求,同时协同参与事务的各个资源管理器...RM如dbms、mq等,实现分布式事务的提交与回滚;同时也提供分布式事务在不同自治系统的传递。
JTA JTA只是Java实现XA事务的一个规范,全称Java事务规范JTA(Java Transaction API) ,我们日常使用的@Transactional。都可以叫JTA事务管理。...实际上,JTA是基于XA架构上建模的, 对于Spring来说,可以使用如JBoss之类的应用服务器提供的JTA事务管理器;可以以使用Atomikos、Bitronix等库提供的JTA事务管理器。...如果你要操作别人的服务的库,你必须是通过调用别的服务的接口来实现,绝对不允许交叉访问别人的数据库。 问题 同步阻塞问题: 二阶段提交算法在执行过程中,所有参与节点都是事务阻塞型的。...为了解决两阶段提交的同步阻塞和数据不一致问题,三阶段提交引入了超时机制和准备阶段。 同时在协调者和参与者中引入超时机制。...最终一致性: 事务在操作过程中可能会由于同步延迟等问题导致不一致,但最终状态下,数据都是一致的。
常见的容器事务如Spring事务,容器事务主要是J2EE应用服务器提供的,容器事务大多是基于JTA完成,这是一个基于JNDI的,相当复杂的API实现。...首先介绍J2EE开发中的两个事务:JDBC事务和JTA事务。 JDBC 事务 JDBC的一切行为包括事务是基于一个Connection的,在JDBC中是通过Connection对象进行事务管理。...JTA 事务 通常,JDBC事务就可以解决数据的一致性等问题,鉴于他用法相对简单,所以很多人关于Java中的事务只知道有JDBC事务,或者有人知道框架中的事务(比如Hibernate、Spring)等。...JTA 事务有效的屏蔽了底层事务资源,使应用可以以透明的方式参入到事务处理中;但是与本地事务相比,XA 协议的系统开销大,在系统开发过程中应慎重考虑是否确实需要分布式事务。...除了数据库,还有JBoss、JMS的消息中间件ActiveMQ等很多组件都是遵守XA协议,2PC和3PC也是符合XA规范的。具体JTA更多的内容,本文不再展开,后面有机会专门深入介绍JTA事务。
例如,在JBoss EJB3.0的实现中,当你在用EntityManager持久化一个Entity Bean时,后台的Hibernate会话事务已经自动地帮定到调用方法的JTA 的事务上,在JTA 事务提交的同时...这里有一个在EJB3.0中将事务服务运用到POJO的例子。...下面是一个在Spring应用中的XML片段,其应用一个非常简单的Hibernate事务到方法Foo.bar()中。 <!...但是这并没有解决XML配置文件的根本问题。冗长而又繁琐的事务拦截器, transactionManager,和transactionAttributeSource仍然需要。...transaction context并不会同JTA transaction manager一起自动提交。因此它可以用在在一个会话横跨多个线程的应用事务中。
: activiti的JtaProcessEngineConfiguration的子类,用于在activiti使用JTA管理的事务环境 org.activiti.cdi.CdiStandaloneProcessEngineConfiguration...: activiti的StandaloneProcessEngineConfiguration的子类,用于在activiti使用简单JDBC事务环境 JBoss7下的activiti.cfg.xml:...BPMN业务流程通常是一个长时间运行的操作,包含了用户和系统任务的操作 运行过程中,流程会分成多个单独的工作单元,由用户和应用逻辑执行 在activiti-cdi中,流程实例可以分配到cdi环境中,关联展现成一个工作单元...,注解方法的代码和启动流程实例会在同一个事务中执行 ....CDI事务性监听器可以控制监听器什么时候处理事件: 可以保证监听器只在事件中的事务成功之后才处理 public void onShipmentSuceeded(@Observes(during=TransactionPhase.AFTER_SUCCESS
因为jboss,weblogic。websphere自身带有J2EE的API,所以能够不使用sun的J2EE实现。 在企业级应用中,都有一些通用企业需求模块,如数据库连接,邮件服务,事务处理等。...10、JTA(JavaTransaction API):Java事务API 定义了一种标准API,应用程序由此可以访问各种事务监控。...它允许应用程序执行分布式事务处理--在两个或多个网络计算机资源上访问并且更新数据。JTA和JTS为J2EE 平台提供了分布式事务服务。 ...JTA事务比JDBC事务更强大,一个JTA事务可以有多个参与者,而一个JDBC事务则被限定在一个单一的数据库连接。 Java 事务API 可以横跨的包含:EJB訪问、JDBC连接以及JMS连接。...JTS指定了一个事务管理器的实现(Transaction Manager),这个管理器在一个高级别上支持JTA规范,并且在一个低级别上实现了OMGOTS规范的Java映射。
image.png JTA JTA只是Java实现XA事务的一个规范,全称Java``事务规范JTA(Java Transaction API) ,我们日常使用的@Transactional。...实际上,JTA是基于XA架构上建模的,对于Spring来说,可以使用如JBoss之类的应用服务器提供的JTA事务管理器;可以以使用Atomikos、Bitronix等库提供的JTA事务管理器。...如果你要操作别人的服务的库,你必须是通过调用别的服务的接口 来实现,绝对不允许交叉访问别人的数据库。 问题 同步阻塞问题 :二阶段提交算法在执行过程中,所有参与节点都是事务阻塞型的。...为了解决两阶段提交的同步阻塞和数据不一致问题,三阶段提交引入了超时机制和准备阶段 。 同时在协调者和参与者中引入超时机制。...最终一致性:事务在操作过程中可能会由于同步延迟等问题导致不一致,但最终状态下,数据都是一致的。
领取专属 10元无门槛券
手把手带您无忧上云