Java tutorial
/* * Copyright 2016 Santanu Sinha <santanu.sinha@gmail.com> * * 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. * */ package io.dropwizard.sharding.dao; import com.google.common.collect.Lists; import io.dropwizard.sharding.dao.testdata.entities.RelationalEntity; import io.dropwizard.sharding.sharding.ShardManager; import io.dropwizard.sharding.sharding.impl.ConsistentHashBucketIdExtractor; import org.hibernate.SessionFactory; import org.hibernate.boot.registry.StandardServiceRegistry; import org.hibernate.boot.registry.StandardServiceRegistryBuilder; import org.hibernate.cfg.Configuration; import org.hibernate.criterion.DetachedCriteria; import org.junit.After; import org.junit.Before; import org.junit.Test; import java.util.List; import static org.junit.Assert.assertEquals; public class RelationalDaoTest { private List<SessionFactory> sessionFactories = Lists.newArrayList(); private RelationalDao<RelationalEntity> relationalDao; private SessionFactory buildSessionFactory(String dbName) { Configuration configuration = new Configuration(); configuration.setProperty("hibernate.dialect", "org.hibernate.dialect.H2Dialect"); configuration.setProperty("hibernate.connection.driver_class", "org.h2.Driver"); configuration.setProperty("hibernate.connection.url", "jdbc:h2:mem:" + dbName); configuration.setProperty("hibernate.hbm2ddl.auto", "create"); configuration.setProperty("hibernate.current_session_context_class", "managed"); configuration.addAnnotatedClass(RelationalEntity.class); StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder() .applySettings(configuration.getProperties()).build(); return configuration.buildSessionFactory(serviceRegistry); } @Before public void before() { for (int i = 0; i < 16; i++) { sessionFactories.add(buildSessionFactory(String.format("db_%d", i))); } final ShardManager shardManager = new ShardManager(sessionFactories.size()); relationalDao = new RelationalDao<>(sessionFactories, RelationalEntity.class, shardManager, new ConsistentHashBucketIdExtractor<>()); } @After public void after() { sessionFactories.forEach(SessionFactory::close); } @Test public void testBulkSave() throws Exception { String key = "testPhone"; RelationalEntity entityOne = RelationalEntity.builder().key("1").value("abcd").build(); RelationalEntity entityTwo = RelationalEntity.builder().key("2").value("abcd").build(); relationalDao.saveAll(key, Lists.newArrayList(entityOne, entityTwo)); List<RelationalEntity> entities = relationalDao.select(key, DetachedCriteria.forClass(RelationalEntity.class)); assertEquals(2, entities.size()); } }