All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.hibernate.service.internal.SessionFactoryServiceRegistryBuilderImpl Maven / Gradle / Ivy

There is a newer version: 7.0.0.Alpha1
Show newest version
/*
 * 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 .
 */
package org.hibernate.service.internal;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.boot.spi.SessionFactoryOptions;
import org.hibernate.engine.spi.SessionFactoryImplementor;
import org.hibernate.service.Service;
import org.hibernate.service.spi.ServiceRegistryImplementor;
import org.hibernate.service.spi.SessionFactoryServiceInitiator;
import org.hibernate.service.spi.SessionFactoryServiceRegistry;
import org.hibernate.service.spi.SessionFactoryServiceRegistryBuilder;

/**
 * @author Steve Ebersole
 */
public class SessionFactoryServiceRegistryBuilderImpl implements SessionFactoryServiceRegistryBuilder {
	private final ServiceRegistryImplementor parent;

	private final List initiators = standardInitiatorList();
	private final List providedServices = new ArrayList<>();

	public SessionFactoryServiceRegistryBuilderImpl(ServiceRegistryImplementor parent) {
		this.parent = parent;
	}

	/**
	 * Used from the {@link #initiators} variable initializer
	 *
	 * @return List of standard initiators
	 */
	private static List standardInitiatorList() {
		final List initiators = new ArrayList<>();
		initiators.addAll( StandardSessionFactoryServiceInitiators.LIST );
		return initiators;
	}

	/**
	 * Adds a service initiator.
	 *
	 * @param initiator The initiator to be added
	 *
	 * @return this, for method chaining
	 */
	@Override
	@SuppressWarnings( {"UnusedDeclaration"})
	public SessionFactoryServiceRegistryBuilder addInitiator(SessionFactoryServiceInitiator initiator) {
		initiators.add( initiator );
		return this;
	}

	/**
	 * Adds a user-provided service.
	 *
	 * @param serviceRole The role of the service being added
	 * @param service The service implementation
	 *
	 * @return this, for method chaining
	 */
	@Override
	@SuppressWarnings( {"unchecked"})
	public SessionFactoryServiceRegistryBuilder addService(final Class serviceRole, final Service service) {
		providedServices.add( new ProvidedService( serviceRole, service ) );
		return this;
	}

	public SessionFactoryServiceRegistry buildSessionFactoryServiceRegistry(
			SessionFactoryImplementor sessionFactory,
			SessionFactoryOptions options) {
		return new SessionFactoryServiceRegistryImpl(
				parent,
				initiators,
				providedServices,
				sessionFactory,
				options
		);
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy