package org.infinispan.it.osgi.persistence.jdbc; import java.util.concurrent.atomic.AtomicInteger; import org.infinispan.persistence.jdbc.DatabaseType; import org.infinispan.persistence.jdbc.configuration.AbstractJdbcStoreConfigurationBuilder; import org.infinispan.persistence.jdbc.configuration.ConnectionFactoryConfigurationBuilder; import org.infinispan.persistence.jdbc.configuration.TableManipulationConfigurationBuilder; /** * Class that assures concurrent access to the in memory database. * * @author Mircea.Markus@jboss.com * @author Navin Surtani (<a href="mailto:nsurtani@redhat.com">nsurtani@redhat.com</a>) * @author Tristan Tarrant */ public class UnitTestDatabaseManager { private static AtomicInteger userIndex = new AtomicInteger(0); private static final String H2_DRIVER = org.h2.Driver.class.getName(); private static final DatabaseType dt; static { String driver = ""; try { driver = H2_DRIVER; dt = DatabaseType.H2; try { Class.forName(driver); } catch (ClassNotFoundException e) { driver = H2_DRIVER; Class.forName(H2_DRIVER); } } catch (ClassNotFoundException e) { throw new RuntimeException(e); } } public static void setDialect(AbstractJdbcStoreConfigurationBuilder<?, ?> builder) { builder.dialect(dt); } public static ConnectionFactoryConfigurationBuilder<?> configureUniqueConnectionFactory(AbstractJdbcStoreConfigurationBuilder<?, ?> store) { return store .connectionPool() .driverClass(org.h2.Driver.class) .connectionUrl(String.format("jdbc:h2:mem:%s;DB_CLOSE_DELAY=-1", extractTestName() + userIndex.incrementAndGet())) .username("sa"); } private static String extractTestName() { StackTraceElement[] stack = Thread.currentThread().getStackTrace(); if (stack.length == 0) return null; for (int i = stack.length - 1; i > 0; i--) { StackTraceElement e = stack[i]; String className = e.getClassName(); if (className.indexOf("org.infinispan") != -1) return className.replace('.', '_') + "_" + e.getMethodName(); } return null; } public static void buildTableManipulation(TableManipulationConfigurationBuilder<?, ?> table) { table.tableNamePrefix("ISPN_STRING") .idColumnName("ID_COLUMN") .idColumnType("VARCHAR(255)") .dataColumnName("DATA_COLUMN") .dataColumnType("BLOB") .timestampColumnName("TIMESTAMP_COLUMN") .timestampColumnType("BIGINT"); } }