package kr.pe.kwonnam.hibernate4memcached.example; import kr.pe.kwonnam.hibernate4memcached.Hibernate4MemcachedRegionFactory; import kr.pe.kwonnam.hibernate4memcached.spymemcached.KryoTranscoder; import kr.pe.kwonnam.hibernate4memcached.spymemcached.SpyMemcachedAdapter; import kr.pe.kwonnam.hibernate4memcached.timestamper.HibernateCacheTimestamperMemcachedImpl; import net.spy.memcached.DefaultHashAlgorithm; import org.hibernate.annotations.CacheConcurrencyStrategy; import org.hibernate.cfg.AvailableSettings; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.persistence.Cache; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; import java.util.HashMap; import java.util.Map; /** * @author KwonNam Son (kwon37xi@gmail.com) */ public class EntityTestUtils { private static Logger log = LoggerFactory.getLogger(EntityTestUtils.class); private static EntityManagerFactory emf; public static void init() { Map<String, Object> props = new HashMap<String, Object>(); props.put(AvailableSettings.USE_SECOND_LEVEL_CACHE, true); props.put(AvailableSettings.USE_QUERY_CACHE, true); props.put(AvailableSettings.DEFAULT_CACHE_CONCURRENCY_STRATEGY, CacheConcurrencyStrategy.NONSTRICT_READ_WRITE); props.put(AvailableSettings.CACHE_REGION_FACTORY, Hibernate4MemcachedRegionFactory.class.getName()); props.put(AvailableSettings.CACHE_REGION_PREFIX, "cachetest"); props.put(AvailableSettings.CACHE_PROVIDER_CONFIG, "META-INF/h4m-properties.xml"); props.put(AvailableSettings.HBM2DDL_AUTO, "create"); props.put(AvailableSettings.USE_STRUCTURED_CACHE, "false"); props.put(Hibernate4MemcachedRegionFactory.MEMCACHED_ADAPTER_CLASS_PROPERTY_KEY, SpyMemcachedAdapter.class.getName()); props.put(SpyMemcachedAdapter.HOST_PROPERTY_KEY, "localhost:11211"); props.put(SpyMemcachedAdapter.HASH_ALGORITHM_PROPERTY_KEY, DefaultHashAlgorithm.KETAMA_HASH.name()); props.put(SpyMemcachedAdapter.OPERATION_TIMEOUT_MILLIS_PROPERTY_KEY, "5000"); props.put(SpyMemcachedAdapter.TRANSCODER_PROPERTY_KEY, KryoTranscoder.class.getName()); props.put(SpyMemcachedAdapter.CACHE_KEY_PREFIX_PROPERTY_KEY, "h4m"); props.put(KryoTranscoder.COMPRESSION_THREASHOLD_PROPERTY_KEY, "20000"); emf = Persistence.createEntityManagerFactory("cachetest", props); } public static void destroy() { if (emf == null) { return; } Cache cache = emf.getCache(); log.debug("###### EVICT ALL ######"); cache.evictAll(); emf.close(); } public static EntityManagerFactory getEntityManagerFactory() { return emf; } public static EntityManager start() { return emf.createEntityManager(); } public static void stop(EntityManager em) { em.close(); } }