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