/*
* @(#)ShardedSqlSessionTests.java 2012-8-7 下午3:55:58
*
* Copyright (c) 2011-2012 Makersoft.org all rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
*
*/
package org.makersoft.shards.unit.session;
import java.io.Reader;
import java.util.ArrayList;
import java.util.List;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.RowBounds;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
import org.makersoft.shards.ShardId;
import org.makersoft.shards.cfg.ShardConfiguration;
import org.makersoft.shards.cfg.impl.ShardConfigurationImpl;
import org.makersoft.shards.domain.shard0.User;
import org.makersoft.shards.session.impl.ShardedSqlSessionFactoryBuilder;
import org.makersoft.shards.strategy.ShardStrategy;
import org.makersoft.shards.strategy.ShardStrategyFactory;
import org.makersoft.shards.strategy.ShardStrategyImpl;
import org.makersoft.shards.strategy.UserShardStrategyFactory;
import org.makersoft.shards.strategy.access.ShardAccessStrategy;
import org.makersoft.shards.strategy.access.impl.SequentialShardAccessStrategy;
import org.makersoft.shards.strategy.reduce.ShardReduceStrategy;
import org.makersoft.shards.strategy.resolution.ShardResolutionStrategy;
import org.makersoft.shards.strategy.resolution.impl.AllShardsShardResolutionStrategy;
import org.makersoft.shards.strategy.selection.ShardSelectionStrategy;
import org.makersoft.shards.unit.BaseTest;
/**
* Unit test for
* <p>
* ShardedSqlSession
* </p>
*
* @version 2012-8-7
* @author Feng Kuok
*/
public class ShardedSqlSessionTests extends BaseTest {
private static SqlSessionFactory factory;
@BeforeClass
public static void setup() throws Exception {
List<ShardConfiguration> shardConfigs = new ArrayList<ShardConfiguration>();
final String resource_0 = "mybatis/mybatis-config-0.xml";
final String resource_1 = "mybatis/mybatis-config-1.xml";
final String resource_2 = "mybatis/mybatis-config-2.xml";
final Reader reader_0 = Resources.getResourceAsReader(resource_0);
final Reader reader_1 = Resources.getResourceAsReader(resource_1);
final Reader reader_2 = Resources.getResourceAsReader(resource_2);
SqlSessionFactory sqlMapper_0 = new SqlSessionFactoryBuilder().build(reader_0);
SqlSessionFactory sqlMapper_1 = new SqlSessionFactoryBuilder().build(reader_1);
SqlSessionFactory sqlMapper_2 = new SqlSessionFactoryBuilder().build(reader_2);
shardConfigs.add(new ShardConfigurationImpl(0, sqlMapper_0.getConfiguration()
.getEnvironment().getDataSource(), sqlMapper_0));
shardConfigs.add(new ShardConfigurationImpl(1, sqlMapper_1.getConfiguration()
.getEnvironment().getDataSource(), sqlMapper_1));
shardConfigs.add(new ShardConfigurationImpl(2, sqlMapper_2.getConfiguration()
.getEnvironment().getDataSource(), sqlMapper_2));
factory = new ShardedSqlSessionFactoryBuilder().build(shardConfigs,
new UserShardStrategyFactory());
Assert.assertNotNull(factory);
factory = new ShardedSqlSessionFactoryBuilder().build(shardConfigs,
new ShardStrategyFactory() {
@Override
public ShardStrategy newShardStrategy(List<ShardId> shardIds) {
ShardSelectionStrategy pss = new ShardSelectionStrategy() {
@Override
public ShardId selectShardIdForNewObject(String statement, Object obj) {
return null;
}
};
ShardResolutionStrategy prs = new AllShardsShardResolutionStrategy(shardIds);
ShardAccessStrategy pas = new SequentialShardAccessStrategy();
ShardReduceStrategy srs = new ShardReduceStrategy() {
@Override
public List<Object> reduce(String statement, Object parameter,
RowBounds rowBounds, List<Object> values) {
return values;
}
};
return new ShardStrategyImpl(pss, prs, pas, srs);
}
});
}
@Test
public void testSelectAllUsers() throws Exception {
SqlSession session = factory.openSession();
try {
List<User> users = session.selectList("org.makersoft.shards.mapper.shard0.UserMapper.findAll");
Assert.assertEquals(0, users.size());
} finally {
session.close();
}
}
}