本文主要是介绍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 流程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!