/* * Hibernate, Relational Persistence for Idiomatic Java * * JBoss, Home of Professional Open Source * Copyright 2011 Red Hat Inc. and/or its affiliates and other contributors * as indicated by the @authors tag. All rights reserved. * See the copyright.txt in the distribution for a * full listing of individual contributors. * * 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, v. 2.1. * This program is distributed in the hope that it will be useful, but WITHOUT A * 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, * v.2.1 along with this distribution; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301, USA. */ package org.hibernate.ejb.test.ejb3configuration; import javax.persistence.EntityManagerFactory; import javax.persistence.PersistenceException; import java.io.Serializable; import java.util.Comparator; import java.util.Map; import org.hibernate.EntityMode; import org.hibernate.HibernateException; import org.hibernate.LockMode; import org.hibernate.LockOptions; import org.hibernate.MappingException; import org.hibernate.cache.spi.access.EntityRegionAccessStrategy; import org.hibernate.cache.spi.entry.CacheEntryStructure; import org.hibernate.ejb.Ejb3Configuration; import org.hibernate.engine.spi.CascadeStyle; import org.hibernate.engine.spi.Mapping; import org.hibernate.engine.spi.SessionFactoryImplementor; import org.hibernate.engine.spi.SessionImplementor; import org.hibernate.engine.spi.ValueInclusion; import org.hibernate.id.IdentifierGenerator; import org.hibernate.mapping.Collection; import org.hibernate.mapping.PersistentClass; import org.hibernate.metadata.ClassMetadata; import org.hibernate.metamodel.binding.EntityBinding; import org.hibernate.metamodel.binding.PluralAttributeBinding; import org.hibernate.persister.collection.CollectionPersister; import org.hibernate.persister.entity.EntityPersister; import org.hibernate.persister.internal.PersisterClassResolverInitiator; import org.hibernate.persister.spi.PersisterClassResolver; import org.hibernate.tuple.entity.EntityMetamodel; import org.hibernate.tuple.entity.EntityTuplizer; import org.hibernate.type.Type; import org.hibernate.type.VersionType; /** * @author Emmanuel Bernard <emmanuel@hibernate.org> */ public class PersisterClassProviderTest extends junit.framework.TestCase { public void testPersisterClassProvider() { Ejb3Configuration conf = new Ejb3Configuration(); conf.getProperties().put( PersisterClassResolverInitiator.IMPL_NAME, GoofyPersisterClassProvider.class ); conf.addAnnotatedClass( Bell.class ); try { final EntityManagerFactory entityManagerFactory = conf.buildEntityManagerFactory(); entityManagerFactory.close(); } catch ( PersistenceException e ) { assertNotNull( e.getCause() ); assertNotNull( e.getCause().getCause() ); assertEquals( GoofyException.class, e.getCause().getCause().getClass() ); } } public static class GoofyPersisterClassProvider implements PersisterClassResolver { @Override public Class<? extends EntityPersister> getEntityPersisterClass(PersistentClass metadata) { return GoofyProvider.class; } @Override public Class<? extends EntityPersister> getEntityPersisterClass(EntityBinding metadata) { return GoofyProvider.class; } @Override public Class<? extends CollectionPersister> getCollectionPersisterClass(Collection metadata) { return null; } @Override public Class<? extends CollectionPersister> getCollectionPersisterClass(PluralAttributeBinding metadata) { return null; } } public static class GoofyProvider implements EntityPersister { @SuppressWarnings( {"UnusedParameters"}) public GoofyProvider( org.hibernate.mapping.PersistentClass persistentClass, org.hibernate.cache.spi.access.EntityRegionAccessStrategy strategy, SessionFactoryImplementor sf, Mapping mapping) { throw new GoofyException(); } @Override public EntityMode getEntityMode() { return null; } @Override public EntityTuplizer getEntityTuplizer() { return null; } @Override public void postInstantiate() throws MappingException { } @Override public SessionFactoryImplementor getFactory() { return null; } @Override public String getRootEntityName() { return null; } @Override public String getEntityName() { return null; } @Override public EntityMetamodel getEntityMetamodel() { return null; } @Override public boolean isSubclassEntityName(String entityName) { return false; } @Override public Serializable[] getPropertySpaces() { return new Serializable[0]; } @Override public Serializable[] getQuerySpaces() { return new Serializable[0]; } @Override public boolean hasProxy() { return false; } @Override public boolean hasCollections() { return false; } @Override public boolean hasMutableProperties() { return false; } @Override public boolean hasSubselectLoadableCollections() { return false; } @Override public boolean hasCascades() { return false; } @Override public boolean isMutable() { return false; } @Override public boolean isInherited() { return false; } @Override public boolean isIdentifierAssignedByInsert() { return false; } @Override public Type getPropertyType(String propertyName) throws MappingException { return null; } @Override public int[] findDirty(Object[] currentState, Object[] previousState, Object owner, SessionImplementor session) { return new int[0]; } @Override public int[] findModified(Object[] old, Object[] current, Object object, SessionImplementor session) { return new int[0]; } @Override public boolean hasIdentifierProperty() { return false; } @Override public boolean canExtractIdOutOfEntity() { return false; } @Override public boolean isVersioned() { return false; } @Override public Comparator getVersionComparator() { return null; } @Override public VersionType getVersionType() { return null; } @Override public int getVersionProperty() { return 0; } @Override public boolean hasNaturalIdentifier() { return false; } @Override public int[] getNaturalIdentifierProperties() { return new int[0]; } @Override public Object[] getNaturalIdentifierSnapshot(Serializable id, SessionImplementor session) { return new Object[0]; } @Override public IdentifierGenerator getIdentifierGenerator() { return null; } @Override public boolean hasLazyProperties() { return false; } @Override public Object load(Serializable id, Object optionalObject, LockMode lockMode, SessionImplementor session) { return null; } @Override public Object load(Serializable id, Object optionalObject, LockOptions lockOptions, SessionImplementor session) { return null; } @Override public void lock(Serializable id, Object version, Object object, LockMode lockMode, SessionImplementor session) { } @Override public void lock(Serializable id, Object version, Object object, LockOptions lockOptions, SessionImplementor session) { } @Override public void insert(Serializable id, Object[] fields, Object object, SessionImplementor session) { } @Override public Serializable insert(Object[] fields, Object object, SessionImplementor session) { return null; } @Override public void delete(Serializable id, Object version, Object object, SessionImplementor session) { } @Override public void update(Serializable id, Object[] fields, int[] dirtyFields, boolean hasDirtyCollection, Object[] oldFields, Object oldVersion, Object object, Object rowId, SessionImplementor session) { } @Override public Type[] getPropertyTypes() { return new Type[0]; } @Override public String[] getPropertyNames() { return new String[0]; } @Override public boolean[] getPropertyInsertability() { return new boolean[0]; } @Override public ValueInclusion[] getPropertyInsertGenerationInclusions() { return new ValueInclusion[0]; } @Override public ValueInclusion[] getPropertyUpdateGenerationInclusions() { return new ValueInclusion[0]; } @Override public boolean[] getPropertyUpdateability() { return new boolean[0]; } @Override public boolean[] getPropertyCheckability() { return new boolean[0]; } @Override public boolean[] getPropertyNullability() { return new boolean[0]; } @Override public boolean[] getPropertyVersionability() { return new boolean[0]; } @Override public boolean[] getPropertyLaziness() { return new boolean[0]; } @Override public CascadeStyle[] getPropertyCascadeStyles() { return new CascadeStyle[0]; } @Override public Type getIdentifierType() { return null; } @Override public String getIdentifierPropertyName() { return null; } @Override public boolean isCacheInvalidationRequired() { return false; } @Override public boolean isLazyPropertiesCacheable() { return false; } @Override public boolean hasCache() { return false; } @Override public EntityRegionAccessStrategy getCacheAccessStrategy() { return null; } @Override public CacheEntryStructure getCacheEntryStructure() { return null; } @Override public ClassMetadata getClassMetadata() { return null; } @Override public boolean isBatchLoadable() { return false; } @Override public boolean isSelectBeforeUpdateRequired() { return false; } @Override public Object[] getDatabaseSnapshot(Serializable id, SessionImplementor session) throws HibernateException { return new Object[0]; } @Override public Object getCurrentVersion(Serializable id, SessionImplementor session) throws HibernateException { return null; } @Override public Object forceVersionIncrement(Serializable id, Object currentVersion, SessionImplementor session) { return null; } @Override public boolean isInstrumented() { return false; } @Override public boolean hasInsertGeneratedProperties() { return false; } @Override public boolean hasUpdateGeneratedProperties() { return false; } @Override public boolean isVersionPropertyGenerated() { return false; } @Override public void afterInitialize(Object entity, boolean lazyPropertiesAreUnfetched, SessionImplementor session) { } @Override public void afterReassociate(Object entity, SessionImplementor session) { } @Override public Object createProxy(Serializable id, SessionImplementor session) throws HibernateException { return null; } @Override public Boolean isTransient(Object object, SessionImplementor session) throws HibernateException { return null; } @Override public Object[] getPropertyValuesToInsert(Object object, Map mergeMap, SessionImplementor session) { return new Object[0]; } @Override public void processInsertGeneratedProperties(Serializable id, Object entity, Object[] state, SessionImplementor session) { } @Override public void processUpdateGeneratedProperties(Serializable id, Object entity, Object[] state, SessionImplementor session) { } @Override public Class getMappedClass() { return null; } @Override public boolean implementsLifecycle() { return false; } @Override public Class getConcreteProxyClass() { return null; } @Override public void setPropertyValues(Object object, Object[] values) { } @Override public void setPropertyValue(Object object, int i, Object value) { } @Override public Object[] getPropertyValues(Object object) { return new Object[0]; } @Override public Object getPropertyValue(Object object, int i) { return null; } @Override public Object getPropertyValue(Object object, String propertyName) { return null; } @Override public Serializable getIdentifier(Object object) { return null; } @Override public Serializable getIdentifier(Object entity, SessionImplementor session) { return null; } @Override public void setIdentifier(Object entity, Serializable id, SessionImplementor session) { } @Override public Object getVersion(Object object) { return null; } @Override public Object instantiate(Serializable id, SessionImplementor session) { return null; } @Override public boolean isInstance(Object object) { return false; } @Override public boolean hasUninitializedLazyProperties(Object object) { return false; } @Override public void resetIdentifier(Object entity, Serializable currentId, Object currentVersion, SessionImplementor session) { } @Override public EntityPersister getSubclassEntityPersister(Object instance, SessionFactoryImplementor factory) { return null; } } public static class GoofyException extends RuntimeException { } }