package org.infinispan.server.test.cs.jdbc; import static org.infinispan.server.test.util.ITestUtils.createMBeans; import org.infinispan.arquillian.core.InfinispanResource; import org.infinispan.arquillian.core.RemoteInfinispanServer; import org.infinispan.client.hotrod.RemoteCache; import org.infinispan.commons.logging.Log; import org.infinispan.commons.logging.LogFactory; import org.infinispan.server.test.client.memcached.MemcachedClient; import org.infinispan.server.test.util.RemoteCacheManagerFactory; import org.infinispan.server.test.util.RemoteInfinispanMBeans; import org.infinispan.server.test.util.jdbc.DBServer; import org.jboss.arquillian.container.test.api.ContainerController; import org.jboss.arquillian.junit.Arquillian; import org.jboss.arquillian.test.api.ArquillianResource; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.runner.RunWith; /** * @author <a href="mailto:jmarkos@redhat.com">Jakub Markos</a> * @author <a href="mailto:vchepeli@redhat.com">Vitalii Chepeliuk</a> * @since 7.0 */ @RunWith(Arquillian.class) public abstract class AbstractJdbcStoreMultinodeIT { private static final Log log = LogFactory.getLog(AbstractJdbcStoreMultinodeIT.class); protected final String CONTAINER1 = "jdbc-cachestore-1"; protected final String CONTAINER2 = "jdbc-cachestore-2"; private final String ID_COLUMN_NAME = "id"; // set in CacheContainerAdd in ISPN subsystem private final String DATA_COLUMN_NAME = "datum"; // set in CacheContainerAdd in ISPN subsystem protected static DBServer dbServer1 = DBServer.create(); protected static DBServer dbServer2 = DBServer.create(); private static RemoteCacheManagerFactory rcmFactory; protected RemoteCache cache; protected RemoteInfinispanMBeans mbeans1; protected RemoteInfinispanMBeans mbeans2; protected MemcachedClient mc1; protected MemcachedClient mc2; @ArquillianResource protected ContainerController controller; // being used to start and stop server manually @InfinispanResource(CONTAINER1) protected RemoteInfinispanServer server1; @InfinispanResource(CONTAINER2) protected RemoteInfinispanServer server2; @BeforeClass public static void startup() { rcmFactory = new RemoteCacheManagerFactory(); } @AfterClass public static void cleanup() { /** * We need to drop the tables, because of DB2 SQL Error: SQLCODE=-204, SQLSTATE=42704 */ try { if (dbServer1.bucketTable != null && dbServer1.bucketTable.getConnectionUrl().contains("db2")) { dbServer1.bucketTable.dropTable(); dbServer2.bucketTable.dropTable(); } if (dbServer1.stringTable != null && dbServer1.stringTable.getConnectionUrl().contains("db2")) { dbServer1.stringTable.dropTable(); dbServer2.stringTable.dropTable(); } } catch (Exception e) { // catching the exception, because the drop is not part of the tests log.error("Couldn't drop the tables: ", e); } if (rcmFactory != null) { rcmFactory.stopManagers(); } rcmFactory = null; } @Before public void setUp() throws Exception { String driver = System.getProperty("driver.class"); dBServers(); if (dbServer1.bucketTableName != null) dbServer1.bucketTable = new DBServer.TableManipulation(driver, dbServer1, dbServer1.bucketTableName, ID_COLUMN_NAME, DATA_COLUMN_NAME); if (dbServer1.stringTableName != null) dbServer1.stringTable = new DBServer.TableManipulation(driver, dbServer1, dbServer1.stringTableName, ID_COLUMN_NAME, DATA_COLUMN_NAME); if (dbServer2.bucketTableName != null) dbServer2.bucketTable = new DBServer.TableManipulation(driver, dbServer2, dbServer2.bucketTableName, ID_COLUMN_NAME, DATA_COLUMN_NAME); if (dbServer2.stringTableName != null) dbServer2.stringTable = new DBServer.TableManipulation(driver, dbServer2, dbServer2.stringTableName, ID_COLUMN_NAME, DATA_COLUMN_NAME); mbeans1 = createMBeans(server1, CONTAINER1, cacheName(), managerName()); mbeans2 = createMBeans(server2, CONTAINER2, cacheName(), managerName()); } protected RemoteCache<Object, Object> createCache(RemoteInfinispanMBeans mbeans) { return rcmFactory.createCache(mbeans); } protected abstract void dBServers(); protected abstract String managerName(); protected abstract String cacheName(); }