package com.softwaremill.common.dbtest;
import org.hibernate.cfg.Environment;
import org.hibernate.ejb.AvailableSettings;
import org.hibernate.ejb.Ejb3Configuration;
import org.hibernate.testing.tm.ConnectionProviderImpl;
import org.hibernate.testing.tm.TransactionManagerLookupImpl;
import com.softwaremill.common.dbtest.util.DbMode;
import javax.persistence.EntityManagerFactory;
/**
* @author Pawel Stawicki
* @since 7/27/12 1:15 PM
*/
public class DbConnector {
private Ejb3Configuration configuration;
public DbConnector() {
this("hibernate.test.cfg.xml");
}
public DbConnector(String hibernateConfigurationFileResource) {
createEjb3Configuration(hibernateConfigurationFileResource);
}
private void createEjb3Configuration(String hibernateConfigurationFileResource) {
configuration = new Ejb3Configuration();
configuration.configure(hibernateConfigurationFileResource);
// Separate database for each test class
configuration.setProperty("hibernate.connection.url", "jdbc:h2:mem:" + this.getClass().getName());
configuration.setProperty("connection.provider_class", ConnectionProviderImpl.class.getName());
configuration.setProperty(Environment.TRANSACTION_MANAGER_STRATEGY, TransactionManagerLookupImpl.class.getName());
configuration.setProperty(AvailableSettings.TRANSACTION_TYPE, "RESOURCE_LOCAL");
}
public void setCompatibilityMode(DbMode compatibilityMode) {
configuration.setProperty("hibernate.connection.url", "jdbc:h2:mem:" + this.getClass().getName() + addCompatibilityMode(compatibilityMode));
}
private String addCompatibilityMode(DbMode compatibilityMode) {
if (compatibilityMode != null) {
return ";MODE=" + compatibilityMode.getParameterValue();
}
return "";
}
public Ejb3Configuration getConfiguration() {
return configuration;
}
public EntityManagerFactory createEntityManagerFactory() {
return configuration.buildEntityManagerFactory();
}
}