Narayana启动-注册恢复模块流程

使用代码

1
2
// narayana 在启动阶段使用如下 api 加载恢复模块
XARecoveryModulexaRecoveryModule = XARecoveryModule.getRegisteredXARecoveryModule();

总体流程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
注册恢复模块
反射创建 RecoveryEnvironmentBean 配置信息实例
加载 RecoveryActivators
启动 RecoveryActivators
初始化 PeriodicRecovery
设置恢复状态 INACTIVE
设置恢复mode ENABLED
加载恢复模块,module包括:
1.com.arjuna.ats.internal.arjuna.recovery.AtomicActionRecoveryModule
2.com.arjuna.ats.internal.jta.recovery.arjunacore.XARecoveryModule
反射实例化并初始化 上面的 AtomicActionRecoveryModule 和 XARecoveryModule
1.反射实例化 AtomicActionRecoveryModule
AtomicActionRecoveryModule 构造方法里初始化 storeManager
获取存储类型,此处是文件存储 ShadowNoFileLockStore
实例化存储,此处是 ShadowNoFileLockStore->父类ShadowingStore->父类FileSystemStore->父类 ObjectStore
从文件路径中恢复事务存储信息
2.反射实例化 XARecoveryModule

调用链路

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
com.arjuna.ats.internal.jta.recovery.arjunacore.XARecoveryModule#getRegisteredXARecoveryModule
注册恢复模块
com.arjuna.ats.arjuna.recovery.RecoveryManager#manager
com.arjuna.ats.arjuna.recovery.RecoveryManager#manager
com.arjuna.ats.arjuna.common.recoveryPropertyManager#getRecoveryEnvironmentBean
反射创建 RecoveryEnvironmentBean 配置信息实例
com.arjuna.common.internal.util.propertyservice.BeanPopulator#getDefaultInstance
com.arjuna.ats.internal.arjuna.recovery.RecActivatorLoader#loadRecoveryActivators
加载 RecoveryActivators
com.arjuna.ats.arjuna.common.recoveryPropertyManager#getRecoveryEnvironmentBean
com.arjuna.ats.internal.arjuna.recovery.RecActivatorLoader#startRecoveryActivators
启动 RecoveryActivators
com.arjuna.ats.internal.arjuna.recovery.PeriodicRecovery#initialise
初始化 PeriodicRecovery
com.arjuna.ats.internal.arjuna.recovery.PeriodicRecovery#setStatus
设置恢复状态 INACTIVE
com.arjuna.ats.internal.arjuna.recovery.PeriodicRecovery#setMode
设置恢复mode ENABLED
internal.arjuna.recovery.PeriodicRecovery#loadModules
加载恢复模块,module包括:
1.com.arjuna.ats.internal.arjuna.recovery.AtomicActionRecoveryModule
2.com.arjuna.ats.internal.jta.recovery.arjunacore.XARecoveryModule
com.arjuna.ats.arjuna.common.RecoveryEnvironmentBean#getRecoveryModules
com.arjuna.common.internal.util.ClassloadingUtility#loadAndInstantiateClassesWithInit
反射实例化并初始化 上面的 AtomicActionRecoveryModule 和 XARecoveryModule
com.arjuna.common.internal.util.ClassloadingUtility#loadAndInstantiateClass
1.反射实例化 AtomicActionRecoveryModule
com.arjuna.ats.arjuna.objectstore.StoreManager#getRecoveryStore
AtomicActionRecoveryModule 构造方法里初始化 storeManager
com.arjuna.ats.arjuna.objectstore.StoreManager#getActionStore
com.arjuna.ats.arjuna.objectstore.StoreManager#initStore
com.arjuna.ats.arjuna.common.ObjectStoreEnvironmentBean#getObjectStoreType
获取存储类型,此处是文件存储 com.arjuna.ats.internal.arjuna.objectstore.ShadowNoFileLockStore
com.arjuna.common.internal.util.ClassloadingUtility#loadAndInstantiateClass
实例化存储,此处是 com.arjuna.ats.internal.arjuna.objectstore.ShadowNoFileLockStore->父类ShadowingStore->父类FileSystemStore->父类 ObjectStore
com.arjuna.ats.arjuna.recovery.TransactionStatusConnectionManager#updateTSMI
从文件路径中恢复事务存储信息
com.arjuna.common.internal.util.ClassloadingUtility#loadAndInstantiateClass
2.反射实例化 XARecoveryModule
com.arjuna.common.internal.util.ClassloadingUtility#loadClass
com.arjuna.ats.arjuna.objectstore.StoreManager#getRecoveryStore
com.arjuna.ats.jta.common.JTAEnvironmentBean#getXaResourceOrphanFilters
com.arjuna.ats.internal.jta.Implementations#initialise
com.arjuna.ats.internal.arjuna.recovery.ExpiredEntryMonitor#startUp
com.arjuna.ats.internal.arjuna.recovery.ExpiredEntryMonitor#initialise