package kr.debop4j.data.ogm.test.utils;
import org.hibernate.SessionFactory;
import org.hibernate.engine.spi.SessionFactoryImplementor;
import org.hibernate.ogm.datastore.map.impl.MapDatastoreProvider;
import org.hibernate.ogm.datastore.spi.DatastoreProvider;
import org.hibernate.ogm.grid.AssociationKey;
import org.hibernate.ogm.grid.EntityKey;
import org.hibernate.ogm.grid.RowKey;
import java.util.HashMap;
import java.util.Map;
/** @author Sanne Grinovero <sanne@hibernate.org> (C) 2011 Red Hat Inc. */
public class HashMapTestHelper implements TestableGridDialect {
@Override
public boolean assertNumberOfEntities(int numberOfEntities, SessionFactory sessionFactory) {
return getEntityMap(sessionFactory).size() == numberOfEntities;
}
@Override
public boolean assertNumberOfAssociations(int numberOfAssociations, SessionFactory sessionFactory) {
return getAssociationCache(sessionFactory).size() == numberOfAssociations;
}
@Override
public Map<String, Object> extractEntityTuple(SessionFactory sessionFactory, EntityKey key) {
return getEntityMap(sessionFactory).get(key);
}
private static Map<EntityKey, Map<String, Object>> getEntityMap(SessionFactory sessionFactory) {
MapDatastoreProvider castProvider = getProvider(sessionFactory);
return castProvider.getEntityMap();
}
private static MapDatastoreProvider getProvider(SessionFactory sessionFactory) {
DatastoreProvider provider = ((SessionFactoryImplementor) sessionFactory).getServiceRegistry().getService(DatastoreProvider.class);
if (!(MapDatastoreProvider.class.isInstance(provider))) {
throw new RuntimeException("Not testing with MapDatastoreProvider, cannot extract underlying map");
}
return MapDatastoreProvider.class.cast(provider);
}
private static Map<AssociationKey, Map<RowKey, Map<String, Object>>> getAssociationCache(SessionFactory sessionFactory) {
MapDatastoreProvider castProvider = getProvider(sessionFactory);
return castProvider.getAssociationsMap();
}
@Override
public boolean backendSupportsTransactions() {
return false;
}
@Override
public void dropSchemaAndDatabase(SessionFactory sessionFactory) {
//Nothing to do
}
@Override
public Map<String, String> getEnvironmentProperties() {
Map<String, String> props = new HashMap<String, String>();
// hibernate-search 환경설정
props.put("hibernate.search.default.indexmanager", "near-real-time");
props.put("hibernate.search.default.directory_provider", "filesystem");
props.put("hibernate.search.default.indexBase", ".lucene/indexes");
props.put("hibernate.search.default.locking_strategy", "simple");
// hibernate-search index worker settings
props.put("hibernate.search.worker.execution", "async");
props.put("hibernate.search.worker.thread_pool.size", "8");
props.put("hibernate.search.worker.buffer_queue.max", "1000000");
// hibernate-search performance settings
props.put("hibernate.search.default.indexwriter.max_buffered_doc", "true");
props.put("hibernate.search.default.indexwriter.max_merge_docs", "100");
props.put("hibernate.search.default.indexwriter.merge_factor", "20");
props.put("hibernate.search.default.indexwriter.term_index_interval", "default");
props.put("hibernate.search.default.indexwriter.ram_buffer_size", "2048");
props.put("hibernate.search.default.exclusive_index_use", "true");
return props;
}
}