/*
* 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.jpa.test.ejb3configuration;
import java.io.Serializable;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import javax.persistence.EntityManagerFactory;
import javax.persistence.PersistenceException;
import org.hibernate.EntityMode;
import org.hibernate.HibernateException;
import org.hibernate.LockMode;
import org.hibernate.LockOptions;
import org.hibernate.MappingException;
import org.hibernate.bytecode.spi.BytecodeEnhancementMetadata;
import org.hibernate.cache.spi.access.EntityRegionAccessStrategy;
import org.hibernate.cache.spi.access.NaturalIdRegionAccessStrategy;
import org.hibernate.cache.spi.entry.CacheEntry;
import org.hibernate.cache.spi.entry.CacheEntryStructure;
import org.hibernate.engine.internal.MutableEntityEntryFactory;
import org.hibernate.engine.spi.CascadeStyle;
import org.hibernate.engine.spi.EntityEntryFactory;
import org.hibernate.engine.spi.SessionFactoryImplementor;
import org.hibernate.engine.spi.SharedSessionContractImplementor;
import org.hibernate.engine.spi.ValueInclusion;
import org.hibernate.id.IdentifierGenerator;
import org.hibernate.internal.FilterAliasGenerator;
import org.hibernate.jpa.AvailableSettings;
import org.hibernate.jpa.boot.spi.Bootstrap;
import org.hibernate.jpa.test.PersistenceUnitDescriptorAdapter;
import org.hibernate.jpa.test.SettingsGenerator;
import org.hibernate.mapping.Collection;
import org.hibernate.mapping.PersistentClass;
import org.hibernate.metadata.ClassMetadata;
import org.hibernate.persister.collection.CollectionPersister;
import org.hibernate.persister.entity.EntityPersister;
import org.hibernate.persister.entity.MultiLoadOptions;
import org.hibernate.persister.internal.PersisterClassResolverInitiator;
import org.hibernate.persister.spi.PersisterClassResolver;
import org.hibernate.persister.spi.PersisterCreationContext;
import org.hibernate.persister.walking.spi.AttributeDefinition;
import org.hibernate.persister.walking.spi.EntityIdentifierDefinition;
import org.hibernate.tuple.entity.BytecodeEnhancementMetadataNonPojoImpl;
import org.hibernate.tuple.entity.EntityMetamodel;
import org.hibernate.tuple.entity.EntityTuplizer;
import org.hibernate.type.Type;
import org.hibernate.type.VersionType;
import org.junit.Assert;
import org.junit.Test;
/**
* @author Emmanuel Bernard <emmanuel@hibernate.org>
*/
public class PersisterClassProviderTest {
@Test
@SuppressWarnings("unchecked")
public void testPersisterClassProvider() {
Map settings = SettingsGenerator.generateSettings(
PersisterClassResolverInitiator.IMPL_NAME, GoofyPersisterClassProvider.class,
AvailableSettings.LOADED_CLASSES, Arrays.asList( Bell.class )
);
try {
EntityManagerFactory entityManagerFactory = Bootstrap.getEntityManagerFactoryBuilder(
new PersistenceUnitDescriptorAdapter(),
settings
).build();
entityManagerFactory.close();
}
catch ( PersistenceException e ) {
Assert.assertNotNull( e.getCause() );
Assert.assertNotNull( e.getCause().getCause() );
Assert.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 CollectionPersister> getCollectionPersisterClass(Collection 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,
NaturalIdRegionAccessStrategy naturalIdRegionAccessStrategy,
PersisterCreationContext creationContext) {
throw new GoofyException();
}
@Override
public EntityMode getEntityMode() {
return null;
}
@Override
public EntityTuplizer getEntityTuplizer() {
return null;
}
@Override
public BytecodeEnhancementMetadata getInstrumentationMetadata() {
return new BytecodeEnhancementMetadataNonPojoImpl( getEntityName() );
}
@Override
public void generateEntityDefinition() {
}
@Override
public void postInstantiate() throws MappingException {
}
@Override
public SessionFactoryImplementor getFactory() {
return null;
}
@Override
public EntityEntryFactory getEntityEntryFactory() {
return MutableEntityEntryFactory.INSTANCE;
}
@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, SharedSessionContractImplementor session) {
return new int[0];
}
@Override
public int[] findModified(Object[] old, Object[] current, Object object, SharedSessionContractImplementor 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, SharedSessionContractImplementor session) {
return new Object[0];
}
@Override
public Serializable loadEntityIdByNaturalId(Object[] naturalIdValues, LockOptions lockOptions,
SharedSessionContractImplementor session) {
return null;
}
@Override
public boolean hasNaturalIdCache() {
return false;
}
@Override
public NaturalIdRegionAccessStrategy getNaturalIdCacheAccessStrategy() {
return null;
}
@Override
public IdentifierGenerator getIdentifierGenerator() {
return null;
}
@Override
public boolean hasLazyProperties() {
return false;
}
@Override
public Object load(Serializable id, Object optionalObject, LockMode lockMode, SharedSessionContractImplementor session) {
return null;
}
@Override
public Object load(Serializable id, Object optionalObject, LockOptions lockOptions, SharedSessionContractImplementor session) {
return null;
}
@Override
public List multiLoad(Serializable[] ids, SharedSessionContractImplementor session, MultiLoadOptions loadOptions) {
return Collections.emptyList();
}
@Override
public void lock(Serializable id, Object version, Object object, LockMode lockMode, SharedSessionContractImplementor session) {
}
@Override
public void lock(Serializable id, Object version, Object object, LockOptions lockOptions, SharedSessionContractImplementor session) {
}
@Override
public void insert(Serializable id, Object[] fields, Object object, SharedSessionContractImplementor session) {
}
@Override
public Serializable insert(Object[] fields, Object object, SharedSessionContractImplementor session) {
return null;
}
@Override
public void delete(Serializable id, Object version, Object object, SharedSessionContractImplementor session) {
}
@Override
public void update(Serializable id, Object[] fields, int[] dirtyFields, boolean hasDirtyCollection, Object[] oldFields, Object oldVersion, Object object, Object rowId, SharedSessionContractImplementor 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, SharedSessionContractImplementor session) throws HibernateException {
return new Object[0];
}
@Override
public Serializable getIdByUniqueKey(Serializable key, String uniquePropertyName, SharedSessionContractImplementor session) {
throw new UnsupportedOperationException( "Not supported" );
}
@Override
public Object getCurrentVersion(Serializable id, SharedSessionContractImplementor session) throws HibernateException {
return null;
}
@Override
public Object forceVersionIncrement(Serializable id, Object currentVersion, SharedSessionContractImplementor 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, SharedSessionContractImplementor session) {
}
@Override
public void afterReassociate(Object entity, SharedSessionContractImplementor session) {
}
@Override
public Object createProxy(Serializable id, SharedSessionContractImplementor session) throws HibernateException {
return null;
}
@Override
public Boolean isTransient(Object object, SharedSessionContractImplementor session) throws HibernateException {
return null;
}
@Override
public Object[] getPropertyValuesToInsert(Object object, Map mergeMap, SharedSessionContractImplementor session) {
return new Object[0];
}
@Override
public void processInsertGeneratedProperties(Serializable id, Object entity, Object[] state, SharedSessionContractImplementor session) {
}
@Override
public void processUpdateGeneratedProperties(Serializable id, Object entity, Object[] state, SharedSessionContractImplementor 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, SharedSessionContractImplementor session) {
return null;
}
@Override
public void setIdentifier(Object entity, Serializable id, SharedSessionContractImplementor session) {
}
@Override
public Object getVersion(Object object) {
return null;
}
@Override
public Object instantiate(Serializable id, SharedSessionContractImplementor 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, SharedSessionContractImplementor session) {
}
@Override
public EntityPersister getSubclassEntityPersister(Object instance, SessionFactoryImplementor factory) {
return null;
}
@Override
public FilterAliasGenerator getFilterAliasGenerator(String rootAlias) {
return null;
}
@Override
public int[] resolveAttributeIndexes(String[] attributeNames) {
return new int[0];
}
@Override
public boolean canUseReferenceCacheEntries() {
return false; //To change body of implemented methods use File | Settings | File Templates.
}
@Override
public CacheEntry buildCacheEntry(Object entity, Object[] state, Object version, SharedSessionContractImplementor session) {
return null;
}
@Override
public EntityPersister getEntityPersister() {
return this;
}
@Override
public EntityIdentifierDefinition getEntityKeyDefinition() {
return null;
}
@Override
public Iterable<AttributeDefinition> getAttributes() {
return null;
}
}
public static class GoofyException extends RuntimeException {
}
}