package com.google.sitebricks.persist.redis; import com.google.inject.Guice; import com.google.inject.Injector; import com.google.inject.Key; import com.google.sitebricks.persist.*; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPoolConfig; import javax.inject.Inject; import javax.inject.Provider; import static org.testng.AssertJUnit.*; /** * @author dhanji@gmail.com (Dhanji R. Prasanna) */ public class RedisMultipleStoreIntegrationTest { public static class RedisTransactionalSaver { @Inject @StoreOne Provider<Jedis> jedisOne; @Inject @StoreTwo Provider<Jedis> jedisTwo; @Work @Transactional @StoreOne public void makeOne() { jedisOne.get().set("name", "Jason"); } @Work @Transactional @StoreTwo public void makeTwo() { jedisTwo.get().set("name", "Maxine"); } @Work @Transactional @StoreOne public String findOne() { return jedisOne.get().get("name"); } @Work @Transactional @StoreTwo public String findTwo() { return jedisTwo.get().get("name"); } } // @Test public final void storeAndRetrieveTransactional() { RedisModule redisModuleOne = new RedisModule(StoreOne.class, new JedisPoolConfig(), "localhost"); RedisModule redisModuleTwo = new RedisModule(StoreTwo.class, new JedisPoolConfig(), "localhost:6380"); RedisTransactionalSaver saver = Guice.createInjector(redisModuleOne, redisModuleTwo, new PersistAopModule(redisModuleOne), new PersistAopModule(redisModuleTwo)) .getInstance(RedisTransactionalSaver.class); saver.makeOne(); saver.makeTwo(); assertEquals("Jason", saver.findOne()); assertEquals("Maxine", saver.findTwo()); } // @Test public final void storeAndRetrieveWithoutAop() { JedisPoolConfig configOne = new JedisPoolConfig(); Injector injector = Guice.createInjector( new RedisModule(StoreOne.class, configOne, "localhost"), new RedisModule(StoreTwo.class, new JedisPoolConfig(), "localhost:6380")); Persister persisterOne = injector .getInstance(Key.get(Persister.class, StoreOne.class)); Persister persisterTwo = injector .getInstance(Key.get(Persister.class, StoreTwo.class)); assertNotSame(persisterOne, persisterTwo); assertFalse(persisterOne.equals(persisterTwo)); // First DB persisterOne.call(new Persister.InWork() { @Override public Object perform(EntityStore es) throws Throwable { es.save(new Parameter("name", "Jason Van Zyl")); return null; } }); // Second DB persisterTwo.call(new Persister.InWork() { @Override public Object perform(EntityStore es) throws Throwable { es.save(new Parameter("name", "Jason Zan Vyl")); return null; } }); Object paramOne = persisterOne.call(new Persister.InWork() { @Override public Object perform(EntityStore es) throws Throwable { return es.find(Parameter.class, "name"); } }); Object paramTwo = persisterTwo.call(new Persister.InWork() { @Override public Object perform(EntityStore es) throws Throwable { return es.find(Parameter.class, "name"); } }); assertEquals("Jason Van Zyl", ((Parameter)paramOne).value); assertEquals("Jason Zan Vyl", ((Parameter)paramTwo).value); } }