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

相关文章

Security OAuth2 单点登录流程

单点登录(英语:Single sign-on,缩写为 SSO),又译为单一签入,一种对于许多相互关连,但是又是各自独立的软件系统,提供访问控制的属性。当拥有这项属性时,当用户登录时,就可以获取所有系统的访问权限,不用对每个单一系统都逐一登录。这项功能通常是以轻型目录访问协议(LDAP)来实现,在服务器上会将用户信息存储到LDAP数据库中。相同的,单一注销(single sign-off)就是指

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

kubelet组件的启动流程源码分析

概述 摘要: 本文将总结kubelet的作用以及原理,在有一定基础认识的前提下,通过阅读kubelet源码,对kubelet组件的启动流程进行分析。 正文 kubelet的作用 这里对kubelet的作用做一个简单总结。 节点管理 节点的注册 节点状态更新 容器管理(pod生命周期管理) 监听apiserver的容器事件 容器的创建、删除(CRI) 容器的网络的创建与删除

MySql 事务练习

事务(transaction) -- 事务 transaction-- 事务是一组操作的集合,是一个不可分割的工作单位,事务会将所有的操作作为一个整体一起向系统提交或撤销请求-- 事务的操作要么同时成功,要么同时失败-- MySql的事务默认是自动提交的,当执行一个DML语句,MySql会立即自动隐式提交事务-- 常见案例:银行转账-- 逻辑:A给B转账1000:1.查询

火语言RPA流程组件介绍--浏览网页

🚩【组件功能】:浏览器打开指定网址或本地html文件 配置预览 配置说明 网址URL 支持T或# 默认FLOW输入项 输入需要打开的网址URL 超时时间 支持T或# 打开网页超时时间 执行后后等待时间(ms) 支持T或# 当前组件执行完成后继续等待的时间 UserAgent 支持T或# User Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器

Lua 脚本在 Redis 中执行时的原子性以及与redis的事务的区别

在 Redis 中,Lua 脚本具有原子性是因为 Redis 保证在执行脚本时,脚本中的所有操作都会被当作一个不可分割的整体。具体来说,Redis 使用单线程的执行模型来处理命令,因此当 Lua 脚本在 Redis 中执行时,不会有其他命令打断脚本的执行过程。脚本中的所有操作都将连续执行,直到脚本执行完成后,Redis 才会继续处理其他客户端的请求。 Lua 脚本在 Redis 中原子性的原因

UMI复现代码运行逻辑全流程(一)——eval_real.py(尚在更新)

一、文件夹功能解析 全文件夹如下 其中,核心文件作用为: diffusion_policy:扩散策略核心文件夹,包含了众多模型及基础库 example:标定及配置文件 scripts/scripts_real:测试脚本文件,区别在于前者倾向于单体运行,后者为整体运行 scripts_slam_pipeline:orb_slam3运行全部文件 umi:核心交互文件夹,作用在于构建真

C++/《C/C++程序编译流程》

程序的基本流程如图:   1.预处理        预处理相当于根据预处理指令组装新的C/C++程序。经过预处理,会产生一个没有宏定义,没有条件编译指令,没有特殊符号的输出文件,这个文件的含义同原本的文件无异,只是内容上有所不同。 读取C/C++源程序,对其中的伪指令(以#开头的指令)进行处理将所有的“#define”删除,并且展开所有的宏定义处理所有的条件编译指令,如:“#if”、“

笔记本电脑的具体选购步骤流程

2.1 笔记本电脑的具体选购步骤流程   关于笔记本电脑的选购,一直是热点话题。不管是新手还是老前辈,选购前,总是要先上网查一查,汇总一些信息或经验。因为选购一台笔记本电脑,从它的配置、外观到做工等很多方面都需要考量,所以挑一台自己喜欢的、适合自己的笔记本电脑也是一件很费脑筋的事情。本节将一些选购笔记本电脑的经验进行了总结,供广大读者选购笔记本电脑时参考。   笔记本电脑选购流程如下