/*
* Hibernate, Relational Persistence for Idiomatic Java
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
*/
package org.hibernate.envers.test;
import java.io.File;
import java.net.URISyntaxException;
import java.net.URL;
import org.hibernate.MappingException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.cfg.Environment;
import org.hibernate.envers.AuditReader;
import org.hibernate.envers.AuditReaderFactory;
import org.hibernate.envers.configuration.EnversSettings;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.testing.AfterClassOnce;
import org.hibernate.testing.BeforeClassOnce;
import org.hibernate.testing.ServiceRegistryBuilder;
import org.junit.Before;
/**
* Base class for testing envers with Session when the same session and
* auditReader must be used for the hole test.
*
* @author Hernán Chanfreau
*/
public abstract class AbstractOneSessionTest extends AbstractEnversTest {
protected Configuration config;
private ServiceRegistry serviceRegistry;
private SessionFactory sessionFactory;
private Session session;
private AuditReader auditReader;
@BeforeClassOnce
public void init() throws URISyntaxException {
config = new Configuration();
URL url = Thread.currentThread().getContextClassLoader().getResource( getHibernateConfigurationFileName() );
config.configure( new File( url.toURI() ) );
String auditStrategy = getAuditStrategy();
if ( auditStrategy != null && !"".equals( auditStrategy ) ) {
config.setProperty( EnversSettings.AUDIT_STRATEGY, auditStrategy );
}
config.setProperty( Environment.USE_NEW_ID_GENERATOR_MAPPINGS, "true" );
config.setProperty( EnversSettings.USE_REVISION_ENTITY_WITH_NATIVE_ID, "false" );
addProperties( config );
this.initMappings();
serviceRegistry = ServiceRegistryBuilder.buildServiceRegistry( config.getProperties() );
sessionFactory = config.buildSessionFactory( serviceRegistry );
}
protected abstract void initMappings() throws MappingException, URISyntaxException;
protected void addProperties(Configuration configuration) {
}
protected String getHibernateConfigurationFileName() {
return "hibernate.test.session-cfg.xml";
}
private SessionFactory getSessionFactory() {
return sessionFactory;
}
@AfterClassOnce
public void closeSessionFactory() {
try {
sessionFactory.close();
}
finally {
if ( serviceRegistry != null ) {
ServiceRegistryBuilder.destroy( serviceRegistry );
serviceRegistry = null;
}
}
}
/**
* Creates a new session and auditReader only if there is nothing created
* before
*/
@Before
public void initializeSession() {
if ( getSession() == null ) {
session = getSessionFactory().openSession();
auditReader = AuditReaderFactory.get( session );
}
}
/**
* Creates a new session and auditReader.
*/
public void forceNewSession() {
session = getSessionFactory().openSession();
auditReader = AuditReaderFactory.get( session );
}
protected Session getSession() {
return session;
}
protected AuditReader getAuditReader() {
return auditReader;
}
}