in grails-datastore-gorm-hibernate/src/main/groovy/org/grails/orm/hibernate/HibernateDatastore.java [101:177]
public HibernateDatastore(final ConnectionSources<SessionFactory, HibernateConnectionSourceSettings> connectionSources, final HibernateMappingContext mappingContext, final ConfigurableApplicationEventPublisher eventPublisher) {
super(connectionSources, mappingContext);
this.metadata = getMetadataInternal();
HibernateConnectionSource defaultConnectionSource = (HibernateConnectionSource) connectionSources.getDefaultConnectionSource();
this.transactionManager = new GrailsHibernateTransactionManager(
defaultConnectionSource.getSource(),
defaultConnectionSource.getDataSource(),
org.hibernate.FlushMode.valueOf(defaultFlushModeName));
this.eventPublisher = eventPublisher;
this.eventTriggeringInterceptor = new HibernateEventListener(this);
this.autoTimestampEventListener = new AutoTimestampEventListener(this);
HibernateConnectionSourceSettings settings = defaultConnectionSource.getSettings();
HibernateConnectionSourceSettings.HibernateSettings hibernateSettings = settings.getHibernate();
ClosureEventTriggeringInterceptor interceptor = (ClosureEventTriggeringInterceptor) hibernateSettings.getEventTriggeringInterceptor();
interceptor.setDatastore(this);
interceptor.setEventPublisher(eventPublisher);
registerEventListeners(this.eventPublisher);
configureValidatorRegistry(settings, mappingContext);
this.mappingContext.addMappingContextListener(new MappingContext.Listener() {
@Override
public void persistentEntityAdded(PersistentEntity entity) {
gormEnhancer.registerEntity(entity);
}
});
initializeConverters(this.mappingContext);
if(!(connectionSources instanceof SingletonConnectionSources)) {
final HibernateDatastore parent = this;
Iterable<ConnectionSource<SessionFactory, HibernateConnectionSourceSettings>> allConnectionSources = connectionSources.getAllConnectionSources();
for (ConnectionSource<SessionFactory, HibernateConnectionSourceSettings> connectionSource : allConnectionSources) {
SingletonConnectionSources<SessionFactory, HibernateConnectionSourceSettings> singletonConnectionSources = new SingletonConnectionSources<>(connectionSource, connectionSources.getBaseConfiguration());
HibernateDatastore childDatastore;
if (ConnectionSource.DEFAULT.equals(connectionSource.getName())) {
childDatastore = this;
} else {
childDatastore = createChildDatastore(mappingContext, eventPublisher, parent, singletonConnectionSources);
}
datastoresByConnectionSource.put(connectionSource.getName(), childDatastore);
}
// register a listener to update the datastore each time a connection source is added at runtime
connectionSources.addListener(connectionSource -> {
SingletonConnectionSources<SessionFactory, HibernateConnectionSourceSettings> singletonConnectionSources = new SingletonConnectionSources<>(connectionSource, connectionSources.getBaseConfiguration());
HibernateDatastore childDatastore = createChildDatastore(mappingContext, eventPublisher, parent, singletonConnectionSources);
datastoresByConnectionSource.put(connectionSource.getName(), childDatastore);
registerAllEntitiesWithEnhancer();
});
if(multiTenantMode == MultiTenancySettings.MultiTenancyMode.SCHEMA) {
if(this.tenantResolver instanceof AllTenantsResolver) {
AllTenantsResolver allTenantsResolver = (AllTenantsResolver) tenantResolver;
Iterable<Serializable> tenantIds = allTenantsResolver.resolveTenantIds();
for (Serializable tenantId : tenantIds) {
addTenantForSchemaInternal(tenantId.toString());
}
}
else {
Collection<String> allSchemas = schemaHandler.resolveSchemaNames(defaultConnectionSource.getDataSource());
for (String schema : allSchemas) {
addTenantForSchemaInternal(schema);
}
}
}
}
this.gormEnhancer = initialize();
}