HHH-12396 - Fix problem with EnumType resolution on GlassFish platforms.
This commit is contained in:
parent
19d59dac71
commit
736c913f14
|
@ -10,7 +10,8 @@ import java.io.Serializable;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
|
|
||||||
import org.hibernate.MappingException;
|
import org.hibernate.MappingException;
|
||||||
import org.hibernate.internal.util.ReflectHelper;
|
import org.hibernate.boot.registry.classloading.spi.ClassLoaderService;
|
||||||
|
import org.hibernate.boot.registry.classloading.spi.ClassLoadingException;
|
||||||
import org.hibernate.type.spi.TypeConfiguration;
|
import org.hibernate.type.spi.TypeConfiguration;
|
||||||
import org.hibernate.usertype.CompositeUserType;
|
import org.hibernate.usertype.CompositeUserType;
|
||||||
import org.hibernate.usertype.UserType;
|
import org.hibernate.usertype.UserType;
|
||||||
|
@ -24,11 +25,11 @@ import org.hibernate.usertype.UserType;
|
||||||
*/
|
*/
|
||||||
@Deprecated
|
@Deprecated
|
||||||
public class TypeResolver implements Serializable {
|
public class TypeResolver implements Serializable {
|
||||||
private final BasicTypeRegistry basicTypeRegistry;
|
|
||||||
private final TypeFactory typeFactory;
|
private final TypeFactory typeFactory;
|
||||||
|
private final TypeConfiguration typeConfiguration;
|
||||||
|
|
||||||
public TypeResolver(TypeConfiguration typeConfiguration, TypeFactory typeFactory){
|
public TypeResolver(TypeConfiguration typeConfiguration, TypeFactory typeFactory){
|
||||||
this.basicTypeRegistry = typeConfiguration.getBasicTypeRegistry();
|
this.typeConfiguration = typeConfiguration;
|
||||||
this.typeFactory = typeFactory;
|
this.typeFactory = typeFactory;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -51,15 +52,15 @@ public class TypeResolver implements Serializable {
|
||||||
// }
|
// }
|
||||||
|
|
||||||
public void registerTypeOverride(BasicType type) {
|
public void registerTypeOverride(BasicType type) {
|
||||||
basicTypeRegistry.register( type );
|
typeConfiguration.getBasicTypeRegistry().register( type );
|
||||||
}
|
}
|
||||||
|
|
||||||
public void registerTypeOverride(UserType type, String[] keys) {
|
public void registerTypeOverride(UserType type, String[] keys) {
|
||||||
basicTypeRegistry.register( type, keys );
|
typeConfiguration.getBasicTypeRegistry().register( type, keys );
|
||||||
}
|
}
|
||||||
|
|
||||||
public void registerTypeOverride(CompositeUserType type, String[] keys) {
|
public void registerTypeOverride(CompositeUserType type, String[] keys) {
|
||||||
basicTypeRegistry.register( type, keys );
|
typeConfiguration.getBasicTypeRegistry().register( type, keys );
|
||||||
}
|
}
|
||||||
|
|
||||||
public TypeFactory getTypeFactory() {
|
public TypeFactory getTypeFactory() {
|
||||||
|
@ -74,7 +75,7 @@ public class TypeResolver implements Serializable {
|
||||||
* @return The registered type
|
* @return The registered type
|
||||||
*/
|
*/
|
||||||
public BasicType basic(String name) {
|
public BasicType basic(String name) {
|
||||||
return basicTypeRegistry.getRegisteredType( name );
|
return typeConfiguration.getBasicTypeRegistry().getRegisteredType( name );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -119,12 +120,13 @@ public class TypeResolver implements Serializable {
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Class typeClass = ReflectHelper.classForName( typeName );
|
final ClassLoaderService classLoaderService = typeConfiguration.getServiceRegistry().getService( ClassLoaderService.class );
|
||||||
|
Class typeClass = classLoaderService.classForName( typeName );
|
||||||
if ( typeClass != null ) {
|
if ( typeClass != null ) {
|
||||||
return typeFactory.byClass( typeClass, parameters );
|
return typeFactory.byClass( typeClass, parameters );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch ( ClassNotFoundException ignore ) {
|
catch ( ClassLoadingException ignore ) {
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
|
|
|
@ -25,6 +25,7 @@ import org.hibernate.internal.CoreMessageLogger;
|
||||||
import org.hibernate.internal.SessionFactoryRegistry;
|
import org.hibernate.internal.SessionFactoryRegistry;
|
||||||
import org.hibernate.metamodel.internal.MetamodelImpl;
|
import org.hibernate.metamodel.internal.MetamodelImpl;
|
||||||
import org.hibernate.metamodel.spi.MetamodelImplementor;
|
import org.hibernate.metamodel.spi.MetamodelImplementor;
|
||||||
|
import org.hibernate.service.ServiceRegistry;
|
||||||
import org.hibernate.type.BasicTypeRegistry;
|
import org.hibernate.type.BasicTypeRegistry;
|
||||||
import org.hibernate.type.Type;
|
import org.hibernate.type.Type;
|
||||||
import org.hibernate.type.TypeFactory;
|
import org.hibernate.type.TypeFactory;
|
||||||
|
@ -174,6 +175,18 @@ public class TypeConfiguration implements SessionFactoryObserver, Serializable {
|
||||||
return scope.getSessionFactory();
|
return scope.getSessionFactory();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Obtain the ServiceRegistry scoped to the TypeConfiguration.
|
||||||
|
*
|
||||||
|
* @apiNote Depending on what the {@link Scope} is currently scoped to will determine where the
|
||||||
|
* {@link ServiceRegistry} is obtained from.
|
||||||
|
*
|
||||||
|
* @return The ServiceRegistry
|
||||||
|
*/
|
||||||
|
public ServiceRegistry getServiceRegistry() {
|
||||||
|
return scope.getServiceRegistry();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sessionFactoryCreated(SessionFactory factory) {
|
public void sessionFactoryCreated(SessionFactory factory) {
|
||||||
// Instead of allowing scope#setSessionFactory to influence this, we use the SessionFactoryObserver callback
|
// Instead of allowing scope#setSessionFactory to influence this, we use the SessionFactoryObserver callback
|
||||||
|
@ -237,6 +250,16 @@ public class TypeConfiguration implements SessionFactoryObserver, Serializable {
|
||||||
return metadataBuildingContext;
|
return metadataBuildingContext;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ServiceRegistry getServiceRegistry() {
|
||||||
|
if ( metadataBuildingContext != null ) {
|
||||||
|
return metadataBuildingContext.getBootstrapContext().getServiceRegistry();
|
||||||
|
}
|
||||||
|
else if ( sessionFactory != null ) {
|
||||||
|
return sessionFactory.getServiceRegistry();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
public void setMetadataBuildingContext(MetadataBuildingContext metadataBuildingContext) {
|
public void setMetadataBuildingContext(MetadataBuildingContext metadataBuildingContext) {
|
||||||
this.metadataBuildingContext = metadataBuildingContext;
|
this.metadataBuildingContext = metadataBuildingContext;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue