This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository topia-2.x. See https://gitlab.nuiton.org/nuiton/topia-2.x.git commit db4697df294e15305bfcb0e024bae30deccdad3e Author: Eric Chatellier <eric.chatellier@gmail.com> Date: Sun Oct 23 18:40:56 2016 +0200 refs #3784: Fix database information usage --- .../java/org/nuiton/topia/framework/TopiaUtil.java | 52 ++++++++++++++++------ 1 file changed, 38 insertions(+), 14 deletions(-) diff --git a/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaUtil.java b/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaUtil.java index 6e4a32c..34ebdfd 100644 --- a/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaUtil.java +++ b/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaUtil.java @@ -29,6 +29,8 @@ import java.net.URL; import java.sql.Connection; import java.sql.SQLException; import java.util.Collection; +import java.util.HashMap; +import java.util.Map; import java.util.Properties; import java.util.StringTokenizer; import java.util.regex.Pattern; @@ -40,6 +42,8 @@ import org.hibernate.boot.Metadata; import org.hibernate.boot.registry.StandardServiceRegistry; import org.hibernate.boot.registry.StandardServiceRegistryBuilder; import org.hibernate.boot.spi.SessionFactoryOptions; +import org.hibernate.cfg.AvailableSettings; +import org.hibernate.engine.config.spi.ConfigurationService; import org.hibernate.engine.jdbc.connections.spi.ConnectionProvider; import org.hibernate.engine.jdbc.connections.spi.JdbcConnectionAccess; import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment; @@ -47,12 +51,21 @@ import org.hibernate.engine.jdbc.spi.JdbcServices; import org.hibernate.engine.spi.SessionFactoryImplementor; import org.hibernate.mapping.PersistentClass; import org.hibernate.mapping.Table; +import org.hibernate.resource.transaction.spi.DdlTransactionIsolator; import org.hibernate.service.Service; import org.hibernate.service.ServiceRegistry; +import org.hibernate.service.spi.ServiceRegistryImplementor; import org.hibernate.service.spi.SessionFactoryServiceRegistry; import org.hibernate.tool.schema.extract.internal.DatabaseInformationImpl; import org.hibernate.tool.schema.extract.spi.DatabaseInformation; import org.hibernate.tool.schema.extract.spi.TableInformation; +import org.hibernate.tool.schema.internal.ExceptionHandlerLoggedImpl; +import org.hibernate.tool.schema.internal.Helper; +import org.hibernate.tool.schema.internal.HibernateSchemaManagementTool; +import org.hibernate.tool.schema.internal.exec.JdbcContext; +import org.hibernate.tool.schema.spi.ExecutionOptions; +import org.hibernate.tool.schema.spi.SchemaManagementTool; +import org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator; import org.nuiton.topia.TopiaContext; import org.nuiton.topia.TopiaContextFactory; import org.nuiton.topia.TopiaNotFoundException; @@ -221,13 +234,18 @@ public class TopiaUtil { try { connection = connectionProvider.getConnection(); - JdbcConnectionAccess jdbcConnectionAccess = serviceRegistry.getService( JdbcServices.class ).getBootstrapJdbcConnectionAccess(); - DatabaseInformation databaseInformation = new DatabaseInformationImpl( - serviceRegistry, - serviceRegistry.getService( JdbcEnvironment.class ), - jdbcConnectionAccess, - metadata.getDatabase().getDefaultNamespace().getPhysicalName().getCatalog(), - metadata.getDatabase().getDefaultNamespace().getPhysicalName().getSchema() + Map config = serviceRegistry.getService( ConfigurationService.class ).getSettings(); + final ExecutionOptions executionOptions = SchemaManagementToolCoordinator.buildExecutionOptions( + config, + ExceptionHandlerLoggedImpl.INSTANCE + ); + HibernateSchemaManagementTool tool = (HibernateSchemaManagementTool)serviceRegistry.getService( SchemaManagementTool.class ); + final JdbcContext jdbcContext = tool.resolveJdbcContext( executionOptions.getConfigurationValues() ); + final DdlTransactionIsolator ddlTransactionIsolator = tool.getDdlTransactionIsolator( jdbcContext ); + final DatabaseInformation databaseInformation = Helper.buildDatabaseInformation( + tool.getServiceRegistry(), + ddlTransactionIsolator, + metadata.getDatabase().getDefaultNamespace().getName() ); TableInformation tmd = databaseInformation.getTableInformation(testTable.getQualifiedTableName()); @@ -300,13 +318,19 @@ public class TopiaUtil { Metadata metadata = txi.getMetadata(); ServiceRegistry serviceRegistry = txi.getServiceRegistry(); - JdbcConnectionAccess jdbcConnectionAccess = serviceRegistry.getService( JdbcServices.class ).getBootstrapJdbcConnectionAccess(); - DatabaseInformation databaseInformation = new DatabaseInformationImpl( - serviceRegistry, - serviceRegistry.getService( JdbcEnvironment.class ), - jdbcConnectionAccess, - metadata.getDatabase().getDefaultNamespace().getPhysicalName().getCatalog(), - metadata.getDatabase().getDefaultNamespace().getPhysicalName().getSchema() + + Map config = serviceRegistry.getService( ConfigurationService.class ).getSettings(); + final ExecutionOptions executionOptions = SchemaManagementToolCoordinator.buildExecutionOptions( + config, + ExceptionHandlerLoggedImpl.INSTANCE + ); + HibernateSchemaManagementTool tool = (HibernateSchemaManagementTool)serviceRegistry.getService( SchemaManagementTool.class ); + final JdbcContext jdbcContext = tool.resolveJdbcContext( executionOptions.getConfigurationValues() ); + final DdlTransactionIsolator ddlTransactionIsolator = tool.getDdlTransactionIsolator( jdbcContext ); + final DatabaseInformation databaseInformation = Helper.buildDatabaseInformation( + tool.getServiceRegistry(), + ddlTransactionIsolator, + metadata.getDatabase().getDefaultNamespace().getName() ); Collection<PersistentClass> classes = metadata.getEntityBindings(); -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.