/*
* Hibernate OGM, Domain model persistence for NoSQL datastores
*
* 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.ogm.boot.impl;
import java.util.Map;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.AvailableSettings;
import org.hibernate.ogm.cfg.OgmProperties;
import org.hibernate.ogm.cfg.impl.HibernateSearchIntegration;
import org.hibernate.ogm.datastore.impl.DatastoreProviderInitiator;
import org.hibernate.ogm.dialect.eventstate.impl.EventContextManagerInitiator;
import org.hibernate.ogm.dialect.impl.GridDialectInitiator;
import org.hibernate.ogm.dialect.impl.IdentityColumnAwareGridDialectInitiator;
import org.hibernate.ogm.dialect.impl.MultigetGridDialectInitiator;
import org.hibernate.ogm.dialect.impl.OgmDialectFactoryInitiator;
import org.hibernate.ogm.dialect.impl.OptimisticLockingAwareGridDialectInitiator;
import org.hibernate.ogm.dialect.impl.QueryableGridDialectInitiator;
import org.hibernate.ogm.jdbc.impl.OgmConnectionProviderInitiator;
import org.hibernate.ogm.jpa.impl.OgmMutableIdentifierGeneratorFactoryInitiator;
import org.hibernate.ogm.jpa.impl.OgmPersisterClassResolverInitiator;
import org.hibernate.ogm.options.navigation.impl.OptionsServiceInitiator;
import org.hibernate.ogm.query.impl.OgmQueryTranslatorFactoryInitiator;
import org.hibernate.ogm.service.impl.OgmConfigurationService;
import org.hibernate.ogm.service.impl.OgmJdbcServicesInitiator;
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.util.configurationreader.spi.ConfigurationPropertyReader;
import org.hibernate.service.spi.ServiceContributor;
/**
* Applies OGM-specific configurations to bootstrapped service registries:
* <ul>
* <li>Registers OGM's service initiators</li>
* <li>Configures Hibernate Search so it works for OGM</li>
* </ul>
*
* @author Gunnar Morling
*/
public class OgmServiceRegistryInitializer implements ServiceContributor {
@Override
public void contribute(StandardServiceRegistryBuilder serviceRegistryBuilder) {
Map<Object, Object> settings = serviceRegistryBuilder.getSettings();
boolean isOgmEnabled = isOgmEnabled( settings );
// registering OgmService in each case; Other OGM extensions then can recognize whether OGM is enabled or not
// and either register their specific customizations or pass through the ORM default implementations
serviceRegistryBuilder.addService( OgmConfigurationService.class, new OgmConfigurationServiceImpl( isOgmEnabled ) );
if ( !isOgmEnabled ) {
return;
}
if ( !settings.containsKey( AvailableSettings.KEYWORD_AUTO_QUOTING_ENABLED ) ) {
serviceRegistryBuilder.applySetting( AvailableSettings.KEYWORD_AUTO_QUOTING_ENABLED, false );
}
HibernateSearchIntegration.resetProperties( serviceRegistryBuilder );
serviceRegistryBuilder.addInitiator( OgmQueryTranslatorFactoryInitiator.INSTANCE );
serviceRegistryBuilder.addInitiator( OgmSessionFactoryServiceRegistryFactoryInitiator.INSTANCE );
serviceRegistryBuilder.addInitiator( OgmPersisterClassResolverInitiator.INSTANCE );
serviceRegistryBuilder.addInitiator( OgmConnectionProviderInitiator.INSTANCE );
serviceRegistryBuilder.addInitiator( OgmDialectFactoryInitiator.INSTANCE );
serviceRegistryBuilder.addInitiator( OgmTransactionCoordinatorBuilderInitiator.INSTANCE );
serviceRegistryBuilder.addInitiator( OgmJtaPlatformInitiator.INSTANCE );
serviceRegistryBuilder.addInitiator( OgmJdbcServicesInitiator.INSTANCE );
serviceRegistryBuilder.addInitiator( DatastoreProviderInitiator.INSTANCE );
serviceRegistryBuilder.addInitiator( OptionsServiceInitiator.INSTANCE );
serviceRegistryBuilder.addInitiator( OgmMutableIdentifierGeneratorFactoryInitiator.INSTANCE );
serviceRegistryBuilder.addInitiator( EventContextManagerInitiator.INSTANCE );
serviceRegistryBuilder.addInitiator( GridDialectInitiator.INSTANCE );
serviceRegistryBuilder.addInitiator( QueryableGridDialectInitiator.INSTANCE );
serviceRegistryBuilder.addInitiator( IdentityColumnAwareGridDialectInitiator.INSTANCE );
serviceRegistryBuilder.addInitiator( OptimisticLockingAwareGridDialectInitiator.INSTANCE );
serviceRegistryBuilder.addInitiator( MultigetGridDialectInitiator.INSTANCE );
}
private boolean isOgmEnabled(Map<?, ?> settings) {
return new ConfigurationPropertyReader( settings )
.property( OgmProperties.ENABLED, boolean.class )
.withDefault( false )
.getValue();
}
}