提交 76653b17 编写于 作者: T terrymanu

refactor ShardingTransactionHandler

上级 cad9f69a
......@@ -241,7 +241,7 @@ public abstract class AbstractConnectionAdapter extends AbstractUnsupportedOpera
TransactionTypeHolder.clear();
int connectionSize = cachedConnections.size();
try {
forceExecuteTemplateForClose.execute(cachedConnections.entries(), new ForceExecuteCallback<Map.Entry<String, Connection>>() {
forceExecuteTemplateForClose.execute(cachedConnections.entries(), new ForceExecuteCallback<Entry<String, Connection>>() {
@Override
public void execute(final Entry<String, Connection> cachedConnections) throws SQLException {
......
......@@ -17,11 +17,12 @@
package io.shardingsphere.shardingjdbc.jdbc.core.fixed;
import io.shardingsphere.core.constant.DatabaseType;
import io.shardingsphere.transaction.api.TransactionType;
import io.shardingsphere.transaction.core.TransactionOperationType;
import io.shardingsphere.transaction.core.handler.ShardingTransactionHandlerAdapter;
import io.shardingsphere.transaction.core.manager.ShardingTransactionManager;
import javax.sql.DataSource;
import java.util.HashMap;
import java.util.Map;
......@@ -59,8 +60,11 @@ public final class FixedBaseShardingTransactionHandler extends ShardingTransacti
}
@Override
public ShardingTransactionManager getShardingTransactionManager() {
return null;
public void registerTransactionalResource(final DatabaseType databaseType, final Map<String, DataSource> dataSourceMap) {
}
@Override
public void clearTransactionalResource() {
}
@Override
......
......@@ -17,11 +17,12 @@
package io.shardingsphere.shardingjdbc.jdbc.core.fixed;
import io.shardingsphere.core.constant.DatabaseType;
import io.shardingsphere.transaction.api.TransactionType;
import io.shardingsphere.transaction.core.TransactionOperationType;
import io.shardingsphere.transaction.core.handler.ShardingTransactionHandlerAdapter;
import io.shardingsphere.transaction.core.manager.ShardingTransactionManager;
import javax.sql.DataSource;
import java.util.HashMap;
import java.util.Map;
......@@ -59,8 +60,11 @@ public final class FixedXAShardingTransactionHandler extends ShardingTransaction
}
@Override
public ShardingTransactionManager getShardingTransactionManager() {
return null;
public void registerTransactionalResource(final DatabaseType databaseType, final Map<String, DataSource> dataSourceMap) {
}
@Override
public void clearTransactionalResource() {
}
@Override
......
......@@ -17,11 +17,12 @@
package io.shardingsphere.shardingproxy.transport.mysql.packet.command.query.text.query;
import io.shardingsphere.core.constant.DatabaseType;
import io.shardingsphere.transaction.api.TransactionType;
import io.shardingsphere.transaction.core.TransactionOperationType;
import io.shardingsphere.transaction.core.handler.ShardingTransactionHandlerAdapter;
import io.shardingsphere.transaction.core.manager.ShardingTransactionManager;
import javax.sql.DataSource;
import java.util.HashMap;
import java.util.Map;
......@@ -54,8 +55,11 @@ public final class FixedXAShardingTransactionHandler extends ShardingTransaction
}
@Override
public ShardingTransactionManager getShardingTransactionManager() {
return null;
public void registerTransactionalResource(final DatabaseType databaseType, final Map<String, DataSource> dataSourceMap) {
}
@Override
public void clearTransactionalResource() {
}
@Override
......
......@@ -22,7 +22,6 @@ import io.shardingsphere.core.constant.DatabaseType;
import io.shardingsphere.core.exception.ShardingException;
import io.shardingsphere.transaction.api.TransactionType;
import io.shardingsphere.transaction.core.handler.ShardingTransactionHandlerAdapter;
import io.shardingsphere.transaction.core.manager.ShardingTransactionManager;
import io.shardingsphere.transaction.spi.xa.XATransactionManager;
import io.shardingsphere.transaction.xa.jta.connection.ShardingXAConnection;
import io.shardingsphere.transaction.xa.jta.datasource.ShardingXADataSource;
......@@ -38,6 +37,7 @@ import java.sql.Connection;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
/**
* XA sharding transaction handler.
......@@ -52,18 +52,28 @@ public final class XAShardingTransactionHandler extends ShardingTransactionHandl
private final XATransactionManager xaTransactionManager = XATransactionManagerSPILoader.getInstance().getTransactionManager();
@Override
public ShardingTransactionManager getShardingTransactionManager() {
return xaTransactionManager;
public TransactionType getTransactionType() {
return TransactionType.XA;
}
@Override
public TransactionType getTransactionType() {
return TransactionType.XA;
public void begin() {
xaTransactionManager.begin();
}
@Override
public void commit() {
xaTransactionManager.commit();
}
@Override
public void rollback() {
xaTransactionManager.rollback();
}
@Override
public void registerTransactionalResource(final DatabaseType databaseType, final Map<String, DataSource> dataSourceMap) {
for (Map.Entry<String, DataSource> entry : dataSourceMap.entrySet()) {
for (Entry<String, DataSource> entry : dataSourceMap.entrySet()) {
DataSource dataSource = entry.getValue();
if (dataSource instanceof AtomikosDataSourceBean) {
continue;
......
......@@ -21,7 +21,6 @@ import com.atomikos.jdbc.AtomikosDataSourceBean;
import io.shardingsphere.core.constant.DatabaseType;
import io.shardingsphere.core.constant.PoolType;
import io.shardingsphere.transaction.api.TransactionType;
import io.shardingsphere.transaction.core.manager.ShardingTransactionManager;
import io.shardingsphere.transaction.spi.xa.XATransactionManager;
import io.shardingsphere.transaction.xa.fixture.DataSourceUtils;
import io.shardingsphere.transaction.xa.jta.connection.ShardingXAConnection;
......@@ -43,6 +42,7 @@ import java.lang.reflect.Field;
import java.sql.Connection;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import static org.hamcrest.CoreMatchers.instanceOf;
import static org.hamcrest.CoreMatchers.is;
......@@ -83,12 +83,6 @@ public class XAShardingTransactionHandlerTest {
field.set(xaShardingTransactionHandler, xaTransactionManager);
}
@Test
public void assertGetTransactionManager() {
ShardingTransactionManager shardingTransactionManager = xaShardingTransactionHandler.getShardingTransactionManager();
assertThat(shardingTransactionManager, instanceOf(XATransactionManager.class));
}
@Test
public void assertGetTransactionType() {
assertThat(xaShardingTransactionHandler.getTransactionType(), is(TransactionType.XA));
......@@ -98,7 +92,7 @@ public class XAShardingTransactionHandlerTest {
public void assertRegisterXATransactionalDataSource() {
Map<String, DataSource> dataSourceMap = createDataSourceMap(PoolType.DRUID_XA, DatabaseType.MySQL);
xaShardingTransactionHandler.registerTransactionalResource(DatabaseType.MySQL, dataSourceMap);
for (Map.Entry<String, DataSource> entry : dataSourceMap.entrySet()) {
for (Entry<String, DataSource> entry : dataSourceMap.entrySet()) {
verify(xaTransactionManager).registerRecoveryResource(entry.getKey(), (XADataSource) entry.getValue());
}
}
......
......@@ -17,13 +17,11 @@
package io.shardingsphere.transaction.core.handler;
import io.shardingsphere.core.constant.DatabaseType;
import io.shardingsphere.transaction.spi.ShardingTransactionHandler;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Map;
/**
* Abstract class for sharding transaction handler.
......@@ -34,40 +32,6 @@ import java.util.Map;
public abstract class ShardingTransactionHandlerAdapter implements ShardingTransactionHandler {
@Override
public void begin() {
getShardingTransactionManager().begin();
}
@Override
public void commit() {
getShardingTransactionManager().commit();
}
@Override
public void rollback() {
getShardingTransactionManager().rollback();
}
/**
* Default implement for register transaction resource.
*/
@Override
public void registerTransactionalResource(final DatabaseType databaseType, final Map<String, DataSource> dataSourceMap) {
// adapter
}
/**
* Default implement for clear transactional resource.
*/
@Override
public void clearTransactionalResource() {
// adapter
}
/**
* Default implement for create connection.
*/
@Override
public Connection createConnection(final String dataSourceName, final DataSource dataSource) throws SQLException {
return dataSource.getConnection();
}
......
......@@ -27,6 +27,7 @@ import lombok.extern.slf4j.Slf4j;
import javax.sql.DataSource;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.ServiceLoader;
/**
......@@ -71,11 +72,12 @@ public final class ShardingTransactionHandlerRegistry {
/**
* Register transaction resource.
*
* @param databaseType database type
* @param dataSourceMap data source map
*/
public static void registerTransactionResource(final DatabaseType databaseType, final Map<String, DataSource> dataSourceMap) {
for (Map.Entry<TransactionType, ShardingTransactionHandler> entry : TRANSACTION_HANDLER_MAP.entrySet()) {
for (Entry<TransactionType, ShardingTransactionHandler> entry : TRANSACTION_HANDLER_MAP.entrySet()) {
entry.getValue().registerTransactionalResource(databaseType, dataSourceMap);
}
}
......
......@@ -19,7 +19,6 @@ package io.shardingsphere.transaction.spi;
import io.shardingsphere.core.constant.DatabaseType;
import io.shardingsphere.transaction.api.TransactionType;
import io.shardingsphere.transaction.core.manager.ShardingTransactionManager;
import javax.sql.DataSource;
import java.sql.Connection;
......@@ -34,6 +33,13 @@ import java.util.Map;
*/
public interface ShardingTransactionHandler {
/**
* Get transaction type.
*
* @return transaction type
*/
TransactionType getTransactionType();
/**
* Begin transaction.
*/
......@@ -49,20 +55,6 @@ public interface ShardingTransactionHandler {
*/
void rollback();
/**
* Get sharding transaction manager.
*
* @return sharding transaction manager
*/
ShardingTransactionManager getShardingTransactionManager();
/**
* Get transaction type.
*
* @return transaction type
*/
TransactionType getTransactionType();
/**
* Register transaction data source.
*
......
/*
* Copyright 2016-2018 shardingsphere.io.
* <p>
* Licensed 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.
* </p>
*/
package io.shardingsphere.transaction.core.handler;
import io.shardingsphere.core.constant.DatabaseType;
import io.shardingsphere.transaction.api.TransactionType;
import io.shardingsphere.transaction.core.manager.ShardingTransactionManager;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.junit.MockitoJUnitRunner;
import javax.sql.DataSource;
import java.sql.Connection;
import java.util.Map;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
@RunWith(MockitoJUnitRunner.class)
public class ShardingTransactionHandlerAdapterTest {
private FixedShardingTransactionHandler fixedShardingTransactionHandler = new FixedShardingTransactionHandler();
private ShardingTransactionManager shardingTransactionManager = fixedShardingTransactionHandler.getShardingTransactionManager();
@Test
public void assertBeginForXATransaction() {
fixedShardingTransactionHandler.begin();
verify(shardingTransactionManager).begin();
}
@Test
public void assertCommitForXATransaction() {
fixedShardingTransactionHandler.commit();
verify(shardingTransactionManager).commit();
}
@Test
public void assertRollbackXATransaction() {
fixedShardingTransactionHandler.rollback();
verify(shardingTransactionManager).rollback();
}
private static final class FixedShardingTransactionHandler extends ShardingTransactionHandlerAdapter {
private ShardingTransactionManager shardingTransactionManager = mock(ShardingTransactionManager.class);
@Override
public ShardingTransactionManager getShardingTransactionManager() {
return shardingTransactionManager;
}
@Override
public TransactionType getTransactionType() {
return null;
}
@Override
public void registerTransactionalResource(final DatabaseType databaseType, final Map<String, DataSource> dataSourceMap) {
}
@Override
public void clearTransactionalResource() {
}
@Override
public Connection createConnection(final String dataSourceName, final DataSource dataSource) {
return null;
}
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册