Narayana 事务 begin 流程

2023-12-08 11:28
文章标签 流程 事务 begin narayana

本文主要是介绍Narayana 事务 begin 流程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Narayana 事务 begin 流程

整体流程

检查事务状态
获取超时时间
创建事务对象事务对象设置到 ThreadLocal 中,和当前线程绑定

使用 API

TransactionManager transactionManager = jtaPropertyManager.getJTAEnvironmentBean().getTransactionManager();
// 开启全局事务
transactionManager.begin();

调用链路

internal.jta.transaction.arjunacore.BaseTransaction#begin
开启事务internal.jta.transaction.arjunacore.BaseTransaction#checkTransactionState校验事务状态jta.common.JTAEnvironmentBean#isXaTransactionTimeoutEnabled是否启用超时配置internal.jta.transaction.arjunacore.TransactionImple#getTransaction获取当前线程已经存在的全局事务arjuna.coordinator.BasicAction#Currentinternal.arjuna.thread.ThreadActionData#currentActioninternal.arjuna.thread.ThreadActionData#setup如果当前事务存在,执行setup操作arjuna.coordinator.TxControl#createTransactionStatusManager 静态代码块创建 TransactionStatusManagerarjuna.recovery.TransactionStatusManager#start启动事务状态管理arjuna.recovery.TransactionStatusManager#getTsmServerSocketarjuna.recovery.TransactionStatusManager#getListenerHostNamearjuna.common.RecoveryEnvironmentBean#getTransactionStatusManagerAddressarjuna.utils.Utility#hostNameToInetAddressarjuna.recovery.TransactionStatusManager#addServicearjuna.common.RecoveryEnvironmentBean#isTimeoutSocketinternal.arjuna.recovery.TransactionStatusManagerItem#createAndSave创建 status manager item 并序列化保存arjuna.utils.Utility#getProcessUid创建 uid,由 hostInetAddr + pid + hash 组成internal.arjuna.recovery.TransactionStatusManagerItem#saveThis将 host+port 写出到存储日志arjuna.state.OutputBuffer#initBufferarjuna.utils.Utility#hostInetAddrarjuna.utils.Utility#getpidarjuna.common.Uid#generateHashinternal.arjuna.recovery.TransactionStatusManagerItem#save_state保存状态到磁盘arjuna.state.OutputBuffer#packString打包状态到 outputBufferinternal.arjuna.recovery.TransactionStatusManagerItem#getStore反射获取存储实例并初始化internal.arjuna.objectstore.FileSystemStore#write_committed写出buffer里的状态到文件存储internal.arjuna.objectstore.FileSystemStore#write_state_internalinternal.arjuna.objectstore.ShadowingStore#write_state写出状态到磁盘internal.arjuna.objectstore.FileSystemStore#synchronousWrites同步写,调用 sync 刷盘internal.arjuna.objectstore.FileSystemStore#closeAndUnlock解锁internal.arjuna.objectstore.FileSystemStore#addToCache写出结果缓存到内存new TransactionImple(v)创建事务对象arjuna.AtomicAction#begin开启事务arjuna.coordinator.TwoPhaseCoordinator#startarjuna.coordinator.BasicAction#Current获取当前 BasicActionarjuna.coordinator.TwoPhaseCoordinator#startarjuna.coordinator.BasicAction#BeginBasicAction 开启事务操作arjuna.StateManager#get_uidarjuna.coordinator.BasicAction#actionInitialisearjuna.coordinator.ActionHierarchy#addarjuna.coordinator.ActionManager#managerarjuna.coordinator.ActionManager#putinternal.arjuna.thread.ThreadActionData#pushAction缓存创建的 BasicAction 事务对象 到 当前线程internal.jta.transaction.arjunacore.TransactionImple#putTransaction缓存 TransactionImple 到 hashMap,key是uid

这篇关于Narayana 事务 begin 流程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/469673

相关文章

java Long 与long之间的转换流程

《javaLong与long之间的转换流程》Long类提供了一些方法,用于在long和其他数据类型(如String)之间进行转换,本文将详细介绍如何在Java中实现Long和long之间的转换,感... 目录概述流程步骤1:将long转换为Long对象步骤2:将Longhttp://www.cppcns.c

MySQL 事务的概念及ACID属性和使用详解

《MySQL事务的概念及ACID属性和使用详解》MySQL通过多线程实现存储工作,因此在并发访问场景中,事务确保了数据操作的一致性和可靠性,下面通过本文给大家介绍MySQL事务的概念及ACID属性和... 目录一、什么是事务二、事务的属性及使用2.1 事务的 ACID 属性2.2 为什么存在事务2.3 事务

spring-gateway filters添加自定义过滤器实现流程分析(可插拔)

《spring-gatewayfilters添加自定义过滤器实现流程分析(可插拔)》:本文主要介绍spring-gatewayfilters添加自定义过滤器实现流程分析(可插拔),本文通过实例图... 目录需求背景需求拆解设计流程及作用域逻辑处理代码逻辑需求背景公司要求,通过公司网络代理访问的请求需要做请

使用JavaConfig配置Spring的流程步骤

《使用JavaConfig配置Spring的流程步骤》JavaConfig是Spring框架提供的一种基于Java的配置方式,它通过使用@Configuration注解标记的类来替代传统的XML配置文... 目录一、什么是 JavaConfig?1. 核心注解2. 与 XML 配置的对比二、JavaConf

Spring Boot 事务详解(事务传播行为、事务属性)

《SpringBoot事务详解(事务传播行为、事务属性)》SpringBoot提供了强大的事务管理功能,通过@Transactional注解可以方便地配置事务的传播行为和属性,本文将详细介绍Spr... 目录Spring Boot 事务详解引言声明式事务管理示例编程式事务管理示例事务传播行为1. REQUI

MySQL中的事务隔离级别详解

《MySQL中的事务隔离级别详解》在MySQL中,事务(Transaction)是一个执行单元,它要么完全执行,要么完全回滚,以保证数据的完整性和一致性,下面给大家介绍MySQL中的事务隔离级别详解,... 目录一、事务并发问题二、mysql 事务隔离级别1. READ UNCOMMITTED(读未提交)2

如何合理使用Spring的事务方式

《如何合理使用Spring的事务方式》:本文主要介绍如何合理使用Spring的事务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍1.1、底层构造1.1.事务管理器1.2.事务定义信息1.3.事务状态1.4.联系1.2、特点1.3、原理2. Sprin

Java对接Dify API接口的完整流程

《Java对接DifyAPI接口的完整流程》Dify是一款AI应用开发平台,提供多种自然语言处理能力,通过调用Dify开放API,开发者可以快速集成智能对话、文本生成等功能到自己的Java应用中,本... 目录Java对接Dify API接口完整指南一、Dify API简介二、准备工作三、基础对接实现1.

将Java项目提交到云服务器的流程步骤

《将Java项目提交到云服务器的流程步骤》所谓将项目提交到云服务器即将你的项目打成一个jar包然后提交到云服务器即可,因此我们需要准备服务器环境为:Linux+JDK+MariDB(MySQL)+Gi... 目录1. 安装 jdk1.1 查看 jdk 版本1.2 下载 jdk2. 安装 mariadb(my

通过Spring层面进行事务回滚的实现

《通过Spring层面进行事务回滚的实现》本文主要介绍了通过Spring层面进行事务回滚的实现,包括声明式事务和编程式事务,具有一定的参考价值,感兴趣的可以了解一下... 目录声明式事务回滚:1. 基础注解配置2. 指定回滚异常类型3. ​不回滚特殊场景编程式事务回滚:1. ​使用 TransactionT