FailureExpectedWithNewMetamodel cleanup

This commit is contained in:
Steve Ebersole 2014-03-27 07:16:25 -05:00
parent 4f66feea77
commit c3e8f4a007
12 changed files with 271 additions and 64 deletions

View File

@ -28,12 +28,10 @@ import java.util.List;
import org.hibernate.Criteria; import org.hibernate.Criteria;
import org.hibernate.Session; import org.hibernate.Session;
import org.junit.Assert;
import org.junit.Test;
import org.hibernate.testing.FailureExpectedWithNewMetamodel;
import org.hibernate.testing.TestForIssue; import org.hibernate.testing.TestForIssue;
import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase; import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase;
import org.junit.Assert;
import org.junit.Test;
/** /**
* Tests that when using cached prepared statement with batching enabled doesn't bleed over into new transactions. * Tests that when using cached prepared statement with batching enabled doesn't bleed over into new transactions.

View File

@ -53,6 +53,15 @@ def osgiDescription() {
return pomDescription() return pomDescription()
} }
test {
testLogging {
// make test events logged as LIFECYCLE so they show up in console
// this, e.g., allows us to see the name of each test as Gradle starts
// it, so we can see where (if) the build hangs in tests
events "started", "skipped", "failed"
}
}
jar { jar {
manifest { manifest {
mainAttributes( 'Main-Class': 'org.hibernate.Version' ) mainAttributes( 'Main-Class': 'org.hibernate.Version' )

View File

@ -45,6 +45,8 @@ import org.hibernate.service.StandardServiceInitiators;
import org.hibernate.service.internal.ProvidedService; import org.hibernate.service.internal.ProvidedService;
import org.hibernate.service.spi.ServiceContributor; import org.hibernate.service.spi.ServiceContributor;
import static org.hibernate.jaxb.spi.cfg.JaxbHibernateConfiguration.JaxbSessionFactory.JaxbProperty;
/** /**
* Builder for standard {@link org.hibernate.service.ServiceRegistry} instances. * Builder for standard {@link org.hibernate.service.ServiceRegistry} instances.
* *
@ -101,6 +103,10 @@ public class StandardServiceRegistryBuilder {
return bootstrapServiceRegistry; return bootstrapServiceRegistry;
} }
public ConfigLoader getConfigLoader() {
return configLoader;
}
/** /**
* Read settings from a {@link java.util.Properties} file by resource name. * Read settings from a {@link java.util.Properties} file by resource name.
* *
@ -157,12 +163,7 @@ public class StandardServiceRegistryBuilder {
*/ */
@SuppressWarnings( {"unchecked"}) @SuppressWarnings( {"unchecked"})
public StandardServiceRegistryBuilder configure(String resourceName) { public StandardServiceRegistryBuilder configure(String resourceName) {
final JaxbHibernateConfiguration configurationElement = configLoader.loadConfigXmlResource( resourceName ); return configure( configLoader.loadConfigXmlResource( resourceName ) );
for ( JaxbHibernateConfiguration.JaxbSessionFactory.JaxbProperty xmlProperty : configurationElement.getSessionFactory().getProperty() ) {
settings.put( xmlProperty.getName(), xmlProperty.getValue() );
}
return this;
} }
/** /**
@ -176,12 +177,7 @@ public class StandardServiceRegistryBuilder {
*/ */
@SuppressWarnings( {"unchecked"}) @SuppressWarnings( {"unchecked"})
public StandardServiceRegistryBuilder configure(File file) { public StandardServiceRegistryBuilder configure(File file) {
final JaxbHibernateConfiguration configurationElement = configLoader.loadConfigFile( file ); return configure( configLoader.loadConfigFile( file ) );
for ( JaxbHibernateConfiguration.JaxbSessionFactory.JaxbProperty xmlProperty : configurationElement.getSessionFactory().getProperty() ) {
settings.put( xmlProperty.getName(), xmlProperty.getValue() );
}
return this;
} }
/** /**
@ -196,13 +192,35 @@ public class StandardServiceRegistryBuilder {
@SuppressWarnings( {"unchecked"}) @SuppressWarnings( {"unchecked"})
public StandardServiceRegistryBuilder configure(URL configFileUrl) { public StandardServiceRegistryBuilder configure(URL configFileUrl) {
final JaxbHibernateConfiguration configurationElement = configLoader.loadConfig( configFileUrl ); final JaxbHibernateConfiguration configurationElement = configLoader.loadConfig( configFileUrl );
for ( JaxbHibernateConfiguration.JaxbSessionFactory.JaxbProperty xmlProperty : configurationElement.getSessionFactory().getProperty() ) { for ( JaxbProperty xmlProperty : configurationElement.getSessionFactory().getProperty() ) {
settings.put( xmlProperty.getName(), xmlProperty.getValue() ); settings.put( xmlProperty.getName(), xmlProperty.getValue() );
} }
return this; return this;
} }
/**
* Reads configuration values from the JAXB representation of the legacy {@code cfg.xml} XML format.
*
* @param jaxbHibernateConfiguration The JAXB model
*
* @return this, for method chaining
*
* @see #loadProperties(String)
*/
@SuppressWarnings( {"unchecked"})
public StandardServiceRegistryBuilder configure(JaxbHibernateConfiguration jaxbHibernateConfiguration) {
for ( JaxbProperty xmlProperty : jaxbHibernateConfiguration.getSessionFactory().getProperty() ) {
String settingName = xmlProperty.getName();
if ( !settingName.startsWith( "hibernate." ) ) {
settingName = "hibernate." + settingName;
}
settings.put( settingName, xmlProperty.getValue() );
}
return this;
}
/** /**
* Apply a setting value. * Apply a setting value.
* *

View File

@ -57,7 +57,9 @@ import org.hibernate.engine.ResultSetMappingDefinition;
import org.hibernate.engine.spi.NamedQueryDefinition; import org.hibernate.engine.spi.NamedQueryDefinition;
import org.hibernate.engine.spi.NamedSQLQueryDefinition; import org.hibernate.engine.spi.NamedSQLQueryDefinition;
import org.hibernate.internal.CoreMessageLogger; import org.hibernate.internal.CoreMessageLogger;
import org.hibernate.internal.util.StringHelper;
import org.hibernate.internal.util.xml.XmlDocument; import org.hibernate.internal.util.xml.XmlDocument;
import org.hibernate.jaxb.spi.cfg.JaxbHibernateConfiguration;
import org.hibernate.mapping.AuxiliaryDatabaseObject; import org.hibernate.mapping.AuxiliaryDatabaseObject;
import org.hibernate.metamodel.MetadataBuilder; import org.hibernate.metamodel.MetadataBuilder;
import org.hibernate.metamodel.MetadataSources; import org.hibernate.metamodel.MetadataSources;
@ -74,6 +76,8 @@ import org.hibernate.usertype.UserType;
import org.jboss.logging.Logger; import org.jboss.logging.Logger;
import static org.hibernate.jaxb.spi.cfg.JaxbHibernateConfiguration.JaxbSessionFactory.JaxbMapping;
/** /**
* An instance of <tt>Configuration</tt> allows the application * An instance of <tt>Configuration</tt> allows the application
* to specify properties and mapping documents to be used when * to specify properties and mapping documents to be used when
@ -249,8 +253,7 @@ public class Configuration {
* @see #configure(String) * @see #configure(String)
*/ */
public Configuration configure() throws HibernateException { public Configuration configure() throws HibernateException {
standardServiceRegistryBuilder.configure(); return configure( StandardServiceRegistryBuilder.DEFAULT_CFG_RESOURCE_NAME );
return this;
} }
/** /**
@ -264,10 +267,34 @@ public class Configuration {
* @throws HibernateException Generally indicates we cannot find the named resource * @throws HibernateException Generally indicates we cannot find the named resource
*/ */
public Configuration configure(String resource) throws HibernateException { public Configuration configure(String resource) throws HibernateException {
standardServiceRegistryBuilder.configure( resource ); final JaxbHibernateConfiguration jaxbHibernateConfiguration = standardServiceRegistryBuilder.getConfigLoader()
.loadConfigXmlResource( resource );
doConfigure( jaxbHibernateConfiguration );
return this; return this;
} }
private void doConfigure(JaxbHibernateConfiguration jaxbHibernateConfiguration) {
standardServiceRegistryBuilder.configure( jaxbHibernateConfiguration );
for ( JaxbMapping jaxbMapping : jaxbHibernateConfiguration.getSessionFactory().getMapping() ) {
if ( StringHelper.isNotEmpty( jaxbMapping.getClazz() ) ) {
addResource( jaxbMapping.getClazz().replace( '.', '/' ) + ".hbm.xml" );
}
else if ( StringHelper.isNotEmpty( jaxbMapping.getFile() ) ) {
addFile( jaxbMapping.getFile() );
}
else if ( StringHelper.isNotEmpty( jaxbMapping.getJar() ) ) {
addJar( new File( jaxbMapping.getJar() ) );
}
else if ( StringHelper.isNotEmpty( jaxbMapping.getPackage() ) ) {
addPackage( jaxbMapping.getPackage() );
}
else if ( StringHelper.isNotEmpty( jaxbMapping.getResource() ) ) {
addResource( jaxbMapping.getResource() );
}
}
}
/** /**
* Use the mappings and properties specified in the given document. The format of the document is defined in * Use the mappings and properties specified in the given document. The format of the document is defined in
* <tt>hibernate-configuration-3.0.dtd</tt>. * <tt>hibernate-configuration-3.0.dtd</tt>.
@ -279,7 +306,9 @@ public class Configuration {
* @throws HibernateException Generally indicates a problem access the url * @throws HibernateException Generally indicates a problem access the url
*/ */
public Configuration configure(URL url) throws HibernateException { public Configuration configure(URL url) throws HibernateException {
standardServiceRegistryBuilder.configure( url ); final JaxbHibernateConfiguration jaxbHibernateConfiguration = standardServiceRegistryBuilder.getConfigLoader()
.loadConfig( url );
doConfigure( jaxbHibernateConfiguration );
return this; return this;
} }
@ -294,7 +323,9 @@ public class Configuration {
* @throws HibernateException Generally indicates a problem access the file * @throws HibernateException Generally indicates a problem access the file
*/ */
public Configuration configure(File configFile) throws HibernateException { public Configuration configure(File configFile) throws HibernateException {
standardServiceRegistryBuilder.configure( configFile ); final JaxbHibernateConfiguration jaxbHibernateConfiguration = standardServiceRegistryBuilder.getConfigLoader()
.loadConfigFile( configFile );
doConfigure( jaxbHibernateConfiguration );
return this; return this;
} }

View File

@ -61,10 +61,14 @@ import org.hibernate.metamodel.spi.binding.Caching;
import org.hibernate.metamodel.spi.binding.IdentifierGeneratorDefinition; import org.hibernate.metamodel.spi.binding.IdentifierGeneratorDefinition;
import org.hibernate.metamodel.spi.binding.InheritanceType; import org.hibernate.metamodel.spi.binding.InheritanceType;
import org.jboss.logging.Logger;
/** /**
* @author Steve Ebersole * @author Steve Ebersole
*/ */
public class EntityHierarchySourceImpl implements EntityHierarchySource { public class EntityHierarchySourceImpl implements EntityHierarchySource {
private static final Logger log = Logger.getLogger( EntityHierarchySourceImpl.class );
private final RootEntitySourceImpl rootEntitySource; private final RootEntitySourceImpl rootEntitySource;
private InheritanceType hierarchyInheritanceType = InheritanceType.NO_INHERITANCE; private InheritanceType hierarchyInheritanceType = InheritanceType.NO_INHERITANCE;
private final Caching caching; private final Caching caching;
@ -256,7 +260,17 @@ public class EntityHierarchySourceImpl implements EntityHierarchySource {
); );
} }
else { else {
throw makeMappingException( "could not determine source of discriminator mapping" ); log.debug( "No source for discriminator column/formula found" );
return new ColumnAttributeSourceImpl(
rootEntitySource.sourceMappingDocument(),
null, // root table
"class", // the default discriminator column name per-legacy hbm binding
sizeSource,
discriminatorElement.isInsert() ? TruthValue.TRUE : TruthValue.FALSE,
discriminatorElement.isInsert() ? TruthValue.TRUE : TruthValue.FALSE,
discriminatorElement.isNotNull() ? TruthValue.FALSE : TruthValue.TRUE
);
// throw makeMappingException( "could not determine source of discriminator mapping" );
} }
} }

