/* * 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.performance; import java.io.IOException; import java.util.Arrays; import java.util.Properties; import javax.persistence.EntityManager; import org.hibernate.boot.registry.BootstrapServiceRegistryBuilder; import org.hibernate.boot.registry.internal.StandardServiceRegistryImpl; import org.hibernate.cfg.Environment; import org.hibernate.dialect.Dialect; import org.hibernate.envers.AuditReader; import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.configuration.EnversSettings; import org.hibernate.envers.boot.internal.EnversIntegrator; import org.hibernate.envers.test.AbstractEnversTest; import org.hibernate.jpa.AvailableSettings; import org.hibernate.jpa.HibernateEntityManagerFactory; import org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl; import org.hibernate.jpa.boot.spi.Bootstrap; import org.hibernate.jpa.test.PersistenceUnitDescriptorAdapter; import org.hibernate.testing.AfterClassOnce; import org.hibernate.testing.BeforeClassOnce; import org.junit.Before; /** * @author Adam Warski (adam at warski dot org) * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) */ public abstract class AbstractEntityManagerTest extends AbstractEnversTest { public static final Dialect DIALECT = Dialect.getDialect(); private EntityManagerFactoryBuilderImpl entityManagerFactoryBuilder; private StandardServiceRegistryImpl serviceRegistry; private HibernateEntityManagerFactory emf; private EntityManager entityManager; private AuditReader auditReader; private boolean audited; public void addConfigurationProperties(Properties configuration) { } protected static Dialect getDialect() { return DIALECT; } private void closeEntityManager() { if ( entityManager != null ) { entityManager.close(); entityManager = null; } } @Before public void newEntityManager() { closeEntityManager(); entityManager = emf.createEntityManager(); if ( audited ) { auditReader = AuditReaderFactory.get( entityManager ); } } @BeforeClassOnce public void init() throws IOException { init( true, getAuditStrategy() ); } protected void init(boolean audited, String auditStrategy) throws IOException { this.audited = audited; Properties configurationProperties = new Properties(); configurationProperties.putAll( Environment.getProperties() ); if ( !audited ) { configurationProperties.setProperty( EnversIntegrator.AUTO_REGISTER, "false" ); } if ( createSchema() ) { configurationProperties.setProperty( Environment.HBM2DDL_AUTO, "create-drop" ); configurationProperties.setProperty( Environment.USE_NEW_ID_GENERATOR_MAPPINGS, "true" ); configurationProperties.setProperty( EnversSettings.USE_REVISION_ENTITY_WITH_NATIVE_ID, "false" ); } if ( auditStrategy != null && !"".equals( auditStrategy ) ) { configurationProperties.setProperty( "org.hibernate.envers.audit_strategy", auditStrategy ); } addConfigurationProperties( configurationProperties ); configurationProperties.put( AvailableSettings.LOADED_CLASSES, Arrays.asList( getAnnotatedClasses() ) ); entityManagerFactoryBuilder = (EntityManagerFactoryBuilderImpl) Bootstrap.getEntityManagerFactoryBuilder( new PersistenceUnitDescriptorAdapter(), configurationProperties ); emf = entityManagerFactoryBuilder.build().unwrap( HibernateEntityManagerFactory.class ); serviceRegistry = (StandardServiceRegistryImpl) emf.getSessionFactory() .getServiceRegistry() .getParentServiceRegistry(); newEntityManager(); } protected Class[] getAnnotatedClasses() { return new Class[0]; } protected boolean createSchema() { return true; } private BootstrapServiceRegistryBuilder createBootstrapRegistryBuilder() { return new BootstrapServiceRegistryBuilder(); } @AfterClassOnce public void close() { closeEntityManager(); emf.close(); //NOTE we don't build the service registry so we don't destroy it } public EntityManager getEntityManager() { return entityManager; } public AuditReader getAuditReader() { return auditReader; } }