This is an automated email from the ASF dual-hosted git repository.

duanzhengqiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new f6abc74ac6e Add GraalVM Reachability Metadata and corresponding 
nativeTest for Atomikos and Narayana integration (#30085)
f6abc74ac6e is described below

commit f6abc74ac6efd4ab7b178f618f1082b8543402a8
Author: Ling Hengqian <[email protected]>
AuthorDate: Sun Feb 11 16:06:34 2024 +0800

    Add GraalVM Reachability Metadata and corresponding nativeTest for Atomikos 
and Narayana integration (#30085)
---
 distribution/proxy-native/pom.xml                  |   3 +-
 .../transactions/6.0.0/resource-config.json        |   8 +
 .../com.h2database/h2/2.2.224/reflect-config.json  |  23 +++
 .../reflect-config.json                            | 164 ++++++++++++++++++---
 .../resource-config.json                           |   3 +
 .../jta/5.12.4.Final/reflect-config.json           | 160 ++++++++++++++++++++
 pom.xml                                            |   1 -
 test/native/native-image-filter/extra-filter.json  |   9 +-
 test/native/pom.xml                                |  30 ++++
 .../jdbc/{mode => modes}/cluster/EtcdTest.java     |   4 +-
 .../{mode => modes}/cluster/ZookeeperTest.java     |   4 +-
 .../natived/jdbc/transactions/xa/AtomikosTest.java |  52 +++++++
 .../natived/jdbc/transactions/xa/NarayanaTest.java |  52 +++++++
 .../resource-config.json                           |  17 ++-
 .../src/test/resources/jbossts-properties.xml      |  47 ++++++
 .../yaml/{mode => modes}/cluster/etcd.yaml         |   0
 .../yaml/{mode => modes}/cluster/zookeeper.yaml    |   0
 .../test-native/yaml/transactions/xa/atomikos.yaml |  82 +++++++++++
 .../test-native/yaml/transactions/xa/narayana.yaml |  82 +++++++++++
 19 files changed, 707 insertions(+), 34 deletions(-)

diff --git a/distribution/proxy-native/pom.xml 
b/distribution/proxy-native/pom.xml
index 08e8f051325..67133cf256f 100644
--- a/distribution/proxy-native/pom.xml
+++ b/distribution/proxy-native/pom.xml
@@ -85,8 +85,7 @@
                         <configuration>
                             
<mainClass>org.apache.shardingsphere.proxy.Bootstrap</mainClass>
                             <buildArgs>
-                                <arg>-J-Xmx7g</arg>
-                                <arg>-H:+AddAllCharsets</arg>
+                                <buildArg>-H:+AddAllCharsets</buildArg>
                             </buildArgs>
                         </configuration>
                         <executions>
diff --git 
a/infra/reachability-metadata/src/main/resources/META-INF/native-image/com.atomikos/transactions/6.0.0/resource-config.json
 
b/infra/reachability-metadata/src/main/resources/META-INF/native-image/com.atomikos/transactions/6.0.0/resource-config.json
new file mode 100644
index 00000000000..ed057c299ff
--- /dev/null
+++ 
b/infra/reachability-metadata/src/main/resources/META-INF/native-image/com.atomikos/transactions/6.0.0/resource-config.json
@@ -0,0 +1,8 @@
+{
+  "resources":{
+  "includes":[{
+    
"condition":{"typeReachable":"com.atomikos.icatch.provider.imp.AssemblerImp"},
+    "pattern":"\\Qtransactions-defaults.properties\\E"
+  }]},
+  "bundles":[]
+}
diff --git 
a/infra/reachability-metadata/src/main/resources/META-INF/native-image/com.h2database/h2/2.2.224/reflect-config.json
 
b/infra/reachability-metadata/src/main/resources/META-INF/native-image/com.h2database/h2/2.2.224/reflect-config.json
new file mode 100644
index 00000000000..06722883c8e
--- /dev/null
+++ 
b/infra/reachability-metadata/src/main/resources/META-INF/native-image/com.h2database/h2/2.2.224/reflect-config.json
@@ -0,0 +1,23 @@
+[
+{
+  "condition":{"typeReachable":"org.h2.jdbcx.JdbcDataSource"},
+  "name":"org.h2.jdbcx.JdbcDataSource",
+  "allDeclaredClasses": true,
+  "allDeclaredMethods": true,
+  "allDeclaredFields": true,
+  "allDeclaredConstructors": true,
+  "allPublicClasses": true,
+  "allPublicMethods": true,
+  "allPublicFields": true,
+  "allPublicConstructors": true,
+  "allRecordComponents": true,
+  "allNestMembers": true,
+  "allSigners": true,
+  "allPermittedSubclasses": true,
+  "queryAllDeclaredMethods": true,
+  "queryAllDeclaredConstructors": true,
+  "queryAllPublicMethods": true,
+  "queryAllPublicConstructors": true,
+  "unsafeAllocated": true
+}
+]
diff --git 
a/infra/reachability-metadata/src/main/resources/META-INF/native-image/org.apache.shardingsphere/shardingsphere-infra-reachability-metadata/reflect-config.json
 
b/infra/reachability-metadata/src/main/resources/META-INF/native-image/org.apache.shardingsphere/shardingsphere-infra-reachability-metadata/reflect-config.json
index 7108cb96269..02082e72276 100644
--- 
a/infra/reachability-metadata/src/main/resources/META-INF/native-image/org.apache.shardingsphere/shardingsphere-infra-reachability-metadata/reflect-config.json
+++ 
b/infra/reachability-metadata/src/main/resources/META-INF/native-image/org.apache.shardingsphere/shardingsphere-infra-reachability-metadata/reflect-config.json
@@ -55,7 +55,7 @@
   "name":"org.apache.shardingsphere.driver.api.yaml.YamlJDBCConfiguration",
   "allDeclaredFields":true,
   "queryAllPublicMethods":true,
-  "methods":[{"name":"<init>","parameterTypes":[] }, 
{"name":"setDataSources","parameterTypes":["java.util.Map"] }, 
{"name":"setMode","parameterTypes":["org.apache.shardingsphere.infra.yaml.config.pojo.mode.YamlModeConfiguration"]
 }, {"name":"setProps","parameterTypes":["java.util.Properties"] }, 
{"name":"setRules","parameterTypes":["java.util.Collection"] }, 
{"name":"setSqlParser","parameterTypes":["org.apache.shardingsphere.parser.yaml.config.YamlSQLParserRuleConfiguration"]
 }]
+  "methods":[{"name":"<init>","parameterTypes":[] }, 
{"name":"setDataSources","parameterTypes":["java.util.Map"] }, 
{"name":"setMode","parameterTypes":["org.apache.shardingsphere.infra.yaml.config.pojo.mode.YamlModeConfiguration"]
 }, {"name":"setProps","parameterTypes":["java.util.Properties"] }, 
{"name":"setRules","parameterTypes":["java.util.Collection"] }, 
{"name":"setSqlParser","parameterTypes":["org.apache.shardingsphere.parser.yaml.config.YamlSQLParserRuleConfiguration"]
 }, {"name" [...]
 },
 {
   
"condition":{"typeReachable":"org.apache.shardingsphere.infra.util.yaml.YamlEngine"},
@@ -65,6 +65,31 @@
   
"condition":{"typeReachable":"org.apache.shardingsphere.infra.util.yaml.YamlEngine"},
   
"name":"org.apache.shardingsphere.driver.api.yaml.YamlJDBCConfigurationCustomizer"
 },
+{
+  
"condition":{"typeReachable":"org.apache.shardingsphere.driver.jdbc.core.driver.ShardingSphereURLManager"},
+  
"name":"org.apache.shardingsphere.driver.jdbc.core.driver.spi.absolutepath.AbsolutePathURLProvider",
+  "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+  
"condition":{"typeReachable":"org.apache.shardingsphere.driver.jdbc.core.driver.ShardingSphereURLManager"},
+  
"name":"org.apache.shardingsphere.driver.jdbc.core.driver.spi.absolutepath.AbsolutePathWithEnvironmentURLProvider",
+  "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+  
"condition":{"typeReachable":"org.apache.shardingsphere.driver.jdbc.core.driver.ShardingSphereURLManager"},
+  
"name":"org.apache.shardingsphere.driver.jdbc.core.driver.spi.classpath.ClasspathURLProvider",
+  "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+  
"condition":{"typeReachable":"org.apache.shardingsphere.driver.jdbc.core.driver.ShardingSphereURLManager"},
+  
"name":"org.apache.shardingsphere.driver.jdbc.core.driver.spi.classpath.ClasspathWithEnvironmentURLProvider",
+  "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+  
"condition":{"typeReachable":"org.apache.shardingsphere.driver.jdbc.core.driver.ShardingSphereURLManager"},
+  
"name":"org.apache.shardingsphere.driver.jdbc.core.driver.spi.classpath.ClasspathWithSystemPropsURLProvider",
+  "methods":[{"name":"<init>","parameterTypes":[] }]
+},
 {
   
"condition":{"typeReachable":"org.apache.shardingsphere.encrypt.rule.EncryptRule"},
   
"name":"org.apache.shardingsphere.encrypt.algorithm.assisted.MD5AssistedEncryptAlgorithm",
@@ -75,10 +100,6 @@
   
"name":"org.apache.shardingsphere.encrypt.algorithm.standard.AESEncryptAlgorithm",
   "methods":[{"name":"<init>","parameterTypes":[] }]
 },
-{
-  
"condition":{"typeReachable":"org.apache.shardingsphere.infra.yaml.config.shortcut.YamlRuleConfigurationShortcuts"},
-  
"name":"org.apache.shardingsphere.encrypt.yaml.config.YamlCompatibleEncryptRuleConfiguration"
-},
 {
   
"condition":{"typeReachable":"org.apache.shardingsphere.infra.util.yaml.YamlEngine"},
   
"name":"org.apache.shardingsphere.encrypt.yaml.config.YamlEncryptRuleConfiguration",
@@ -172,6 +193,21 @@
   
"condition":{"typeReachable":"org.apache.shardingsphere.infra.parser.cache.SQLStatementCacheBuilder"},
   "name":"org.apache.shardingsphere.infra.parser.cache.SQLStatementCacheLoader"
 },
+{
+  
"condition":{"typeReachable":"org.apache.shardingsphere.infra.util.yaml.YamlEngine"},
+  "name":"org.apache.shardingsphere.infra.util.yaml.YamlConfiguration",
+  "queryAllPublicMethods":true
+},
+{
+  
"condition":{"typeReachable":"org.apache.shardingsphere.metadata.persist.service.schema.NewTableMetaDataPersistService"},
+  "name":"org.apache.shardingsphere.infra.util.yaml.YamlConfiguration",
+  "queryAllPublicMethods":true
+},
+{
+  
"condition":{"typeReachable":"org.apache.shardingsphere.metadata.persist.service.schema.ShardingSphereTableRowDataPersistService"},
+  "name":"org.apache.shardingsphere.infra.util.yaml.YamlConfiguration",
+  "queryAllPublicMethods":true
+},
 {
   
"condition":{"typeReachable":"org.apache.shardingsphere.encrypt.yaml.swapper.NewYamlEncryptRuleConfigurationSwapper"},
   
"name":"org.apache.shardingsphere.infra.yaml.config.pojo.algorithm.YamlAlgorithmConfiguration",
@@ -241,6 +277,21 @@
   
"condition":{"typeReachable":"org.apache.shardingsphere.infra.util.yaml.YamlEngine"},
   
"name":"org.apache.shardingsphere.infra.yaml.config.pojo.mode.YamlPersistRepositoryConfigurationCustomizer"
 },
+{
+  
"condition":{"typeReachable":"org.apache.shardingsphere.infra.util.yaml.YamlEngine"},
+  
"name":"org.apache.shardingsphere.infra.yaml.config.pojo.rule.YamlGlobalRuleConfiguration",
+  "queryAllPublicMethods":true
+},
+{
+  
"condition":{"typeReachable":"org.apache.shardingsphere.infra.util.yaml.YamlEngine"},
+  
"name":"org.apache.shardingsphere.infra.yaml.config.pojo.rule.YamlRuleConfiguration",
+  "queryAllPublicMethods":true
+},
+{
+  
"condition":{"typeReachable":"org.apache.shardingsphere.mode.manager.cluster.NewClusterContextManagerBuilder"},
+  
"name":"org.apache.shardingsphere.infra.yaml.config.pojo.rule.YamlRuleConfiguration",
+  "queryAllPublicMethods":true
+},
 {
   
"condition":{"typeReachable":"org.apache.shardingsphere.infra.util.yaml.constructor.ShardingSphereYamlConstructor"},
   
"name":"org.apache.shardingsphere.infra.yaml.config.shortcut.YamlRuleConfigurationShortcuts",
@@ -299,26 +350,12 @@
   "allPublicMethods":true,
   "methods":[{"name":"<init>","parameterTypes":[] }]
 },
-{
-  
"condition":{"typeReachable":"org.apache.shardingsphere.metadata.persist.service.database.NewDatabaseMetaDataPersistService"},
-  
"name":"org.apache.shardingsphere.infra.yaml.schema.pojo.YamlShardingSphereTable"
-},
 {
   
"condition":{"typeReachable":"org.apache.shardingsphere.metadata.persist.service.schema.NewTableMetaDataPersistService"},
   
"name":"org.apache.shardingsphere.infra.yaml.schema.pojo.YamlShardingSphereTable",
   "allDeclaredFields":true,
   "queryAllPublicMethods":true,
-  "methods":[{"name":"<init>","parameterTypes":[] }, 
{"name":"getColumns","parameterTypes":[] }, 
{"name":"getConstraints","parameterTypes":[] }, 
{"name":"getIndexes","parameterTypes":[] }, 
{"name":"getName","parameterTypes":[] }, 
{"name":"setColumns","parameterTypes":["java.util.Map"] }, 
{"name":"setIndexes","parameterTypes":["java.util.Map"] }, 
{"name":"setName","parameterTypes":["java.lang.String"] }]
-},
-{
-  
"condition":{"typeReachable":"org.apache.shardingsphere.mode.manager.context.ConfigurationContextManager"},
-  
"name":"org.apache.shardingsphere.infra.yaml.schema.pojo.YamlShardingSphereTable",
-  "queryAllPublicMethods":true
-},
-{
-  
"condition":{"typeReachable":"org.apache.shardingsphere.mode.metadata.NewMetaDataContextsFactory"},
-  
"name":"org.apache.shardingsphere.infra.yaml.schema.pojo.YamlShardingSphereTable",
-  "queryAllPublicMethods":true
+  "methods":[{"name":"<init>","parameterTypes":[] }, 
{"name":"getColumns","parameterTypes":[] }, 
{"name":"getConstraints","parameterTypes":[] }, 
{"name":"getIndexes","parameterTypes":[] }, 
{"name":"getName","parameterTypes":[] }, {"name":"getType","parameterTypes":[] 
}, {"name":"setColumns","parameterTypes":["java.util.Map"] }, 
{"name":"setIndexes","parameterTypes":["java.util.Map"] }, 
{"name":"setName","parameterTypes":["java.lang.String"] }, 
{"name":"setType","parameterTypes":["org.apa [...]
 },
 {
   
"condition":{"typeReachable":"org.apache.shardingsphere.metadata.persist.service.schema.NewTableMetaDataPersistService"},
@@ -482,6 +519,11 @@
   
"name":"org.apache.shardingsphere.mode.manager.cluster.coordinator.subscriber.DatabaseChangedSubscriber",
   "queryAllDeclaredMethods":true
 },
+{
+  
"condition":{"typeReachable":"org.apache.shardingsphere.mode.manager.cluster.coordinator.subscriber.NewConfigurationChangedSubscriber"},
+  
"name":"org.apache.shardingsphere.mode.manager.cluster.coordinator.subscriber.NewConfigurationChangedSubscriber",
+  "queryAllDeclaredMethods":true
+},
 {
   
"condition":{"typeReachable":"org.apache.shardingsphere.infra.util.eventbus.EventBusContext"},
   
"name":"org.apache.shardingsphere.mode.manager.cluster.coordinator.subscriber.NewResourceMetaDataChangedSubscriber",
@@ -536,8 +578,8 @@
   "methods":[{"name":"<init>","parameterTypes":[] }]
 },
 {
-  
"condition":{"typeReachable":"org.apache.shardingsphere.mode.subsciber.NewConfigurationChangedSubscriber"},
-  
"name":"org.apache.shardingsphere.mode.subsciber.NewConfigurationChangedSubscriber",
+  
"condition":{"typeReachable":"org.apache.shardingsphere.mode.manager.cluster.NewClusterContextManagerBuilder"},
+  "name":"org.apache.shardingsphere.mode.subsciber.RuleItemChangedSubscriber",
   "queryAllDeclaredMethods":true
 },
 {
@@ -821,6 +863,11 @@
   
"condition":{"typeReachable":"org.apache.shardingsphere.infra.util.yaml.YamlEngine"},
   
"name":"org.apache.shardingsphere.sharding.yaml.config.strategy.keygen.YamlKeyGenerateStrategyConfigurationCustomizer"
 },
+{
+  
"condition":{"typeReachable":"org.apache.shardingsphere.infra.util.yaml.YamlEngine"},
+  
"name":"org.apache.shardingsphere.sharding.yaml.config.strategy.sharding.YamlBaseShardingStrategyConfiguration",
+  "queryAllPublicMethods":true
+},
 {
   
"condition":{"typeReachable":"org.apache.shardingsphere.infra.util.yaml.YamlEngine"},
   
"name":"org.apache.shardingsphere.sharding.yaml.config.strategy.sharding.YamlShardingStrategyConfiguration",
@@ -857,15 +904,42 @@
   
"condition":{"typeReachable":"org.apache.shardingsphere.infra.util.yaml.YamlEngine"},
   
"name":"org.apache.shardingsphere.sharding.yaml.config.strategy.sharding.YamlStandardShardingStrategyConfigurationCustomizer"
 },
+{
+  
"condition":{"typeReachable":"org.apache.shardingsphere.infra.connection.refresher.type.table.CreateTableStatementSchemaRefresher"},
+  
"name":"org.apache.shardingsphere.single.yaml.config.pojo.YamlSingleRuleConfiguration",
+  "queryAllPublicMethods":true
+},
+{
+  
"condition":{"typeReachable":"org.apache.shardingsphere.infra.connection.refresher.type.table.DropTableStatementSchemaRefresher"},
+  
"name":"org.apache.shardingsphere.single.yaml.config.pojo.YamlSingleRuleConfiguration",
+  "queryAllPublicMethods":true
+},
 {
   
"condition":{"typeReachable":"org.apache.shardingsphere.infra.yaml.config.shortcut.YamlRuleConfigurationShortcuts"},
   
"name":"org.apache.shardingsphere.single.yaml.config.pojo.YamlSingleRuleConfiguration"
 },
+{
+  
"condition":{"typeReachable":"org.apache.shardingsphere.metadata.persist.NewMetaDataPersistService"},
+  
"name":"org.apache.shardingsphere.single.yaml.config.pojo.YamlSingleRuleConfiguration"
+},
+{
+  
"condition":{"typeReachable":"org.apache.shardingsphere.metadata.persist.service.config.database.rule.NewDatabaseRulePersistService"},
+  
"name":"org.apache.shardingsphere.single.yaml.config.pojo.YamlSingleRuleConfiguration"
+},
 {
   
"condition":{"typeReachable":"org.apache.shardingsphere.mode.manager.cluster.NewClusterContextManagerBuilder"},
   
"name":"org.apache.shardingsphere.single.yaml.config.pojo.YamlSingleRuleConfiguration",
   "queryAllPublicMethods":true
 },
+{
+  
"condition":{"typeReachable":"org.apache.shardingsphere.mode.manager.standalone.NewStandaloneModeContextManager"},
+  
"name":"org.apache.shardingsphere.single.yaml.config.pojo.YamlSingleRuleConfiguration"
+},
+{
+  
"condition":{"typeReachable":"org.apache.shardingsphere.mode.metadata.NewMetaDataContextsFactory"},
+  
"name":"org.apache.shardingsphere.single.yaml.config.pojo.YamlSingleRuleConfiguration",
+  "queryAllPublicMethods":true
+},
 {
   
"condition":{"typeReachable":"org.apache.shardingsphere.single.yaml.config.swapper.NewYamlSingleRuleConfigurationSwapper"},
   
"name":"org.apache.shardingsphere.single.yaml.config.pojo.YamlSingleRuleConfiguration",
@@ -1117,8 +1191,54 @@
   
"condition":{"typeReachable":"org.apache.shardingsphere.infra.yaml.config.shortcut.YamlRuleConfigurationShortcuts"},
   
"name":"org.apache.shardingsphere.traffic.yaml.config.YamlTrafficRuleConfiguration"
 },
+{
+  
"condition":{"typeReachable":"org.apache.shardingsphere.transaction.ShardingSphereTransactionManagerEngine"},
+  
"name":"org.apache.shardingsphere.transaction.xa.XAShardingSphereTransactionManager",
+  "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+  
"condition":{"typeReachable":"org.apache.shardingsphere.transaction.xa.XAShardingSphereTransactionManager"},
+  
"name":"org.apache.shardingsphere.transaction.xa.atomikos.manager.AtomikosTransactionManagerProvider",
+  "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+  
"condition":{"typeReachable":"org.apache.shardingsphere.transaction.xa.XAShardingSphereTransactionManager"},
+  
"name":"org.apache.shardingsphere.transaction.xa.jta.datasource.checker.dialect.H2XATransactionPrivilegeChecker",
+  "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+  
"condition":{"typeReachable":"org.apache.shardingsphere.transaction.xa.XAShardingSphereTransactionManager"},
+  
"name":"org.apache.shardingsphere.transaction.xa.jta.datasource.checker.dialect.MySQLXATransactionPrivilegeChecker",
+  "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+  
"condition":{"typeReachable":"org.apache.shardingsphere.transaction.xa.XAShardingSphereTransactionManager"},
+  
"name":"org.apache.shardingsphere.transaction.xa.narayana.manager.NarayanaXATransactionManagerProvider",
+  "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+  
"condition":{"typeReachable":"org.apache.shardingsphere.infra.util.yaml.YamlEngine"},
+  
"name":"org.apache.shardingsphere.transaction.yaml.config.YamlTransactionRuleConfiguration",
+  "allDeclaredFields":true,
+  "queryAllPublicMethods":true,
+  "methods":[{"name":"<init>","parameterTypes":[] }, 
{"name":"setDefaultType","parameterTypes":["java.lang.String"] }, 
{"name":"setProviderType","parameterTypes":["java.lang.String"] }]
+},
 {
   
"condition":{"typeReachable":"org.apache.shardingsphere.infra.yaml.config.shortcut.YamlRuleConfigurationShortcuts"},
   
"name":"org.apache.shardingsphere.transaction.yaml.config.YamlTransactionRuleConfiguration"
+},
+{
+  
"condition":{"typeReachable":"org.apache.shardingsphere.transaction.yaml.swapper.NewYamlTransactionRuleConfigurationSwapper"},
+  
"name":"org.apache.shardingsphere.transaction.yaml.config.YamlTransactionRuleConfiguration",
+  "allDeclaredFields":true,
+  "methods":[{"name":"getDefaultType","parameterTypes":[] }, 
{"name":"getProps","parameterTypes":[] }, 
{"name":"getProviderType","parameterTypes":[] }]
+},
+{
+  
"condition":{"typeReachable":"org.apache.shardingsphere.infra.util.yaml.YamlEngine"},
+  
"name":"org.apache.shardingsphere.transaction.yaml.config.YamlTransactionRuleConfigurationBeanInfo"
+},
+{
+  
"condition":{"typeReachable":"org.apache.shardingsphere.infra.util.yaml.YamlEngine"},
+  
"name":"org.apache.shardingsphere.transaction.yaml.config.YamlTransactionRuleConfigurationCustomizer"
 }
 ]
diff --git 
a/infra/reachability-metadata/src/main/resources/META-INF/native-image/org.apache.shardingsphere/shardingsphere-infra-reachability-metadata/resource-config.json
 
b/infra/reachability-metadata/src/main/resources/META-INF/native-image/org.apache.shardingsphere/shardingsphere-infra-reachability-metadata/resource-config.json
index a0790dd2ad5..2ca0e73753f 100644
--- 
a/infra/reachability-metadata/src/main/resources/META-INF/native-image/org.apache.shardingsphere/shardingsphere-infra-reachability-metadata/resource-config.json
+++ 
b/infra/reachability-metadata/src/main/resources/META-INF/native-image/org.apache.shardingsphere/shardingsphere-infra-reachability-metadata/resource-config.json
@@ -15,6 +15,9 @@
   }, {
     
"condition":{"typeReachable":"org.apache.shardingsphere.mode.repository.standalone.jdbc.sql.JDBCRepositorySQLLoader"},
     "pattern":"\\Qsql\\E"
+  }, {
+    
"condition":{"typeReachable":"org.apache.shardingsphere.transaction.xa.atomikos.manager.AtomikosTransactionManagerProvider"},
+    "pattern":"\\Qtransactions.properties\\E"
   }]},
   "bundles":[]
 }
diff --git 
a/infra/reachability-metadata/src/main/resources/META-INF/native-image/org.jboss.narayana.jta/jta/5.12.4.Final/reflect-config.json
 
b/infra/reachability-metadata/src/main/resources/META-INF/native-image/org.jboss.narayana.jta/jta/5.12.4.Final/reflect-config.json
new file mode 100644
index 00000000000..43a4d6d8378
--- /dev/null
+++ 
b/infra/reachability-metadata/src/main/resources/META-INF/native-image/org.jboss.narayana.jta/jta/5.12.4.Final/reflect-config.json
@@ -0,0 +1,160 @@
+[
+{
+  
"condition":{"typeReachable":"com.arjuna.ats.arjuna.common.arjPropertyManager"},
+  "name":"com.arjuna.ats.arjuna.common.CoordinatorEnvironmentBean",
+  "allDeclaredFields":true,
+  "methods":[{"name":"<init>","parameterTypes":[] }, 
{"name":"getCheckedActionFactory","parameterTypes":[] }, 
{"name":"getCheckedActionFactoryClassName","parameterTypes":[] }, 
{"name":"getCommunicationStore","parameterTypes":[] }, 
{"name":"getDefaultTimeout","parameterTypes":[] }, 
{"name":"getDynamic1PC","parameterTypes":[] }, 
{"name":"getMaxTwoPhaseCommitThreads","parameterTypes":[] }, 
{"name":"getTxReaperCancelFailWaitPeriod","parameterTypes":[] }, 
{"name":"getTxReaperCancelWaitPeriod" [...]
+},
+{
+  
"condition":{"typeReachable":"com.arjuna.ats.arjuna.common.arjPropertyManager"},
+  "name":"com.arjuna.ats.arjuna.common.CoreEnvironmentBean",
+  "allDeclaredFields":true,
+  "methods":[{"name":"<init>","parameterTypes":[] }, 
{"name":"getNodeIdentifier","parameterTypes":[] }, 
{"name":"getPid","parameterTypes":[] }, 
{"name":"getProcessImplementation","parameterTypes":[] }, 
{"name":"getProcessImplementationClassName","parameterTypes":[] }, 
{"name":"getSocketProcessIdMaxPorts","parameterTypes":[] }, 
{"name":"getSocketProcessIdPort","parameterTypes":[] }, 
{"name":"getTimeoutFactor","parameterTypes":[] }, 
{"name":"getVarDir","parameterTypes":[] }, {"name":"isAll [...]
+},
+{
+  
"condition":{"typeReachable":"com.arjuna.ats.arjuna.common.arjPropertyManager"},
+  "name":"com.arjuna.ats.arjuna.common.MetaObjectStoreEnvironmentBean",
+  "allDeclaredFields":true,
+  "methods":[{"name":"<init>","parameterTypes":[] }, 
{"name":"setActionStoreEnvironmentBean","parameterTypes":["com.arjuna.ats.arjuna.common.ObjectStoreEnvironmentBean"]
 }, {"name":"setInstances","parameterTypes":["java.util.List"] }]
+},
+{
+  
"condition":{"typeReachable":"com.arjuna.common.internal.util.propertyservice.BeanPopulator"},
+  "name":"com.arjuna.ats.arjuna.common.ObjectStoreEnvironmentBean",
+  "allDeclaredFields":true,
+  "methods":[{"name":"<init>","parameterTypes":[] }, 
{"name":"getCacheStoreHash","parameterTypes":[] }, 
{"name":"getCacheStoreRemovedItems","parameterTypes":[] }, 
{"name":"getCacheStoreScanPeriod","parameterTypes":[] }, 
{"name":"getCacheStoreSize","parameterTypes":[] }, 
{"name":"getCacheStoreWorkItems","parameterTypes":[] }, 
{"name":"getCreateTable","parameterTypes":[] }, 
{"name":"getDropTable","parameterTypes":[] }, 
{"name":"getExposeAllLogRecordsAsMBeans","parameterTypes":[] }, {"name" [...]
+},
+{
+  
"condition":{"typeReachable":"com.arjuna.ats.arjuna.common.recoveryPropertyManager"},
+  "name":"com.arjuna.ats.arjuna.common.RecoveryEnvironmentBean",
+  "allDeclaredFields":true,
+  "methods":[{"name":"<init>","parameterTypes":[] }, 
{"name":"getExpiryScanInterval","parameterTypes":[] }, 
{"name":"getExpiryScannerClassNames","parameterTypes":[] }, 
{"name":"getExpiryScanners","parameterTypes":[] }, 
{"name":"getPeriodicRecoveryInitilizationOffset","parameterTypes":[] }, 
{"name":"getPeriodicRecoveryPeriod","parameterTypes":[] }, 
{"name":"getRecoveryActivatorClassNames","parameterTypes":[] }, 
{"name":"getRecoveryActivators","parameterTypes":[] }, {"name":"getRecoveryAdd 
[...]
+},
+{
+  "condition":{"typeReachable":"com.arjuna.ats.arjuna.logging.tsLogger"},
+  "name":"com.arjuna.ats.arjuna.logging.arjunaI18NLogger_$logger",
+  "methods":[{"name":"<init>","parameterTypes":["org.jboss.logging.Logger"] }]
+},
+{
+  "condition":{"typeReachable":"com.arjuna.ats.arjuna.logging.tsLogger"},
+  "name":"com.arjuna.ats.arjuna.logging.arjunaI18NLogger_$logger_zh"
+},
+{
+  "condition":{"typeReachable":"com.arjuna.ats.arjuna.logging.tsLogger"},
+  "name":"com.arjuna.ats.arjuna.logging.arjunaI18NLogger_$logger_zh_CN"
+},
+{
+  
"condition":{"typeReachable":"com.arjuna.ats.arjuna.recovery.TransactionStatusManager"},
+  "name":"com.arjuna.ats.arjuna.recovery.ActionStatusService",
+  "queryAllPublicConstructors":true,
+  "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+  
"condition":{"typeReachable":"com.arjuna.ats.arjuna.common.CoordinatorEnvironmentBean"},
+  
"name":"com.arjuna.ats.internal.arjuna.coordinator.CheckedActionFactoryImple",
+  "queryAllPublicConstructors":true,
+  "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+  
"condition":{"typeReachable":"com.arjuna.ats.arjuna.objectstore.StoreManager"},
+  "name":"com.arjuna.ats.internal.arjuna.objectstore.ShadowNoFileLockStore",
+  "queryAllPublicConstructors":true,
+  
"methods":[{"name":"<init>","parameterTypes":["com.arjuna.ats.arjuna.common.ObjectStoreEnvironmentBean"]
 }]
+},
+{
+  
"condition":{"typeReachable":"com.arjuna.ats.arjuna.common.RecoveryEnvironmentBean"},
+  "name":"com.arjuna.ats.internal.arjuna.recovery.AtomicActionRecoveryModule",
+  "queryAllPublicConstructors":true,
+  "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+  
"condition":{"typeReachable":"com.arjuna.common.internal.util.ClassloadingUtility"},
+  
"name":"com.arjuna.ats.internal.arjuna.recovery.ExpiredTransactionStatusManagerScanner",
+  "queryAllPublicConstructors":true,
+  "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+  
"condition":{"typeReachable":"com.arjuna.ats.arjuna.common.CoreEnvironmentBean"},
+  "name":"com.arjuna.ats.internal.arjuna.utils.SocketProcessId",
+  "queryAllPublicConstructors":true,
+  "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+  "condition":{"typeReachable":"com.arjuna.ats.jta.common.JTAEnvironmentBean"},
+  
"name":"com.arjuna.ats.internal.jta.recovery.arjunacore.JTAActionStatusServiceXAResourceOrphanFilter",
+  "queryAllPublicConstructors":true,
+  "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+  "condition":{"typeReachable":"com.arjuna.ats.jta.common.JTAEnvironmentBean"},
+  
"name":"com.arjuna.ats.internal.jta.recovery.arjunacore.JTANodeNameXAResourceOrphanFilter",
+  "queryAllPublicConstructors":true,
+  "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+  "condition":{"typeReachable":"com.arjuna.ats.jta.common.JTAEnvironmentBean"},
+  
"name":"com.arjuna.ats.internal.jta.recovery.arjunacore.JTATransactionLogXAResourceOrphanFilter",
+  "queryAllPublicConstructors":true,
+  "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+  
"condition":{"typeReachable":"com.arjuna.ats.arjuna.common.RecoveryEnvironmentBean"},
+  "name":"com.arjuna.ats.internal.jta.recovery.arjunacore.XARecoveryModule",
+  "queryAllPublicConstructors":true,
+  "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+  "condition":{"typeReachable":"com.arjuna.ats.jta.common.JTAEnvironmentBean"},
+  
"name":"com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionManagerImple",
+  "queryAllPublicConstructors":true,
+  "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+  
"condition":{"typeReachable":"com.arjuna.ats.jbossatx.logging.jbossatxLogger"},
+  "name":"com.arjuna.ats.jbossatx.logging.jbossatxI18NLogger_$logger",
+  "methods":[{"name":"<init>","parameterTypes":["org.jboss.logging.Logger"] }]
+},
+{
+  
"condition":{"typeReachable":"com.arjuna.ats.jbossatx.logging.jbossatxLogger"},
+  "name":"com.arjuna.ats.jbossatx.logging.jbossatxI18NLogger_$logger_zh"
+},
+{
+  
"condition":{"typeReachable":"com.arjuna.ats.jbossatx.logging.jbossatxLogger"},
+  "name":"com.arjuna.ats.jbossatx.logging.jbossatxI18NLogger_$logger_zh_CN"
+},
+{
+  "condition":{"typeReachable":"com.arjuna.ats.jta.common.jtaPropertyManager"},
+  "name":"com.arjuna.ats.jta.common.JTAEnvironmentBean",
+  "allDeclaredFields":true,
+  "methods":[{"name":"<init>","parameterTypes":[] }, 
{"name":"getAsyncCommitPoolSize","parameterTypes":[] }, 
{"name":"getCommitMarkableResourceJNDINames","parameterTypes":[] }, 
{"name":"getCommitMarkableResourceRecordDeleteBatchSize","parameterTypes":[] }, 
{"name":"getCommitMarkableResourceRecordDeleteBatchSizeMap","parameterTypes":[] 
}, {"name":"getCommitMarkableResourceTableNameMap","parameterTypes":[] }, 
{"name":"getLastResourceOptimisationInterface","parameterTypes":[] }, 
{"name":"ge [...]
+},
+{
+  "condition":{"typeReachable":"com.arjuna.ats.jta.logging.jtaLogger"},
+  "name":"com.arjuna.ats.jta.logging.jtaI18NLogger_$logger",
+  "methods":[{"name":"<init>","parameterTypes":["org.jboss.logging.Logger"] }]
+},
+{
+  "condition":{"typeReachable":"com.arjuna.ats.jta.logging.jtaLogger"},
+  "name":"com.arjuna.ats.jta.logging.jtaI18NLogger_$logger_zh"
+},
+{
+  "condition":{"typeReachable":"com.arjuna.ats.jta.logging.jtaLogger"},
+  "name":"com.arjuna.ats.jta.logging.jtaI18NLogger_$logger_zh_CN"
+},
+{
+  "condition":{"typeReachable":"com.arjuna.ats.jta.common.JTAEnvironmentBean"},
+  "name":"com.arjuna.ats.jta.resources.LastResourceCommitOptimisation"
+},
+{
+  "condition":{"typeReachable":"com.arjuna.common.logging.commonLogger"},
+  "name":"com.arjuna.common.logging.commonI18NLogger_$logger",
+  "methods":[{"name":"<init>","parameterTypes":["org.jboss.logging.Logger"] }]
+},
+{
+  "condition":{"typeReachable":"com.arjuna.common.logging.commonLogger"},
+  "name":"com.arjuna.common.logging.commonI18NLogger_$logger_zh"
+},
+{
+  "condition":{"typeReachable":"com.arjuna.common.logging.commonLogger"},
+  "name":"com.arjuna.common.logging.commonI18NLogger_$logger_zh_CN"
+}
+]
diff --git a/pom.xml b/pom.xml
index a6978378cf0..581b77339da 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1063,7 +1063,6 @@
                             <extensions>true</extensions>
                             <configuration>
                                 <buildArgs>
-                                    <buildArg>-J-Xmx7g</buildArg>
                                     <buildArg>-H:+AddAllCharsets</buildArg>
                                 </buildArgs>
                                 <quickBuild>true</quickBuild>
diff --git a/test/native/native-image-filter/extra-filter.json 
b/test/native/native-image-filter/extra-filter.json
index 678ab3bf98e..facc03118b9 100644
--- a/test/native/native-image-filter/extra-filter.json
+++ b/test/native/native-image-filter/extra-filter.json
@@ -10,12 +10,15 @@
     {"includeClasses": "java.util.Properties"},
     {"excludeClasses": "javax.security.auth.x500.**"},
     {"excludeClasses": "javax.smartcardio.**"},
+    {"excludeClasses": "javax.xml.stream.**"},
     {"excludeClasses": "jdk.internal.misc.**"},
     {"excludeClasses": "sun.misc.**"},
     {"excludeClasses": "sun.nio.ch.**"},
     {"excludeClasses": "sun.security.**"},
 
     {"excludeClasses": "android.app.**"},
+    {"excludeClasses": "com.arjuna.**"},
+    {"excludeClasses": "com.atomikos.logging.**"},
     {"excludeClasses": "com.fasterxml.jackson.databind.**"},
     {"excludeClasses": "com.github.benmanes.caffeine.cache.**"},
     {"excludeClasses": "com.github.dockerjava.api.**"},
@@ -24,20 +27,24 @@
     {"excludeClasses": "com.microsoft.sqlserver.jdbc.**"},
     {"excludeClasses": "com.mysql.cj.**"},
     {"excludeClasses": "com.zaxxer.hikari.**"},
+    {"excludeClasses": "ch.qos.logback.classic.**"},
     {"excludeClasses": "io.grpc.**"},
     {"excludeClasses": "io.netty.**"},
     {"excludeClasses": "io.vertx.core.**"},
     {"excludeClasses": "groovy.**"},
     {"excludeClasses": "libcore.io.**"},
     {"excludeClasses": "org.apache.calcite.**"},
+    {"excludeClasses": "org.apache.logging.log4j.**"},
+    {"excludeClasses": "org.apache.log4j.**"},
     {"excludeClasses": "org.apache.zookeeper.**"},
     {"excludeClasses": "org.codehaus.groovy.**"},
     {"excludeClasses": "org.h2.**"},
+    {"excludeClasses": "org.jboss.logmanager.**"},
     {"excludeClasses": "org.locationtech.jts.geom.**"},
     {"excludeClasses": "org.opengauss.**"},
     {"excludeClasses": "org.postgresql.**"},
     {"excludeClasses": "org.robolectric.**"},
-    {"excludeClasses": "org.slf4j.event.**"},
+    {"excludeClasses": "org.slf4j.**"},
     {"excludeClasses": "org.testcontainers.**"}
   ],
   "regexRules": [
diff --git a/test/native/pom.xml b/test/native/pom.xml
index 1ef2d6ee809..79fac3e641e 100644
--- a/test/native/pom.xml
+++ b/test/native/pom.xml
@@ -57,6 +57,36 @@
             <version>${vertx.version}</version>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.apache.shardingsphere</groupId>
+            <artifactId>shardingsphere-transaction-xa-core</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.shardingsphere</groupId>
+            <artifactId>shardingsphere-transaction-xa-narayana</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.jboss.narayana.jta</groupId>
+            <artifactId>jta</artifactId>
+            <version>${narayana.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.jboss.narayana.jts</groupId>
+            <artifactId>narayana-jts-integration</artifactId>
+            <version>${narayana.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.jboss</groupId>
+            <artifactId>jboss-transaction-spi</artifactId>
+            <version>${jboss-transaction-spi.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.jboss.logging</groupId>
+            <artifactId>jboss-logging</artifactId>
+            <version>${jboss-logging.version}</version>
+        </dependency>
         
         <dependency>
             <groupId>org.awaitility</groupId>
diff --git 
a/test/native/src/test/java/org/apache/shardingsphere/test/natived/jdbc/mode/cluster/EtcdTest.java
 
b/test/native/src/test/java/org/apache/shardingsphere/test/natived/jdbc/modes/cluster/EtcdTest.java
similarity index 97%
rename from 
test/native/src/test/java/org/apache/shardingsphere/test/natived/jdbc/mode/cluster/EtcdTest.java
rename to 
test/native/src/test/java/org/apache/shardingsphere/test/natived/jdbc/modes/cluster/EtcdTest.java
index f6a15b9014c..5cda84ec35c 100644
--- 
a/test/native/src/test/java/org/apache/shardingsphere/test/natived/jdbc/mode/cluster/EtcdTest.java
+++ 
b/test/native/src/test/java/org/apache/shardingsphere/test/natived/jdbc/modes/cluster/EtcdTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.test.natived.jdbc.mode.cluster;
+package org.apache.shardingsphere.test.natived.jdbc.modes.cluster;
 
 import com.zaxxer.hikari.HikariConfig;
 import com.zaxxer.hikari.HikariDataSource;
@@ -91,7 +91,7 @@ class EtcdTest {
         
Awaitility.await().atMost(Duration.ofSeconds(30L)).ignoreExceptions().until(() 
-> verifyEtcdClusterRunning(clientEndpoint));
         HikariConfig config = new HikariConfig();
         
config.setDriverClassName("org.apache.shardingsphere.driver.ShardingSphereDriver");
-        
config.setJdbcUrl("jdbc:shardingsphere:classpath-system-props:test-native/yaml/mode/cluster/etcd.yaml");
+        
config.setJdbcUrl("jdbc:shardingsphere:classpath-system-props:test-native/yaml/modes/cluster/etcd.yaml");
         try {
             assertThat(System.getProperty(SYSTEM_PROP_KEY_PREFIX + 
"server-lists"), is(nullValue()));
             System.setProperty(SYSTEM_PROP_KEY_PREFIX + "server-lists", 
clientEndpoint.toString());
diff --git 
a/test/native/src/test/java/org/apache/shardingsphere/test/natived/jdbc/mode/cluster/ZookeeperTest.java
 
b/test/native/src/test/java/org/apache/shardingsphere/test/natived/jdbc/modes/cluster/ZookeeperTest.java
similarity index 97%
rename from 
test/native/src/test/java/org/apache/shardingsphere/test/natived/jdbc/mode/cluster/ZookeeperTest.java
rename to 
test/native/src/test/java/org/apache/shardingsphere/test/natived/jdbc/modes/cluster/ZookeeperTest.java
index b547e15ed54..90672759c62 100644
--- 
a/test/native/src/test/java/org/apache/shardingsphere/test/natived/jdbc/mode/cluster/ZookeeperTest.java
+++ 
b/test/native/src/test/java/org/apache/shardingsphere/test/natived/jdbc/modes/cluster/ZookeeperTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.test.natived.jdbc.mode.cluster;
+package org.apache.shardingsphere.test.natived.jdbc.modes.cluster;
 
 import com.zaxxer.hikari.HikariConfig;
 import com.zaxxer.hikari.HikariDataSource;
@@ -83,7 +83,7 @@ class ZookeeperTest {
         });
         HikariConfig config = new HikariConfig();
         
config.setDriverClassName("org.apache.shardingsphere.driver.ShardingSphereDriver");
-        
config.setJdbcUrl("jdbc:shardingsphere:classpath-system-props:test-native/yaml/mode/cluster/zookeeper.yaml");
+        
config.setJdbcUrl("jdbc:shardingsphere:classpath-system-props:test-native/yaml/modes/cluster/zookeeper.yaml");
         try {
             assertThat(System.getProperty(SYSTEM_PROP_KEY_PREFIX + 
"server-lists"), is(nullValue()));
             System.setProperty(SYSTEM_PROP_KEY_PREFIX + "server-lists", 
connectString);
diff --git 
a/test/native/src/test/java/org/apache/shardingsphere/test/natived/jdbc/transactions/xa/AtomikosTest.java
 
b/test/native/src/test/java/org/apache/shardingsphere/test/natived/jdbc/transactions/xa/AtomikosTest.java
new file mode 100644
index 00000000000..9c07794f55c
--- /dev/null
+++ 
b/test/native/src/test/java/org/apache/shardingsphere/test/natived/jdbc/transactions/xa/AtomikosTest.java
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.test.natived.jdbc.transactions.xa;
+
+import com.zaxxer.hikari.HikariConfig;
+import com.zaxxer.hikari.HikariDataSource;
+import org.apache.shardingsphere.test.natived.jdbc.commons.TestShardingService;
+import org.junit.jupiter.api.Test;
+
+import javax.sql.DataSource;
+import java.sql.SQLException;
+
+class AtomikosTest {
+    
+    private TestShardingService testShardingService;
+    
+    @Test
+    void assertShardingInAtomikosTransactions() throws SQLException {
+        HikariConfig config = new HikariConfig();
+        
config.setDriverClassName("org.apache.shardingsphere.driver.ShardingSphereDriver");
+        
config.setJdbcUrl("jdbc:shardingsphere:classpath:test-native/yaml/transactions/xa/atomikos.yaml");
+        DataSource dataSource = new HikariDataSource(config);
+        testShardingService = new TestShardingService(dataSource);
+        this.initEnvironment();
+        testShardingService.processSuccess();
+        testShardingService.cleanEnvironment();
+    }
+    
+    private void initEnvironment() throws SQLException {
+        
testShardingService.getOrderRepository().createTableIfNotExistsInMySQL();
+        
testShardingService.getOrderItemRepository().createTableIfNotExistsInMySQL();
+        testShardingService.getAddressRepository().createTableIfNotExists();
+        testShardingService.getOrderRepository().truncateTable();
+        testShardingService.getOrderItemRepository().truncateTable();
+        testShardingService.getAddressRepository().truncateTable();
+    }
+}
diff --git 
a/test/native/src/test/java/org/apache/shardingsphere/test/natived/jdbc/transactions/xa/NarayanaTest.java
 
b/test/native/src/test/java/org/apache/shardingsphere/test/natived/jdbc/transactions/xa/NarayanaTest.java
new file mode 100644
index 00000000000..5b7a76f3e15
--- /dev/null
+++ 
b/test/native/src/test/java/org/apache/shardingsphere/test/natived/jdbc/transactions/xa/NarayanaTest.java
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.test.natived.jdbc.transactions.xa;
+
+import com.zaxxer.hikari.HikariConfig;
+import com.zaxxer.hikari.HikariDataSource;
+import org.apache.shardingsphere.test.natived.jdbc.commons.TestShardingService;
+import org.junit.jupiter.api.Test;
+
+import javax.sql.DataSource;
+import java.sql.SQLException;
+
+class NarayanaTest {
+    
+    private TestShardingService testShardingService;
+    
+    @Test
+    void assertShardingInNarayanaTransactions() throws SQLException {
+        HikariConfig config = new HikariConfig();
+        
config.setDriverClassName("org.apache.shardingsphere.driver.ShardingSphereDriver");
+        
config.setJdbcUrl("jdbc:shardingsphere:classpath:test-native/yaml/transactions/xa/narayana.yaml");
+        DataSource dataSource = new HikariDataSource(config);
+        testShardingService = new TestShardingService(dataSource);
+        this.initEnvironment();
+        testShardingService.processSuccess();
+        testShardingService.cleanEnvironment();
+    }
+    
+    private void initEnvironment() throws SQLException {
+        
testShardingService.getOrderRepository().createTableIfNotExistsInMySQL();
+        
testShardingService.getOrderItemRepository().createTableIfNotExistsInMySQL();
+        testShardingService.getAddressRepository().createTableIfNotExists();
+        testShardingService.getOrderRepository().truncateTable();
+        testShardingService.getOrderItemRepository().truncateTable();
+        testShardingService.getAddressRepository().truncateTable();
+    }
+}
diff --git 
a/test/native/src/test/resources/META-INF/native-image/shardingsphere-test-native-test-metadata/resource-config.json
 
b/test/native/src/test/resources/META-INF/native-image/shardingsphere-test-native-test-metadata/resource-config.json
index 56bdea54015..d50b3c3a86b 100644
--- 
a/test/native/src/test/resources/META-INF/native-image/shardingsphere-test-native-test-metadata/resource-config.json
+++ 
b/test/native/src/test/resources/META-INF/native-image/shardingsphere-test-native-test-metadata/resource-config.json
@@ -34,11 +34,20 @@
     
"condition":{"typeReachable":"org.apache.shardingsphere.test.natived.jdbc.features.ShardingTest"},
     "pattern":"\\Qtest-native/yaml/features/sharding.yaml\\E"
   }, {
-    
"condition":{"typeReachable":"org.apache.shardingsphere.test.natived.jdbc.mode.cluster.ZookeeperTest"},
-    "pattern":"\\Qtest-native/yaml/mode/cluster/zookeeper.yaml\\E"
+    
"condition":{"typeReachable":"org.apache.shardingsphere.test.natived.jdbc.modes.cluster.ZookeeperTest"},
+    "pattern":"\\Qtest-native/yaml/modes/cluster/zookeeper.yaml\\E"
   }, {
-    
"condition":{"typeReachable":"org.apache.shardingsphere.test.natived.jdbc.mode.cluster.EtcdTest"},
-    "pattern":"\\Qtest-native/yaml/mode/cluster/etcd.yaml\\E"
+    
"condition":{"typeReachable":"org.apache.shardingsphere.test.natived.jdbc.modes.cluster.EtcdTest"},
+    "pattern":"\\Qtest-native/yaml/modes/cluster/etcd.yaml\\E"
+  }, {
+    
"condition":{"typeReachable":"org.apache.shardingsphere.test.natived.jdbc.transactions.xa.AtomikosTest"},
+    "pattern":"\\Qtest-native/yaml/transactions/xa/atomikos.yaml\\E"
+  }, {
+    
"condition":{"typeReachable":"org.apache.shardingsphere.test.natived.jdbc.transactions.xa.NarayanaTest"},
+    "pattern":"\\Qtest-native/yaml/transactions/xa/narayana.yaml\\E"
+  }, {
+    
"condition":{"typeReachable":"com.arjuna.common.util.propertyservice.FileLocator"},
+    "pattern":"\\Qjbossts-properties.xml\\E"
   }]},
   "bundles":[]
 }
diff --git a/test/native/src/test/resources/jbossts-properties.xml 
b/test/native/src/test/resources/jbossts-properties.xml
new file mode 100644
index 00000000000..75719774f3a
--- /dev/null
+++ b/test/native/src/test/resources/jbossts-properties.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to You under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~     http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd";>
+<!--suppress CheckTagEmptyBody -->
+<properties>
+    <entry key="CoordinatorEnvironmentBean.commitOnePhase">YES</entry>
+    <entry key="ObjectStoreEnvironmentBean.objectStoreDir">target</entry>
+    <entry 
key="com.arjuna.ats.arjuna.objectstore.objectStoreDir">target</entry>
+    <entry key="ObjectStoreEnvironmentBean.transactionSync">ON</entry>
+    <entry key="CoreEnvironmentBean.nodeIdentifier">1</entry>
+    <entry key="JTAEnvironmentBean.xaRecoveryNodes">1</entry>
+    <entry key="JTAEnvironmentBean.xaResourceOrphanFilterClassNames">
+        
com.arjuna.ats.internal.jta.recovery.arjunacore.JTATransactionLogXAResourceOrphanFilter
+        
com.arjuna.ats.internal.jta.recovery.arjunacore.JTANodeNameXAResourceOrphanFilter
+        
com.arjuna.ats.internal.jta.recovery.arjunacore.JTAActionStatusServiceXAResourceOrphanFilter
+    </entry>
+    <entry key="CoreEnvironmentBean.socketProcessIdPort">0</entry>
+    <entry key="RecoveryEnvironmentBean.recoveryModuleClassNames">
+        com.arjuna.ats.internal.arjuna.recovery.AtomicActionRecoveryModule
+        com.arjuna.ats.internal.jta.recovery.arjunacore.XARecoveryModule
+    </entry>
+    <entry key="RecoveryEnvironmentBean.expiryScannerClassNames">
+        
com.arjuna.ats.internal.arjuna.recovery.ExpiredTransactionStatusManagerScanner
+    </entry>
+    <entry key="RecoveryEnvironmentBean.recoveryPort">4712</entry>
+    <entry key="RecoveryEnvironmentBean.recoveryAddress"></entry>
+    <entry key="RecoveryEnvironmentBean.transactionStatusManagerPort">0</entry>
+    <entry 
key="RecoveryEnvironmentBean.transactionStatusManagerAddress"></entry>
+    <entry key="RecoveryEnvironmentBean.recoveryListener">NO</entry>
+    <entry key="RecoveryEnvironmentBean.recoveryBackoffPeriod">1</entry>
+</properties>
diff --git 
a/test/native/src/test/resources/test-native/yaml/mode/cluster/etcd.yaml 
b/test/native/src/test/resources/test-native/yaml/modes/cluster/etcd.yaml
similarity index 100%
rename from 
test/native/src/test/resources/test-native/yaml/mode/cluster/etcd.yaml
rename to 
test/native/src/test/resources/test-native/yaml/modes/cluster/etcd.yaml
diff --git 
a/test/native/src/test/resources/test-native/yaml/mode/cluster/zookeeper.yaml 
b/test/native/src/test/resources/test-native/yaml/modes/cluster/zookeeper.yaml
similarity index 100%
rename from 
test/native/src/test/resources/test-native/yaml/mode/cluster/zookeeper.yaml
rename to 
test/native/src/test/resources/test-native/yaml/modes/cluster/zookeeper.yaml
diff --git 
a/test/native/src/test/resources/test-native/yaml/transactions/xa/atomikos.yaml 
b/test/native/src/test/resources/test-native/yaml/transactions/xa/atomikos.yaml
new file mode 100644
index 00000000000..40d7c72fb9c
--- /dev/null
+++ 
b/test/native/src/test/resources/test-native/yaml/transactions/xa/atomikos.yaml
@@ -0,0 +1,82 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+mode:
+  type: Standalone
+  repository:
+    type: JDBC
+
+dataSources:
+  ds_0:
+    dataSourceClassName: com.zaxxer.hikari.HikariDataSource
+    driverClassName: org.h2.Driver
+    jdbcUrl: 
jdbc:h2:mem:xa_atomikos_sharding_ds_0;MODE=MYSQL;IGNORECASE=TRUE;CASE_INSENSITIVE_IDENTIFIERS=TRUE
+    username: root
+    password: 123456
+  ds_1:
+    dataSourceClassName: com.zaxxer.hikari.HikariDataSource
+    driverClassName: org.h2.Driver
+    jdbcUrl: 
jdbc:h2:mem:xa_atomikos_sharding_ds_1;MODE=MYSQL;IGNORECASE=TRUE;CASE_INSENSITIVE_IDENTIFIERS=TRUE
+    username: root
+    password: 123456
+  ds_2:
+    dataSourceClassName: com.zaxxer.hikari.HikariDataSource
+    driverClassName: org.h2.Driver
+    jdbcUrl: 
jdbc:h2:mem:xa_atomikos_sharding_ds_2;MODE=MYSQL;IGNORECASE=TRUE;CASE_INSENSITIVE_IDENTIFIERS=TRUE
+    username: root
+    password: 123456
+
+rules:
+- !SHARDING
+  tables:
+    t_order:
+      actualDataNodes:
+      keyGenerateStrategy:
+        column: order_id
+        keyGeneratorName: snowflake
+    t_order_item:
+      actualDataNodes:
+      keyGenerateStrategy:
+        column: order_item_id
+        keyGeneratorName: snowflake
+  defaultDatabaseStrategy:
+    standard:
+      shardingColumn: user_id
+      shardingAlgorithmName: inline
+  shardingAlgorithms:
+    inline:
+      type: CLASS_BASED
+      props:
+        strategy: STANDARD
+        algorithmClassName: 
org.apache.shardingsphere.test.natived.jdbc.commons.algorithm.ClassBasedInlineShardingAlgorithmFixture
+  keyGenerators:
+    snowflake:
+      type: SNOWFLAKE
+  auditors:
+    sharding_key_required_auditor:
+      type: DML_SHARDING_CONDITIONS
+
+- !BROADCAST
+  tables:
+    - t_address
+
+transaction:
+  defaultType: XA
+  providerType: Atomikos
+
+props:
+  sql-show: false
diff --git 
a/test/native/src/test/resources/test-native/yaml/transactions/xa/narayana.yaml 
b/test/native/src/test/resources/test-native/yaml/transactions/xa/narayana.yaml
new file mode 100644
index 00000000000..88edcd4fe93
--- /dev/null
+++ 
b/test/native/src/test/resources/test-native/yaml/transactions/xa/narayana.yaml
@@ -0,0 +1,82 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+mode:
+  type: Standalone
+  repository:
+    type: JDBC
+
+dataSources:
+  ds_0:
+    dataSourceClassName: com.zaxxer.hikari.HikariDataSource
+    driverClassName: org.h2.Driver
+    jdbcUrl: 
jdbc:h2:mem:xa_narayana_sharding_ds_0;MODE=MYSQL;IGNORECASE=TRUE;CASE_INSENSITIVE_IDENTIFIERS=TRUE
+    username: root
+    password: 123456
+  ds_1:
+    dataSourceClassName: com.zaxxer.hikari.HikariDataSource
+    driverClassName: org.h2.Driver
+    jdbcUrl: 
jdbc:h2:mem:xa_narayana_sharding_ds_1;MODE=MYSQL;IGNORECASE=TRUE;CASE_INSENSITIVE_IDENTIFIERS=TRUE
+    username: root
+    password: 123456
+  ds_2:
+    dataSourceClassName: com.zaxxer.hikari.HikariDataSource
+    driverClassName: org.h2.Driver
+    jdbcUrl: 
jdbc:h2:mem:xa_narayana_sharding_ds_2;MODE=MYSQL;IGNORECASE=TRUE;CASE_INSENSITIVE_IDENTIFIERS=TRUE
+    username: root
+    password: 123456
+
+rules:
+- !SHARDING
+  tables:
+    t_order:
+      actualDataNodes:
+      keyGenerateStrategy:
+        column: order_id
+        keyGeneratorName: snowflake
+    t_order_item:
+      actualDataNodes:
+      keyGenerateStrategy:
+        column: order_item_id
+        keyGeneratorName: snowflake
+  defaultDatabaseStrategy:
+    standard:
+      shardingColumn: user_id
+      shardingAlgorithmName: inline
+  shardingAlgorithms:
+    inline:
+      type: CLASS_BASED
+      props:
+        strategy: STANDARD
+        algorithmClassName: 
org.apache.shardingsphere.test.natived.jdbc.commons.algorithm.ClassBasedInlineShardingAlgorithmFixture
+  keyGenerators:
+    snowflake:
+      type: SNOWFLAKE
+  auditors:
+    sharding_key_required_auditor:
+      type: DML_SHARDING_CONDITIONS
+
+- !BROADCAST
+  tables:
+    - t_address
+
+transaction:
+  defaultType: XA
+  providerType: Narayana
+
+props:
+  sql-show: false

Reply via email to