Skip to content

Commit

Permalink
OGM-952 Make TypeTranslator a SessionFactory Initiator
Browse files Browse the repository at this point in the history
Necessary so that TypeTranslator can access TypeResolver.
But makes Neo4J and all dialects invoking the TypeTranslator service fail.
We would need a different approach (find a way to get TypeResolver on
every getType call, get injected the MetadataImplementor, ?)
  • Loading branch information
emmanuelbernard authored and gunnarmorling committed Jan 8, 2016
1 parent 1a8c2ae commit d7c8428
Show file tree
Hide file tree
Showing 4 changed files with 15 additions and 10 deletions.
Expand Up @@ -30,7 +30,6 @@
import org.hibernate.ogm.service.impl.OgmSessionFactoryServiceRegistryFactoryInitiator;
import org.hibernate.ogm.transaction.impl.OgmJtaPlatformInitiator;
import org.hibernate.ogm.transaction.impl.OgmTransactionCoordinatorBuilderInitiator;
import org.hibernate.ogm.type.impl.TypeTranslatorInitiator;
import org.hibernate.ogm.util.configurationreader.spi.ConfigurationPropertyReader;
import org.hibernate.service.spi.ServiceContributor;

Expand Down Expand Up @@ -74,7 +73,6 @@ public void contribute(StandardServiceRegistryBuilder serviceRegistryBuilder) {
serviceRegistryBuilder.addInitiator( OgmJdbcServicesInitiator.INSTANCE );
serviceRegistryBuilder.addInitiator( DatastoreProviderInitiator.INSTANCE );
serviceRegistryBuilder.addInitiator( OptionsServiceInitiator.INSTANCE );
serviceRegistryBuilder.addInitiator( TypeTranslatorInitiator.INSTANCE );
serviceRegistryBuilder.addInitiator( OgmMutableIdentifierGeneratorFactoryInitiator.INSTANCE );
serviceRegistryBuilder.addInitiator( EventContextManagerInitiator.INSTANCE );

Expand Down
Expand Up @@ -11,6 +11,7 @@
import java.util.List;

import org.hibernate.ogm.datastore.impl.SchemaDefinerInitiator;
import org.hibernate.ogm.type.impl.TypeTranslatorInitiator;
import org.hibernate.service.spi.SessionFactoryServiceInitiator;
import org.hibernate.service.spi.SessionFactoryServiceRegistry;

Expand All @@ -25,6 +26,7 @@ public class OgmSessionFactoryServiceInitiators {
public static List<SessionFactoryServiceInitiator<?>> LIST = Collections.unmodifiableList( Arrays.<SessionFactoryServiceInitiator<?>>asList(
QueryParserServicesInitiator.INSTANCE,
SchemaDefinerInitiator.INSTANCE,
NativeNoSqlQueryInterpreterInitiator.INSTANCE
NativeNoSqlQueryInterpreterInitiator.INSTANCE,
TypeTranslatorInitiator.INSTANCE
) );
}
Expand Up @@ -25,6 +25,7 @@
import org.hibernate.type.EnumType;
import org.hibernate.type.SerializableToBlobType;
import org.hibernate.type.Type;
import org.hibernate.type.TypeResolver;
import org.hibernate.type.descriptor.converter.AttributeConverterTypeAdapter;
import org.hibernate.type.descriptor.java.JavaTypeDescriptor;
import org.hibernate.type.descriptor.java.JavaTypeDescriptorRegistry;
Expand All @@ -38,11 +39,15 @@ public class TypeTranslatorImpl implements TypeTranslator {

private static final Log log = LoggerFactory.make();

// ORM Type to OGM GridType relation
private final Map<Type, GridType> typeConverter;
private final GridDialect dialect;
// ORM type resolver
private final TypeResolver typeResolver;

public TypeTranslatorImpl(GridDialect dialect) {
public TypeTranslatorImpl(GridDialect dialect, TypeResolver typeResolver) {
this.dialect = dialect;
this.typeResolver = typeResolver;

Map<Type, GridType> tmpMap = newHashMap( 20 );
tmpMap.put( org.hibernate.type.ClassType.INSTANCE, ClassType.INSTANCE );
Expand Down
Expand Up @@ -6,19 +6,19 @@
*/
package org.hibernate.ogm.type.impl;

import java.util.Map;

import org.hibernate.boot.registry.StandardServiceInitiator;
import org.hibernate.boot.spi.SessionFactoryOptions;
import org.hibernate.engine.spi.SessionFactoryImplementor;
import org.hibernate.ogm.dialect.spi.GridDialect;
import org.hibernate.ogm.type.spi.TypeTranslator;
import org.hibernate.service.spi.ServiceRegistryImplementor;
import org.hibernate.service.spi.SessionFactoryServiceInitiator;

/**
* Initializes {@link TypeTranslator}.
*
* @author Emmanuel Bernard &lt;emmanuel@hibernate.org&gt;
*/
public class TypeTranslatorInitiator implements StandardServiceInitiator<TypeTranslator> {
public class TypeTranslatorInitiator implements SessionFactoryServiceInitiator<TypeTranslator> {

public static final TypeTranslatorInitiator INSTANCE = new TypeTranslatorInitiator();

Expand All @@ -28,8 +28,8 @@ public Class<TypeTranslator> getServiceInitiated() {
}

@Override
public TypeTranslator initiateService(Map configurationValues, ServiceRegistryImplementor registry) {
public TypeTranslator initiateService(SessionFactoryImplementor sessionFactory, SessionFactoryOptions sessionFactoryOptions, ServiceRegistryImplementor registry) {
GridDialect dialect = registry.getService( GridDialect.class );
return new TypeTranslatorImpl( dialect );
return new TypeTranslatorImpl( dialect, sessionFactory.getTypeResolver() );
}
}

0 comments on commit d7c8428

Please sign in to comment.