View File

@ -0,0 +1,94 @@
/*
* Hibernate, Relational Persistence for Idiomatic Java
*
* Copyright (c) 2014, Red Hat Inc. or third-party contributors as
* indicated by the @author tags or express copyright attribution
* statements applied by the authors. All third-party contributions are
* distributed under license by Red Hat Inc.
*
* This copyrighted material is made available to anyone wishing to use, modify,
* copy, or redistribute it subject to the terms and conditions of the GNU
* Lesser General Public License, as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
* for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this distribution; if not, write to:
* Free Software Foundation, Inc.
* 51 Franklin Street, Fifth Floor
* Boston, MA 02110-1301 USA
*/
package org.hibernate.metamodel.spi.binding.cid;
import javax.persistence.Embeddable;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import org.hibernate.id.EntityIdentifierNature;
import org.hibernate.metamodel.spi.binding.AttributeBinding;
import org.hibernate.metamodel.spi.binding.AttributeBindingContainer;
import org.hibernate.metamodel.spi.binding.BasicAttributeBinding;
import org.hibernate.metamodel.spi.binding.EmbeddedAttributeBinding;
import org.hibernate.metamodel.spi.binding.EntityBinding;
import org.hibernate.metamodel.spi.binding.SingularAttributeBinding;
import org.hibernate.testing.junit4.BaseAnnotationBindingTestCase;
import org.hibernate.testing.junit4.Resources;
import org.junit.Test;
import static org.hibernate.testing.junit4.ExtraAssertions.assertTyping;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertSame;
/**
* @author Steve Ebersole
*/
public class BasicEmbeddedIdTest extends BaseAnnotationBindingTestCase {
@Embeddable
public static class CoursePK {
public String department;
public String code;
}
@Entity
public static class Course {
@EmbeddedId
private CoursePK key;
private String title;
}
@Test
@Resources( annotatedClasses = {CoursePK.class, Course.class} )
public void testBasicUsage() {
EntityBinding courseBinding = getEntityBinding( Course.class );
assertEquals( 2, courseBinding.getAttributeBindingClosureSpan() );
EmbeddedAttributeBinding keyBinding = locateAttributeBinding( courseBinding, "key", EmbeddedAttributeBinding.class );
assertEquals( 2, keyBinding.getEmbeddableBinding().attributeBindingSpan() );
assertEquals(
EntityIdentifierNature.AGGREGATED_COMPOSITE,
courseBinding.getHierarchyDetails().getEntityIdentifier().getNature()
);
SingularAttributeBinding identifierAttribute = courseBinding.getHierarchyDetails().getEntityIdentifier().getAttributeBinding();
// NOTE : same does '=='
assertSame( keyBinding, identifierAttribute );
BasicAttributeBinding titleBinding = locateAttributeBinding( courseBinding, "title", BasicAttributeBinding.class );
}
private <T extends AttributeBinding> T locateAttributeBinding(
AttributeBindingContainer attributeContainer,
String attributeName,
Class<T> expectedType) {
AttributeBinding attributeBinding = attributeContainer.locateAttributeBinding( attributeName );
assertNotNull( "Could not locate attribute named " + attributeName, attributeBinding );
return assertTyping( expectedType, attributeBinding );
}
}

