提交 5a5c0545 编写于 作者: Z zhaojun 提交者: Liang Zhang

using original XADataSource directly for XA unit test (#3525)

* make SingleXADataSource instanced by XAdDtaSource

* using XADataSource for asserting SingleXADataSource

* remove unused datasource

* remove unused pom
上级 82ceff81
...@@ -90,9 +90,7 @@ ...@@ -90,9 +90,7 @@
<logback.version>1.2.0</logback.version> <logback.version>1.2.0</logback.version>
<hikari-cp.version>2.4.11</hikari-cp.version> <hikari-cp.version>2.4.11</hikari-cp.version>
<alibaba.druid.version>1.1.11</alibaba.druid.version>
<commons-dbcp2.version>2.2.0</commons-dbcp2.version> <commons-dbcp2.version>2.2.0</commons-dbcp2.version>
<tomcat-dbcp.version>9.0.14</tomcat-dbcp.version>
<commons-pool.version>1.6</commons-pool.version> <commons-pool.version>1.6</commons-pool.version>
<h2.version>1.4.196</h2.version> <h2.version>1.4.196</h2.version>
<mysql-connector-java.version>5.1.47</mysql-connector-java.version> <mysql-connector-java.version>5.1.47</mysql-connector-java.version>
...@@ -382,12 +380,6 @@ ...@@ -382,12 +380,6 @@
<version>${hikari-cp.version}</version> <version>${hikari-cp.version}</version>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${alibaba.druid.version}</version>
<scope>test</scope>
</dependency>
<dependency> <dependency>
<groupId>commons-pool</groupId> <groupId>commons-pool</groupId>
<artifactId>commons-pool</artifactId> <artifactId>commons-pool</artifactId>
...@@ -406,12 +398,6 @@ ...@@ -406,12 +398,6 @@
</exclusions> </exclusions>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-dbcp</artifactId>
<version>${tomcat-dbcp.version}</version>
<scope>test</scope>
</dependency>
<dependency> <dependency>
<groupId>org.apache.curator</groupId> <groupId>org.apache.curator</groupId>
<artifactId>curator-test</artifactId> <artifactId>curator-test</artifactId>
......
...@@ -59,14 +59,6 @@ ...@@ -59,14 +59,6 @@
<groupId>org.apache.commons</groupId> <groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId> <artifactId>commons-dbcp2</artifactId>
</dependency> </dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-dbcp</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
</dependency>
<dependency> <dependency>
<groupId>com.h2database</groupId> <groupId>com.h2database</groupId>
<artifactId>h2</artifactId> <artifactId>h2</artifactId>
......
...@@ -47,6 +47,14 @@ public final class SingleXADataSource extends AbstractUnsupportedSingleXADataSou ...@@ -47,6 +47,14 @@ public final class SingleXADataSource extends AbstractUnsupportedSingleXADataSou
private final boolean isOriginalXADataSource; private final boolean isOriginalXADataSource;
public SingleXADataSource(final DatabaseType databaseType, final String resourceName, final XADataSource xaDataSource) {
this.databaseType = databaseType;
this.resourceName = resourceName;
this.xaDataSource = xaDataSource;
this.originalDataSource = null;
this.isOriginalXADataSource = true;
}
public SingleXADataSource(final DatabaseType databaseType, final String resourceName, final DataSource dataSource) { public SingleXADataSource(final DatabaseType databaseType, final String resourceName, final DataSource dataSource) {
this.databaseType = databaseType; this.databaseType = databaseType;
this.resourceName = resourceName; this.resourceName = resourceName;
......
...@@ -17,7 +17,6 @@ ...@@ -17,7 +17,6 @@
package org.apache.shardingsphere.transaction.xa; package org.apache.shardingsphere.transaction.xa;
import com.alibaba.druid.pool.xa.DruidXADataSource;
import com.atomikos.jdbc.AtomikosDataSourceBean; import com.atomikos.jdbc.AtomikosDataSourceBean;
import com.zaxxer.hikari.HikariDataSource; import com.zaxxer.hikari.HikariDataSource;
import lombok.SneakyThrows; import lombok.SneakyThrows;
...@@ -37,7 +36,6 @@ import org.junit.runner.RunWith; ...@@ -37,7 +36,6 @@ import org.junit.runner.RunWith;
import org.mockito.Mock; import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner; import org.mockito.junit.MockitoJUnitRunner;
import javax.sql.DataSource;
import javax.sql.XADataSource; import javax.sql.XADataSource;
import javax.transaction.Status; import javax.transaction.Status;
import javax.transaction.SystemException; import javax.transaction.SystemException;
...@@ -85,25 +83,16 @@ public final class XAShardingTransactionManagerTest { ...@@ -85,25 +83,16 @@ public final class XAShardingTransactionManagerTest {
assertThat(xaShardingTransactionManager.getTransactionType(), is(TransactionType.XA)); assertThat(xaShardingTransactionManager.getTransactionType(), is(TransactionType.XA));
} }
@Test
public void assertRegisterXATransactionalDataSources() {
Collection<ResourceDataSource> resourceDataSources = createResourceDataSources(DruidXADataSource.class, DatabaseTypes.getActualDatabaseType("MySQL"));
xaShardingTransactionManager.init(DatabaseTypes.getActualDatabaseType("MySQL"), resourceDataSources);
for (ResourceDataSource each : resourceDataSources) {
verify(xaTransactionManager).registerRecoveryResource(each.getUniqueResourceName(), (XADataSource) each.getDataSource());
}
}
@Test @Test
public void assertRegisterAtomikosDataSourceBeans() { public void assertRegisterAtomikosDataSourceBeans() {
xaShardingTransactionManager.init(DatabaseTypes.getActualDatabaseType("MySQL"), createAtomikosDataSourceBeanResource()); xaShardingTransactionManager.init(DatabaseTypes.getActualDatabaseType("H2"), createAtomikosDataSourceBeanResource());
verify(xaTransactionManager, times(0)).registerRecoveryResource(anyString(), any(XADataSource.class)); verify(xaTransactionManager, times(0)).registerRecoveryResource(anyString(), any(XADataSource.class));
} }
@Test @Test
public void assertRegisterNoneXATransactionalDAtaSources() { public void assertRegisterNoneXATransactionalDAtaSources() {
Collection<ResourceDataSource> resourceDataSources = createResourceDataSources(HikariDataSource.class, DatabaseTypes.getActualDatabaseType("MySQL")); Collection<ResourceDataSource> resourceDataSources = createResourceDataSources(DatabaseTypes.getActualDatabaseType("H2"));
xaShardingTransactionManager.init(DatabaseTypes.getActualDatabaseType("MySQL"), resourceDataSources); xaShardingTransactionManager.init(DatabaseTypes.getActualDatabaseType("H2"), resourceDataSources);
Map<String, SingleXADataSource> cachedXADatasourceMap = getCachedSingleXADataSourceMap(); Map<String, SingleXADataSource> cachedXADatasourceMap = getCachedSingleXADataSourceMap();
assertThat(cachedXADatasourceMap.size(), is(2)); assertThat(cachedXADatasourceMap.size(), is(2));
} }
...@@ -202,10 +191,10 @@ public final class XAShardingTransactionManagerTest { ...@@ -202,10 +191,10 @@ public final class XAShardingTransactionManagerTest {
return result; return result;
} }
private Collection<ResourceDataSource> createResourceDataSources(final Class<? extends DataSource> dataSourceClass, final DatabaseType databaseType) { private Collection<ResourceDataSource> createResourceDataSources(final DatabaseType databaseType) {
List<ResourceDataSource> result = new LinkedList<>(); List<ResourceDataSource> result = new LinkedList<>();
result.add(new ResourceDataSource("ds1", DataSourceUtils.build(dataSourceClass, databaseType, "demo_ds_1"))); result.add(new ResourceDataSource("ds1", DataSourceUtils.build(HikariDataSource.class, databaseType, "demo_ds_1")));
result.add(new ResourceDataSource("ds2", DataSourceUtils.build(dataSourceClass, databaseType, "demo_ds_2"))); result.add(new ResourceDataSource("ds2", DataSourceUtils.build(HikariDataSource.class, databaseType, "demo_ds_2")));
return result; return result;
} }
......
...@@ -17,13 +17,19 @@ ...@@ -17,13 +17,19 @@
package org.apache.shardingsphere.transaction.xa.fixture; package org.apache.shardingsphere.transaction.xa.fixture;
import com.alibaba.druid.pool.DruidDataSource; import com.atomikos.beans.PropertyUtils;
import com.alibaba.druid.pool.xa.DruidXADataSource;
import com.zaxxer.hikari.HikariDataSource; import com.zaxxer.hikari.HikariDataSource;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.SneakyThrows;
import org.apache.shardingsphere.core.config.DatabaseAccessConfiguration;
import org.apache.shardingsphere.spi.database.DatabaseType; import org.apache.shardingsphere.spi.database.DatabaseType;
import org.apache.shardingsphere.transaction.xa.jta.datasource.XADataSourceFactory;
import org.apache.shardingsphere.transaction.xa.jta.datasource.properties.XADataSourceDefinition;
import org.apache.shardingsphere.transaction.xa.jta.datasource.properties.XADataSourceDefinitionFactory;
import javax.sql.DataSource; import javax.sql.DataSource;
import javax.sql.XADataSource;
import java.util.Properties;
/** /**
* Data source utility. * Data source utility.
...@@ -45,18 +51,6 @@ public final class DataSourceUtils { ...@@ -45,18 +51,6 @@ public final class DataSourceUtils {
if (HikariDataSource.class == dataSourceClass) { if (HikariDataSource.class == dataSourceClass) {
return createHikariDataSource(databaseType, databaseName); return createHikariDataSource(databaseType, databaseName);
} }
if (org.apache.commons.dbcp2.BasicDataSource.class == dataSourceClass) {
return createBasicDataSource(databaseType, databaseName);
}
if (org.apache.tomcat.dbcp.dbcp2.BasicDataSource.class == dataSourceClass) {
return createTomcatDataSource(databaseType, databaseName);
}
if (DruidXADataSource.class == dataSourceClass) {
return createDruidXADataSource(databaseType, databaseName);
}
if (DruidDataSource.class == dataSourceClass) {
return createDruidDataSource(databaseType, databaseName);
}
throw new UnsupportedOperationException(dataSourceClass.getClass().getName()); throw new UnsupportedOperationException(dataSourceClass.getClass().getName());
} }
...@@ -72,57 +66,21 @@ public final class DataSourceUtils { ...@@ -72,57 +66,21 @@ public final class DataSourceUtils {
return result; return result;
} }
private static org.apache.commons.dbcp2.BasicDataSource createBasicDataSource(final DatabaseType databaseType, final String databaseName) { /**
org.apache.commons.dbcp2.BasicDataSource result = new org.apache.commons.dbcp2.BasicDataSource(); * Get XA data source.
result.setUrl(getURL(databaseType, databaseName)); * @param databaseType database type
result.setUsername("root"); * @param databaseName database name
result.setPassword("root"); * @return XA data source
result.setMaxTotal(10); */
result.setMinIdle(2); @SneakyThrows
result.setMaxWaitMillis(15 * 1000); public static XADataSource createXADataSource(final DatabaseType databaseType, final String databaseName) {
result.setMinEvictableIdleTimeMillis(40 * 1000); XADataSource result = XADataSourceFactory.build(databaseType);
result.setTimeBetweenEvictionRunsMillis(20 * 1000); XADataSourceDefinition xaDataSourceDefinition = XADataSourceDefinitionFactory.getXADataSourceDefinition(databaseType);
result.setMaxConnLifetimeMillis(500 * 1000); Properties xaProperties = xaDataSourceDefinition.getXAProperties(new DatabaseAccessConfiguration(getURL(databaseType, databaseName), "root", "root"));
return result; PropertyUtils.setProperties(result, xaProperties);
}
private static org.apache.tomcat.dbcp.dbcp2.BasicDataSource createTomcatDataSource(final DatabaseType databaseType, final String databaseName) {
org.apache.tomcat.dbcp.dbcp2.BasicDataSource result = new org.apache.tomcat.dbcp.dbcp2.BasicDataSource();
result.setUrl(getURL(databaseType, databaseName));
result.setUsername("root");
result.setPassword("root");
result.setMaxTotal(10);
result.setMinIdle(2);
result.setMaxWaitMillis(15 * 1000);
result.setMinEvictableIdleTimeMillis(40 * 1000);
result.setTimeBetweenEvictionRunsMillis(20 * 1000);
result.setMaxConnLifetimeMillis(500 * 1000);
return result;
}
private static DruidXADataSource createDruidXADataSource(final DatabaseType databaseType, final String databaseName) {
DruidXADataSource result = new DruidXADataSource();
configDruidDataSource(result, databaseType, databaseName);
return result;
}
private static DruidDataSource createDruidDataSource(final DatabaseType databaseType, final String databaseName) {
DruidDataSource result = new DruidDataSource();
configDruidDataSource(result, databaseType, databaseName);
return result; return result;
} }
private static void configDruidDataSource(final DruidDataSource druidDataSource, final DatabaseType databaseType, final String databaseName) {
druidDataSource.setUrl(getURL(databaseType, databaseName));
druidDataSource.setUsername("root");
druidDataSource.setPassword("root");
druidDataSource.setMaxActive(10);
druidDataSource.setMinIdle(2);
druidDataSource.setMaxWait(15 * 1000);
druidDataSource.setMinEvictableIdleTimeMillis(40 * 1000);
druidDataSource.setTimeBetweenEvictionRunsMillis(20 * 1000);
}
private static String getURL(final DatabaseType databaseType, final String databaseName) { private static String getURL(final DatabaseType databaseType, final String databaseName) {
switch (databaseType.getName()) { switch (databaseType.getName()) {
case "MySQL": case "MySQL":
......
...@@ -17,7 +17,6 @@ ...@@ -17,7 +17,6 @@
package org.apache.shardingsphere.transaction.xa.jta.datasource; package org.apache.shardingsphere.transaction.xa.jta.datasource;
import com.alibaba.druid.pool.xa.DruidXADataSource;
import com.zaxxer.hikari.HikariDataSource; import com.zaxxer.hikari.HikariDataSource;
import org.apache.shardingsphere.core.database.DatabaseTypes; import org.apache.shardingsphere.core.database.DatabaseTypes;
import org.apache.shardingsphere.transaction.xa.fixture.DataSourceUtils; import org.apache.shardingsphere.transaction.xa.fixture.DataSourceUtils;
...@@ -39,10 +38,10 @@ public final class SingleXADataSourceTest { ...@@ -39,10 +38,10 @@ public final class SingleXADataSourceTest {
@Test @Test
public void assertBuildSingleXADataSourceOfXA() { public void assertBuildSingleXADataSourceOfXA() {
DataSource dataSource = DataSourceUtils.build(DruidXADataSource.class, DatabaseTypes.getActualDatabaseType("MySQL"), "ds1"); XADataSource xaDataSource = DataSourceUtils.createXADataSource(DatabaseTypes.getActualDatabaseType("H2"), "ds1");
SingleXADataSource actual = new SingleXADataSource(DatabaseTypes.getActualDatabaseType("MySQL"), "ds1", dataSource); SingleXADataSource actual = new SingleXADataSource(DatabaseTypes.getActualDatabaseType("H2"), "ds1", xaDataSource);
assertThat(actual.getResourceName(), is("ds1")); assertThat(actual.getResourceName(), is("ds1"));
assertThat(actual.getXaDataSource(), is((XADataSource) dataSource)); assertThat(actual.getXaDataSource(), is(xaDataSource));
} }
@Test @Test
...@@ -58,8 +57,8 @@ public final class SingleXADataSourceTest { ...@@ -58,8 +57,8 @@ public final class SingleXADataSourceTest {
@Test @Test
public void assertGetXAConnectionOfXA() throws SQLException { public void assertGetXAConnectionOfXA() throws SQLException {
DataSource dataSource = DataSourceUtils.build(DruidXADataSource.class, DatabaseTypes.getActualDatabaseType("H2"), "ds1"); XADataSource xaDataSource = DataSourceUtils.createXADataSource(DatabaseTypes.getActualDatabaseType("H2"), "ds1");
SingleXADataSource shardingXADataSource = new SingleXADataSource(DatabaseTypes.getActualDatabaseType("H2"), "ds1", dataSource); SingleXADataSource shardingXADataSource = new SingleXADataSource(DatabaseTypes.getActualDatabaseType("H2"), "ds1", xaDataSource);
SingleXAConnection actual = shardingXADataSource.getXAConnection(); SingleXAConnection actual = shardingXADataSource.getXAConnection();
assertThat(actual.getConnection(), instanceOf(Connection.class)); assertThat(actual.getConnection(), instanceOf(Connection.class));
} }
...@@ -74,42 +73,42 @@ public final class SingleXADataSourceTest { ...@@ -74,42 +73,42 @@ public final class SingleXADataSourceTest {
@Test(expected = SQLFeatureNotSupportedException.class) @Test(expected = SQLFeatureNotSupportedException.class)
public void assertGetLoginTimeout() throws SQLException { public void assertGetLoginTimeout() throws SQLException {
DataSource dataSource = DataSourceUtils.build(DruidXADataSource.class, DatabaseTypes.getActualDatabaseType("H2"), "ds1"); XADataSource xaDataSource = XADataSourceFactory.build(DatabaseTypes.getActualDatabaseType("H2"));
SingleXADataSource shardingXADataSource = new SingleXADataSource(DatabaseTypes.getActualDatabaseType("H2"), "ds1", dataSource); SingleXADataSource shardingXADataSource = new SingleXADataSource(DatabaseTypes.getActualDatabaseType("H2"), "ds1", xaDataSource);
shardingXADataSource.getLoginTimeout(); shardingXADataSource.getLoginTimeout();
} }
@Test(expected = SQLFeatureNotSupportedException.class) @Test(expected = SQLFeatureNotSupportedException.class)
public void assertSetLogWriter() throws SQLException { public void assertSetLogWriter() throws SQLException {
DataSource dataSource = DataSourceUtils.build(DruidXADataSource.class, DatabaseTypes.getActualDatabaseType("H2"), "ds1"); DataSource dataSource = DataSourceUtils.build(HikariDataSource.class, DatabaseTypes.getActualDatabaseType("H2"), "ds1");
SingleXADataSource shardingXADataSource = new SingleXADataSource(DatabaseTypes.getActualDatabaseType("H2"), "ds1", dataSource); SingleXADataSource shardingXADataSource = new SingleXADataSource(DatabaseTypes.getActualDatabaseType("H2"), "ds1", dataSource);
shardingXADataSource.setLogWriter(null); shardingXADataSource.setLogWriter(null);
} }
@Test(expected = SQLFeatureNotSupportedException.class) @Test(expected = SQLFeatureNotSupportedException.class)
public void assertSetLoginTimeout() throws SQLException { public void assertSetLoginTimeout() throws SQLException {
DataSource dataSource = DataSourceUtils.build(DruidXADataSource.class, DatabaseTypes.getActualDatabaseType("H2"), "ds1"); DataSource dataSource = DataSourceUtils.build(HikariDataSource.class, DatabaseTypes.getActualDatabaseType("H2"), "ds1");
SingleXADataSource shardingXADataSource = new SingleXADataSource(DatabaseTypes.getActualDatabaseType("H2"), "ds1", dataSource); SingleXADataSource shardingXADataSource = new SingleXADataSource(DatabaseTypes.getActualDatabaseType("H2"), "ds1", dataSource);
shardingXADataSource.setLoginTimeout(10); shardingXADataSource.setLoginTimeout(10);
} }
@Test(expected = SQLFeatureNotSupportedException.class) @Test(expected = SQLFeatureNotSupportedException.class)
public void assertGetParentLogger() throws SQLException { public void assertGetParentLogger() throws SQLException {
DataSource dataSource = DataSourceUtils.build(DruidXADataSource.class, DatabaseTypes.getActualDatabaseType("H2"), "ds1"); DataSource dataSource = DataSourceUtils.build(HikariDataSource.class, DatabaseTypes.getActualDatabaseType("H2"), "ds1");
SingleXADataSource shardingXADataSource = new SingleXADataSource(DatabaseTypes.getActualDatabaseType("H2"), "ds1", dataSource); SingleXADataSource shardingXADataSource = new SingleXADataSource(DatabaseTypes.getActualDatabaseType("H2"), "ds1", dataSource);
shardingXADataSource.getParentLogger(); shardingXADataSource.getParentLogger();
} }
@Test(expected = SQLFeatureNotSupportedException.class) @Test(expected = SQLFeatureNotSupportedException.class)
public void assertGetLogWriter() throws SQLException { public void assertGetLogWriter() throws SQLException {
DataSource dataSource = DataSourceUtils.build(DruidXADataSource.class, DatabaseTypes.getActualDatabaseType("H2"), "ds1"); DataSource dataSource = DataSourceUtils.build(HikariDataSource.class, DatabaseTypes.getActualDatabaseType("H2"), "ds1");
SingleXADataSource shardingXADataSource = new SingleXADataSource(DatabaseTypes.getActualDatabaseType("H2"), "ds1", dataSource); SingleXADataSource shardingXADataSource = new SingleXADataSource(DatabaseTypes.getActualDatabaseType("H2"), "ds1", dataSource);
shardingXADataSource.getLogWriter(); shardingXADataSource.getLogWriter();
} }
@Test(expected = SQLFeatureNotSupportedException.class) @Test(expected = SQLFeatureNotSupportedException.class)
public void assertGetXAConnectionByUserAndPassword() throws SQLException { public void assertGetXAConnectionByUserAndPassword() throws SQLException {
DataSource dataSource = DataSourceUtils.build(DruidXADataSource.class, DatabaseTypes.getActualDatabaseType("H2"), "ds1"); DataSource dataSource = DataSourceUtils.build(HikariDataSource.class, DatabaseTypes.getActualDatabaseType("H2"), "ds1");
SingleXADataSource shardingXADataSource = new SingleXADataSource(DatabaseTypes.getActualDatabaseType("H2"), "ds1", dataSource); SingleXADataSource shardingXADataSource = new SingleXADataSource(DatabaseTypes.getActualDatabaseType("H2"), "ds1", dataSource);
shardingXADataSource.getXAConnection("root", "root"); shardingXADataSource.getXAConnection("root", "root");
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册