Skip to content

Commit 6af2113

Browse files
committed
fix for GRAILS-5479 "SchemaExport script has hard-coded configuration class, should read from DataSource.groovy"
1 parent 45f4578 commit 6af2113

File tree

1 file changed

+21
-8
lines changed

1 file changed

+21
-8
lines changed

scripts/SchemaExport.groovy

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
11
import org.hibernate.dialect.DialectFactory
22
import org.springframework.jdbc.datasource.DriverManagerDataSource
33
import org.springframework.jdbc.support.JdbcUtils
4-
import org.codehaus.groovy.grails.orm.hibernate.cfg.GrailsAnnotationConfiguration
5-
64

75
includeTargets << grailsScript("_GrailsBootstrap")
86

97
def props = new Properties()
10-
def filename = "${basedir}/ddl.sql"
8+
def filename = "${grailsSettings.projectTargetDir}/ddl.sql"
119
boolean export = false
1210
boolean stdout = false
11+
String configClassName = 'org.codehaus.groovy.grails.orm.hibernate.cfg.GrailsAnnotationConfiguration'
1312

1413
def configClasspath = {
1514

@@ -51,6 +50,16 @@ def populateProperties = {
5150
props.'hibernate.connection.url' = dsConfig?.dataSource?.url ?: 'jdbc:hsqldb:mem:testDB'
5251
props.'hibernate.connection.driver_class' =
5352
dsConfig?.dataSource?.driverClassName ?: 'org.hsqldb.jdbcDriver'
53+
54+
if (dsConfig?.dataSource?.configClass) {
55+
if (dsConfig.dataSource.configClass instanceof Class) {
56+
configClassName = dsConfig.dataSource.configClass.name
57+
}
58+
else {
59+
configClassName = dsConfig.dataSource.configClass
60+
}
61+
}
62+
5463
if (dsConfig?.dataSource?.dialect) {
5564
def dialect = dsConfig.dataSource.dialect
5665
if (dialect instanceof Class) {
@@ -91,21 +100,25 @@ target(schemaExport: 'Run Hibernate SchemaExport') {
91100

92101
populateProperties()
93102

94-
def configuration = new GrailsAnnotationConfiguration(
95-
grailsApplication: grailsApp,
96-
properties: props)
103+
def configuration = classLoader.loadClass(configClassName).newInstance()
104+
configuration.setGrailsApplication(grailsApp)
105+
configuration.setProperties(props)
97106
def hibernateCfgXml = eventsClassLoader.getResource('hibernate/hibernate.cfg.xml')
98107
if (hibernateCfgXml) {
99108
configuration.configure(hibernateCfgXml)
100109
}
101110

102-
def schemaExport = classLoader.loadClass('org.hibernate.tool.hbm2ddl.SchemaExport').newInstance(configuration).setHaltOnError(true).setOutputFile(file.path).setDelimiter(';')
111+
def schemaExport = classLoader.loadClass('org.hibernate.tool.hbm2ddl.SchemaExport')
112+
.newInstance(configuration)
113+
.setHaltOnError(true)
114+
.setOutputFile(file.path)
115+
.setDelimiter(';')
103116

104117
def action = export ? "Exporting" : "Generating script to ${file.path}"
105118
println "${action} in environment '${grailsEnv}' using properties ${props}"
106119

107120
if (export) {
108-
// 11st drop, warning exceptions
121+
// 1st drop, warning exceptions
109122
schemaExport.execute(stdout, true, true, false)
110123
schemaExport.exceptions.clear()
111124
// then create

0 commit comments

Comments
 (0)