/*
 * 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 <http://www.gnu.org/licenses/lgpl-2.1.html>.
 */
package org.hibernate.tool.schema.internal.exec;

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.SQLException;

import org.hibernate.boot.model.naming.Identifier;
import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment;
import org.hibernate.resource.transaction.spi.DdlTransactionIsolator;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.tool.schema.extract.spi.ExtractionContext;

Author:Steve Ebersole
/** * @author Steve Ebersole */
public class ImprovedExtractionContextImpl implements ExtractionContext { private final ServiceRegistry serviceRegistry; private final JdbcEnvironment jdbcEnvironment; private final DdlTransactionIsolator ddlTransactionIsolator; private final Identifier defaultCatalog; private final Identifier defaultSchema; private final DatabaseObjectAccess databaseObjectAccess; private DatabaseMetaData jdbcDatabaseMetaData; public ImprovedExtractionContextImpl( ServiceRegistry serviceRegistry, JdbcEnvironment jdbcEnvironment, DdlTransactionIsolator ddlTransactionIsolator, Identifier defaultCatalog, Identifier defaultSchema, DatabaseObjectAccess databaseObjectAccess) { this.serviceRegistry = serviceRegistry; this.jdbcEnvironment = jdbcEnvironment; this.ddlTransactionIsolator = ddlTransactionIsolator; this.defaultCatalog = defaultCatalog; this.defaultSchema = defaultSchema; this.databaseObjectAccess = databaseObjectAccess; } @Override public ServiceRegistry getServiceRegistry() { return serviceRegistry; } @Override public JdbcEnvironment getJdbcEnvironment() { return jdbcEnvironment; } @Override public Connection getJdbcConnection() { return ddlTransactionIsolator.getIsolatedConnection(); } @Override public DatabaseMetaData getJdbcDatabaseMetaData() { if ( jdbcDatabaseMetaData == null ) { try { jdbcDatabaseMetaData = getJdbcConnection().getMetaData(); } catch (SQLException e) { throw jdbcEnvironment.getSqlExceptionHelper().convert( e, "Unable to obtain JDBC DatabaseMetaData" ); } } return jdbcDatabaseMetaData; } @Override public Identifier getDefaultCatalog() { return defaultCatalog; } @Override public Identifier getDefaultSchema() { return defaultSchema; } @Override public DatabaseObjectAccess getDatabaseObjectAccess() { return databaseObjectAccess; } @Override public void cleanup() { if ( jdbcDatabaseMetaData != null ) { jdbcDatabaseMetaData = null; } } }