View File

@ -23,20 +23,19 @@
*/ */
package org.hibernate.test.annotations.access.xml; package org.hibernate.test.annotations.access.xml;
import java.io.InputStream;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import javax.persistence.AccessType; import javax.persistence.AccessType;
import org.hibernate.cfg.Configuration;
import org.hibernate.engine.spi.SessionFactoryImplementor; import org.hibernate.engine.spi.SessionFactoryImplementor;
import org.hibernate.metamodel.MetadataSources;
import org.hibernate.property.BasicPropertyAccessor; import org.hibernate.property.BasicPropertyAccessor;
import org.hibernate.property.DirectPropertyAccessor; import org.hibernate.property.DirectPropertyAccessor;
import org.hibernate.tuple.entity.EntityTuplizer;
import org.hibernate.testing.FailureExpectedWithNewMetamodel; import org.hibernate.testing.FailureExpectedWithNewMetamodel;
import org.hibernate.testing.junit4.BaseUnitTestCase; import org.hibernate.testing.junit4.BaseUnitTestCase;
import org.hibernate.tuple.entity.EntityTuplizer;
import org.junit.Assert; import org.junit.Assert;
import org.junit.Test; import org.junit.Test;
@ -59,6 +58,7 @@ public class XmlAccessTest extends BaseUnitTestCase {
// without any xml configuration we have field access // without any xml configuration we have field access
assertAccessType( factory, classUnderTest, AccessType.FIELD ); assertAccessType( factory, classUnderTest, AccessType.FIELD );
factory.close(); factory.close();
// now with an additional xml configuration file changing the default access type for Tourist using basic // now with an additional xml configuration file changing the default access type for Tourist using basic
configFiles = new ArrayList<String>(); configFiles = new ArrayList<String>();
configFiles.add( "org/hibernate/test/annotations/access/xml/Tourist.xml" ); configFiles.add( "org/hibernate/test/annotations/access/xml/Tourist.xml" );
@ -184,15 +184,15 @@ public class XmlAccessTest extends BaseUnitTestCase {
private SessionFactoryImplementor buildSessionFactory(List<Class<?>> classesUnderTest, List<String> configFiles) { private SessionFactoryImplementor buildSessionFactory(List<Class<?>> classesUnderTest, List<String> configFiles) {
assert classesUnderTest != null; assert classesUnderTest != null;
assert configFiles != null; assert configFiles != null;
Configuration cfg = new Configuration();
MetadataSources metadataSources = new MetadataSources();
for ( Class<?> clazz : classesUnderTest ) { for ( Class<?> clazz : classesUnderTest ) {
cfg.addAnnotatedClass( clazz ); metadataSources.addAnnotatedClass( clazz );
} }
for ( String configFile : configFiles ) { for ( String configFile : configFiles ) {
InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream( configFile ); metadataSources.addResource( configFile );
cfg.addInputStream( is );
} }
return ( SessionFactoryImplementor ) cfg.buildSessionFactory(); return ( SessionFactoryImplementor ) metadataSources.buildMetadata().buildSessionFactory();
} }
// uses the first getter of the tupelizer for the assertions // uses the first getter of the tupelizer for the assertions

View File

@ -27,16 +27,16 @@ import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import org.junit.Test;
import org.hibernate.Criteria; import org.hibernate.Criteria;
import org.hibernate.Query; import org.hibernate.Query;
import org.hibernate.Session; import org.hibernate.Session;
import org.hibernate.Transaction; import org.hibernate.Transaction;
import org.hibernate.criterion.Disjunction; import org.hibernate.criterion.Disjunction;
import org.hibernate.criterion.Restrictions; import org.hibernate.criterion.Restrictions;
import org.hibernate.testing.FailureExpectedWithNewMetamodel; import org.hibernate.testing.FailureExpectedWithNewMetamodel;
import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase; import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase;
import org.junit.Test;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNotNull;
@ -46,7 +46,10 @@ import static org.junit.Assert.assertNotNull;
* *
* @author Emmanuel Bernard * @author Emmanuel Bernard
*/ */
@FailureExpectedWithNewMetamodel @FailureExpectedWithNewMetamodel(
message = "Problem processing one of the composite ids, but as there are sooooooooooo many its " +
"hard to tell which specifically causes the problem"
)
public class CompositeIdTest extends BaseCoreFunctionalTestCase { public class CompositeIdTest extends BaseCoreFunctionalTestCase {
@Test @Test
public void testOneToOneInCompositePk() throws Exception { public void testOneToOneInCompositePk() throws Exception {

View File

@ -24,6 +24,8 @@
package org.hibernate.test.cfg.cache; package org.hibernate.test.cfg.cache;
import org.hibernate.cfg.Configuration; import org.hibernate.cfg.Configuration;
import org.hibernate.testing.FailureExpectedWithNewMetamodel;
import org.hibernate.testing.junit4.BaseUnitTestCase; import org.hibernate.testing.junit4.BaseUnitTestCase;
import org.junit.Test; import org.junit.Test;
@ -36,6 +38,9 @@ public class CacheConfigurationTest extends BaseUnitTestCase {
public static final String CFG_XML = "org/hibernate/test/cfg/cache/hibernate.cfg.xml"; public static final String CFG_XML = "org/hibernate/test/cfg/cache/hibernate.cfg.xml";
@Test @Test
@FailureExpectedWithNewMetamodel(
message = "problem handling 'spread' hbm inheritance with explicit extends XML attribute"
)
public void testCacheConfiguration() throws Exception { public void testCacheConfiguration() throws Exception {
// we only care if the SF builds successfully. // we only care if the SF builds successfully.
Configuration cfg = new Configuration().configure(CFG_XML); Configuration cfg = new Configuration().configure(CFG_XML);

View File

@ -23,18 +23,17 @@
*/ */
package org.hibernate.test.collection.lazynocascade; package org.hibernate.test.collection.lazynocascade;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import org.hibernate.Session; import org.hibernate.Session;
import org.hibernate.testing.FailureExpectedWithNewMetamodel;
import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase; import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase;
import org.junit.Test; import org.junit.Test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
/** /**
* @author Vasily Kochnev * @author Vasily Kochnev
*/ */
@FailureExpectedWithNewMetamodel
public class LazyAssociationNoCascadeTest extends BaseCoreFunctionalTestCase { public class LazyAssociationNoCascadeTest extends BaseCoreFunctionalTestCase {
public String[] getMappings() { public String[] getMappings() {

View File

@ -1,11 +1,13 @@
package org.hibernate.test.cache; package org.hibernate.test.cache;
import net.sf.ehcache.CacheManager; import net.sf.ehcache.CacheManager;
import org.junit.BeforeClass;
import org.junit.Test;
import org.hibernate.cache.ehcache.management.impl.EhcacheStatsImpl; import org.hibernate.cache.ehcache.management.impl.EhcacheStatsImpl;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat; import static org.junit.Assert.assertThat;
@ -13,13 +15,19 @@ import static org.junit.Assert.assertThat;
* @author Alex Snaps * @author Alex Snaps
*/ */
public class EhcacheStatsImplTest { public class EhcacheStatsImplTest {
private static CacheManager manager;
private static EhcacheStatsImpl stats; private static EhcacheStatsImpl stats;
@BeforeClass @BeforeClass
public static void createCache() throws Exception { public static void createCache() throws Exception {
CacheManager manager = CacheManager.getInstance(); manager = CacheManager.getInstance();
stats = new EhcacheStatsImpl( manager ); stats = new EhcacheStatsImpl( manager );
}
@AfterClass
public static void stopCache() {
manager.shutdown();
} }
@Test @Test

View File

@ -1,52 +1,72 @@
package org.hibernate.test.cache; package org.hibernate.test.cache;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.fail;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import org.hibernate.Session; import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction; import org.hibernate.Transaction;
import org.hibernate.cache.ehcache.internal.strategy.ItemValueExtractor; import org.hibernate.cache.ehcache.internal.strategy.ItemValueExtractor;
import org.hibernate.cache.spi.access.SoftLock; import org.hibernate.cache.spi.access.SoftLock;
import org.hibernate.cfg.AvailableSettings;
import org.hibernate.cfg.Configuration; import org.hibernate.cfg.Configuration;
import org.hibernate.stat.QueryStatistics; import org.hibernate.stat.QueryStatistics;
import org.hibernate.stat.SecondLevelCacheStatistics; import org.hibernate.stat.SecondLevelCacheStatistics;
import org.hibernate.stat.Statistics; import org.hibernate.stat.Statistics;
import org.hibernate.testing.AfterClassOnce;
import org.hibernate.testing.BeforeClassOnce;
import org.hibernate.testing.FailureExpectedWithNewMetamodel;
import org.hibernate.testing.OnExpectedFailure;
import org.hibernate.testing.OnFailure;
import org.hibernate.testing.junit4.BaseUnitTestCase;
import org.hibernate.test.domain.Event; import org.hibernate.test.domain.Event;
import org.hibernate.test.domain.EventManager; import org.hibernate.test.domain.EventManager;
import org.hibernate.test.domain.Item; import org.hibernate.test.domain.Item;
import org.hibernate.test.domain.Person; import org.hibernate.test.domain.Person;
import org.hibernate.test.domain.PhoneNumber; import org.hibernate.test.domain.PhoneNumber;
import org.hibernate.test.domain.VersionedItem; import org.hibernate.test.domain.VersionedItem;
import org.hibernate.testing.FailureExpectedWithNewMetamodel;
import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase;
import org.junit.Test; import org.junit.Test;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.fail;
/** /**
* @author Chris Dennis * @author Chris Dennis
* @author Brett Meyer * @author Brett Meyer
*/ */
@FailureExpectedWithNewMetamodel public class HibernateCacheTest extends BaseUnitTestCase {
public class HibernateCacheTest extends BaseCoreFunctionalTestCase { private SessionFactory sessionFactory;
@BeforeClassOnce
public void before() {
System.setProperty( "derby.system.home", "target/derby" );
sessionFactory = new Configuration()
.configure( "hibernate-config/hibernate.cfg.xml" )
.setProperty( AvailableSettings.GENERATE_STATISTICS, "true" )
.setProperty( AvailableSettings.HBM2DDL_AUTO, "create-drop" )
.buildSessionFactory();
}
@AfterClassOnce
public void after() {
if ( sessionFactory != null ) {
sessionFactory.close();
}
}
@OnFailure
@OnExpectedFailure
public void handleFailure() {
after();
before();
}
private static final String REGION_PREFIX = "hibernate.test."; private static final String REGION_PREFIX = "hibernate.test.";
@Override
protected void configure(Configuration config) {
System.setProperty( "derby.system.home", "target/derby" );
config.configure( "hibernate-config/hibernate.cfg.xml" );
}
@Override
protected void afterSessionFactoryBuilt() {
sessionFactory().getStatistics().setStatisticsEnabled( true );
}
@Test @Test
public void testQueryCacheInvalidation() throws Exception { public void testQueryCacheInvalidation() throws Exception {
Session s = sessionFactory().openSession(); Session s = sessionFactory().openSession();
@ -99,6 +119,10 @@ public class HibernateCacheTest extends BaseCoreFunctionalTestCase {
s.close(); s.close();
} }
private SessionFactory sessionFactory() {
return sessionFactory;
}
@Test @Test
public void testEmptySecondLevelCacheEntry() throws Exception { public void testEmptySecondLevelCacheEntry() throws Exception {
sessionFactory().evictEntity( Item.class.getName() ); sessionFactory().evictEntity( Item.class.getName() );
@ -181,6 +205,10 @@ public class HibernateCacheTest extends BaseCoreFunctionalTestCase {
} }
@Test @Test
@FailureExpectedWithNewMetamodel(
message="Attempts to bind too many jdbc parameters during insert of PhoneNumber; the issue " +
"is the mishandling of virtual attributes such as _identifierMapper and backrefs"
)
public void testGeneralUsage() { public void testGeneralUsage() {
EventManager mgr = new EventManager( sessionFactory() ); EventManager mgr = new EventManager( sessionFactory() );
Statistics stats = sessionFactory().getStatistics(); Statistics stats = sessionFactory().getStatistics();