Narayana 事务管理器初始化流程

2023-12-06 08:36

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

总体流程

创建 TransactionManagerImple创建事务管理器对象
读取 narayana 的 xml 配置,进行属性赋值
获取 recovery 模块加载恢复模块
事务恢复日志的初始化
初始化事务日志存储服务JDBC方式存储建表文件方式存储

创建 TransactionManager 流程

Narayana 会通过 BeanPopulator 反射创建对应的 TransactionManager 实例,并读取用户自定义的 xml 属性反射赋值到 TransactionManager 实例里。

TransactionManager transactionManager = jtaPropertyManager.getJTAEnvironmentBean().getTransactionManager();

调用链路如下:

jta.common.jtaPropertyManager#getJTAEnvironmentBean
加载配置文件,创建 JTAEnvironmentBeancom.arjuna.common.internal.util.propertyservice.BeanPopulator#getDefaultInstancecom.arjuna.common.internal.util.propertyservice.BeanPopulator#getNamedInstancecom.arjuna.common.util.propertyservice.PropertiesFactory#getDefaultProperties获取用户自定义的配置属性com.arjuna.common.util.propertyservice.PropertiesFactory#initPropertiesFactory使用 stax 或 sax 解析 xml 配置com.arjuna.common.util.propertyservice.PropertiesFactory#isStaxAvailablecom.arjuna.common.util.propertyservice.AbstractPropertiesFactory#getDefaultProperties获取xml配置信息com.arjuna.common.util.propertyservice.AbstractPropertiesFactory#initDefaultPropertiescom.arjuna.common.util.ConfigurationInfo#getPropertiesFile获取配置文件com.arjuna.common.util.propertyservice.AbstractPropertiesFactory#getPropertiesFromFilecom.arjuna.common.util.propertyservice.FileLocator#locateFile按照路径优先级,定位配置文件com.arjuna.common.util.propertyservice.FileLocator#locateByPropertycom.arjuna.common.util.propertyservice.FileLocator#locateByResourcecom.arjuna.common.util.propertyservice.AbstractPropertiesFactory#loadFromFile读取配置文件com.arjuna.common.util.propertyservice.PropertiesFactoryStax#loadFromXMLcom.arjuna.common.util.propertyservice.PropertiesFactoryStax$1#resolveEntitycom.arjuna.common.util.propertyservice.StringPropertyReplacer#replacePropertiescom.arjuna.common.util.propertyservice.StringPropertyReplacer#replacePropertiescom.arjuna.common.util.propertyservice.StringPropertyReplacer#replacePropertiescom.arjuna.common.util.propertyservice.StringPropertyReplacer#replacePropertiescom.arjuna.common.util.propertyservice.AbstractPropertiesFactory#applySystemProperties应用系统配置系统属性com.arjuna.common.internal.util.propertyservice.BeanPopulator#configureFromProperties反射给属性赋值com.arjuna.common.internal.util.propertyservice.BeanPopulator#capitalizeFirstLettercom.arjuna.common.internal.util.propertyservice.BeanPopulator#handleSimplePropertycom.arjuna.common.internal.util.propertyservice.BeanPopulator#getValueFromPropertiescom.arjuna.common.internal.util.propertyservice.BeanPopulator#handleGroupPropertycom.arjuna.common.internal.util.propertyservice.BeanPopulator#getValueFromPropertiesjta.common.JTAEnvironmentBean#getXaRecoveryNodesjta.common.JTAEnvironmentBean#setXaRecoveryNodes
jta.common.JTAEnvironmentBean#getTransactionManager
创建TransactionManagerImple,调用无参构造方法com.arjuna.common.internal.util.ClassloadingUtility#loadAndInstantiateClass反射加载并实例化com.arjuna.common.internal.util.ClassloadingUtility#loadClasscom.arjuna.common.internal.util.ClassloadingUtility#loadClassjta.common.jtaPropertyManager#getJTAEnvironmentBeancom.arjuna.common.internal.util.propertyservice.BeanPopulator#getDefaultInstance

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



http://www.chinasem.cn/article/461162

相关文章

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

Security OAuth2 单点登录流程

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

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

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

c++的初始化列表与const成员

初始化列表与const成员 const成员 使用const修饰的类、结构、联合的成员变量,在类对象创建完成前一定要初始化。 不能在构造函数中初始化const成员,因为执行构造函数时,类对象已经创建完成,只有类对象创建完成才能调用成员函数,构造函数虽然特殊但也是成员函数。 在定义const成员时进行初始化,该语法只有在C11语法标准下才支持。 初始化列表 在构造函数小括号后面,主要用于给

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 中原子性的原因

【Python知识宝库】上下文管理器与with语句:资源管理的优雅方式

🎬 鸽芷咕:个人主页  🔥 个人专栏: 《C++干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 文章目录 前言一、什么是上下文管理器?二、上下文管理器的实现三、使用内置上下文管理器四、使用`contextlib`模块五、总结 前言 在Python编程中,资源管理是一个重要的主题,尤其是在处理文件、网络连接和数据库

Apache Tiles 布局管理器

陈科肇 =========== 1.简介 一个免费的开源模板框架现代Java应用程序。  基于该复合图案它是建立以简化的用户界面的开发。 对于复杂的网站,它仍然最简单,最优雅的方式来一起工作的任何MVC技术。 Tiles允许作者定义页面片段可被组装成在运行一个完整的网页。  这些片段,或Tiles,可以用于为了降低公共页面元素的重复,简单地包括或嵌入在其它瓦片,制定了一系列可重复使用