use of com.ctrip.platform.dal.dao.configure.DalConfigure in project dal by ctripcorp.
the class DalClientFactory method internalInitClientFactory.
private static void internalInitClientFactory(String path) throws Exception {
if (configureRef.get() != null) {
logger.warn("Dal Java Client Factory is already initialized.");
return;
}
synchronized (DalClientFactory.class) {
if (configureRef.get() != null) {
return;
}
DalConfigure config = null;
if (path == null) {
DalConfigLoader loader = ServiceLoaderHelper.getInstance(DalConfigLoader.class);
if (loader == null)
config = DalConfigureFactory.load();
else
config = loader.load();
logger.info("Successfully initialized Dal Java Client Factory");
} else {
config = DalConfigureFactory.load(path);
logger.info("Successfully initialized Dal Java Client Factory with " + path);
}
LogEntry.init();
DalRequestExecutor.init(config.getFacory().getProperty(DalRequestExecutor.MAX_POOL_SIZE), config.getFacory().getProperty(DalRequestExecutor.KEEP_ALIVE_TIME));
DalStatusManager.initialize(config);
configureRef.set(config);
}
}
use of com.ctrip.platform.dal.dao.configure.DalConfigure in project dal by ctripcorp.
the class DalClientFactory method getClient.
public static DalClient getClient(String logicDbName) {
if (logicDbName == null)
throw new NullPointerException("Database Set name can not be null");
DalConfigure config = getDalConfigure();
// Verify if it is existed
config.getDatabaseSet(logicDbName);
return new DalDirectClient(config, logicDbName);
}
use of com.ctrip.platform.dal.dao.configure.DalConfigure in project dal by ctripcorp.
the class ShardColModShardStrategyTest method testLocateDbShardByShard.
@Test
public void testLocateDbShardByShard() throws Exception {
DalConfigure configure = DalConfigureFactory.load();
ShardColModShardStrategy strategy = new ShardColModShardStrategy();
Map<String, String> settings = new HashMap<String, String>();
settings.put(ShardColModShardStrategy.COLUMNS, "id,id1");
settings.put(ShardColModShardStrategy.MOD, "2");
settings.put(ShardColModShardStrategy.TABLE_COLUMNS, "index,index1");
settings.put(ShardColModShardStrategy.TABLE_MOD, "4");
strategy.initialize(settings);
assertEquals("0", strategy.locateDbShard(configure, logicDbName, new DalHints().inShard("0")));
assertEquals("1", strategy.locateDbShard(configure, logicDbName, new DalHints().inShard("1")));
}
use of com.ctrip.platform.dal.dao.configure.DalConfigure in project dal by ctripcorp.
the class DalShardingHelper method shuffleByTable.
/**
* Shuffle by table shard id.
* @param logicDbName
* @param pojos
* @return
* @throws SQLException
*/
public static Map<String, Map<Integer, Map<String, ?>>> shuffleByTable(String logicDbName, String tableName, String tableShardId, Map<Integer, Map<String, ?>> pojos) throws SQLException {
Map<String, Map<Integer, Map<String, ?>>> shuffled = new HashMap<>();
DalConfigure config = DalClientFactory.getDalConfigure();
DatabaseSet dbSet = config.getDatabaseSet(logicDbName);
DalShardingStrategy strategy = dbSet.getStrategy();
DalHints tmpHints = new DalHints();
for (Integer index : pojos.keySet()) {
Map<String, ?> fields = pojos.get(index);
String shardId = tableShardId == null ? strategy.locateTableShard(config, logicDbName, tableName, tmpHints.setFields(fields)) : tableShardId;
Map<Integer, Map<String, ?>> pojosInShard = shuffled.get(shardId);
if (pojosInShard == null) {
pojosInShard = new LinkedHashMap<>();
shuffled.put(shardId, pojosInShard);
}
pojosInShard.put(index, fields);
}
return shuffled;
}
use of com.ctrip.platform.dal.dao.configure.DalConfigure in project dal by ctripcorp.
the class DalShardingHelper method shuffle.
/**
* Group pojos by shard id. Should be only used for DB that support sharding.
*
* @param logicDbName
* @param pojos
* @return Grouped pojos
* @throws SQLException In case locate shard id faild
*/
public static Map<String, Map<Integer, Map<String, ?>>> shuffle(String logicDbName, String shardId, List<Map<String, ?>> daoPojos) throws SQLException {
Map<String, Map<Integer, Map<String, ?>>> shuffled = new HashMap<>();
DalConfigure config = DalClientFactory.getDalConfigure();
DatabaseSet dbSet = config.getDatabaseSet(logicDbName);
DalShardingStrategy strategy = dbSet.getStrategy();
DalHints tmpHints = new DalHints();
for (int i = 0; i < daoPojos.size(); i++) {
Map<String, ?> pojo = daoPojos.get(i);
String tmpShardId = shardId == null ? strategy.locateDbShard(config, logicDbName, tmpHints.setFields(pojo)) : shardId;
dbSet.validate(tmpShardId);
Map<Integer, Map<String, ?>> pojosInShard = shuffled.get(tmpShardId);
if (pojosInShard == null) {
pojosInShard = new LinkedHashMap<>();
shuffled.put(tmpShardId, pojosInShard);
}
pojosInShard.put(i, pojo);
}
detectDistributedTransaction(shuffled.keySet());
return shuffled;
}
Aggregations