package org.infinispan.persistence.jdbc; import java.io.PrintWriter; import java.sql.Connection; import java.sql.SQLException; import java.util.logging.Logger; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import javax.sql.DataSource; import org.infinispan.persistence.BaseStoreTest; import org.infinispan.persistence.jdbc.configuration.JdbcStringBasedStoreConfigurationBuilder; import org.infinispan.persistence.jdbc.connectionfactory.SimpleConnectionFactory; import org.infinispan.persistence.spi.PersistenceException; import org.infinispan.test.fwk.TestCacheManagerFactory; import org.infinispan.test.fwk.UnitTestDatabaseManager; import org.infinispan.test.jndi.DummyContextFactory; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; /** * @author Mircea.Markus@jboss.com */ @Test(groups = "functional", testName = "persistence.jdbc.ManagedConnectionFactoryTest") public abstract class ManagedConnectionFactoryTest extends BaseStoreTest { private DummyDataSource ds; @BeforeClass public void bindDatasourceInJndi() throws Exception { System.setProperty(Context.INITIAL_CONTEXT_FACTORY, DummyContextFactory.class.getName()); ds = new DummyDataSource(); ds.start(); InitialContext ic = new InitialContext(); ic.bind(getDatasourceLocation(), ds); assert ic.lookup(getDatasourceLocation()) instanceof DummyDataSource; } public abstract String getDatasourceLocation(); @AfterClass public void destroyDatasourceAndUnbind() throws NamingException { InitialContext ic = new InitialContext(); ic.unbind(getDatasourceLocation()); assert ic.lookup(getDatasourceLocation()) == null; ds.stop(); } public static class DummyDataSource implements DataSource { private SimpleConnectionFactory simpleFactory; public void start() throws PersistenceException { JdbcStringBasedStoreConfigurationBuilder storeBuilder = TestCacheManagerFactory .getDefaultCacheConfiguration(false) .persistence() .addStore(JdbcStringBasedStoreConfigurationBuilder.class); simpleFactory = new SimpleConnectionFactory(); simpleFactory.start(UnitTestDatabaseManager.configureSimpleConnectionFactory(storeBuilder).create(), Thread.currentThread().getContextClassLoader()); } public void stop() { simpleFactory.stop(); } @Override public Connection getConnection() throws SQLException { try { return simpleFactory.getConnection(); } catch (PersistenceException e) { throw new SQLException(e); } } @Override public Connection getConnection(String username, String password) throws SQLException { return getConnection(); } @Override public PrintWriter getLogWriter() throws SQLException { throw new IllegalStateException("This should not be called!"); } @Override public void setLogWriter(PrintWriter out) throws SQLException { throw new IllegalStateException("This should not be called!"); } @Override public void setLoginTimeout(int seconds) throws SQLException { throw new IllegalStateException("This should not be called!"); } @Override public int getLoginTimeout() throws SQLException { throw new IllegalStateException("This should not be called!"); } @Override public <T> T unwrap(Class<T> iface) throws SQLException { throw new IllegalStateException("This should not be called!"); } @Override public boolean isWrapperFor(Class<?> iface) throws SQLException { throw new IllegalStateException("This should not be called!"); } public Logger getParentLogger() { throw new IllegalStateException("This should not be called!"); } } }