Skip to content

Commit

Permalink
fix for GRAILS-12037 "Problem With Multiple Datasources"
Browse files Browse the repository at this point in the history
  • Loading branch information
graemerocher committed Mar 5, 2015
1 parent d49098c commit c3e7175
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 22 deletions.
4 changes: 2 additions & 2 deletions grails-bom/plugins.properties
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
hibernate=4.3.8.0.M2
hibernate=4.3.8.0.BUILD-SNAPSHOT
mongodb=4.0.0.M2
cache=3.0.0.M2
asset-pipeline=3.0.0.M2
scaffolding=3.0.0.M1
scaffolding=3.0.0.BUILD-SNAPSHOT
fields=2.0.0.M1
geb=1.0.0.BUILD-SNAPSHOT
Original file line number Diff line number Diff line change
Expand Up @@ -107,9 +107,10 @@ class DataSourceGrailsPlugin extends Plugin {

protected void createDatasource(beanBuilder, String dataSourceName, Map dataSourceData ) {
boolean isDefault = dataSourceName == 'dataSource'
String suffix = isDefault ? '' : dataSourceName
String suffix = isDefault ? '' : "_$dataSourceName"
String unproxiedName = "dataSourceUnproxied$suffix"
String lazyName = "dataSourceLazy$suffix"
String beanName = isDefault ? 'dataSource' : "dataSource_$dataSourceName"

if (applicationContext?.containsBean(dataSourceName)) {
return
Expand All @@ -121,7 +122,7 @@ class DataSourceGrailsPlugin extends Plugin {
expectedType = DataSource
}
beanBuilder."$lazyName"(LazyConnectionDataSourceProxy, beanBuilder.ref(unproxiedName))
beanBuilder."$dataSourceName"(TransactionAwareDataSourceProxy, beanBuilder.ref(lazyName))
beanBuilder."$beanName"(TransactionAwareDataSourceProxy, beanBuilder.ref(lazyName))
return
}

Expand Down Expand Up @@ -197,7 +198,7 @@ class DataSourceGrailsPlugin extends Plugin {
}

beanBuilder."$lazyName"(LazyConnectionDataSourceProxy, beanBuilder.ref(unproxiedName))
beanBuilder."$dataSourceName"(TransactionAwareDataSourceProxy, beanBuilder.ref(lazyName))
beanBuilder."$beanName"(TransactionAwareDataSourceProxy, beanBuilder.ref(lazyName))

// transactionManager beans will get overridden in Hibernate plugin
beanBuilder."transactionManager$suffix"(DataSourceTransactionManager, beanBuilder.ref(lazyName))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -252,7 +252,7 @@ class DataSourceGrailsPluginTests extends AbstractGrailsMockTests {
username = "foo"
password = "blah"
}
dataSource_ds2 {
ds2 {
driverClassName = "org.h2.Driver"
url = "jdbc:h2:mem:testDb2"
username = "user"
Expand All @@ -261,19 +261,19 @@ class DataSourceGrailsPluginTests extends AbstractGrailsMockTests {
dbCreate = "update"
readOnly = true
}
dataSource_ds3 {
ds3 {
driverClassName = "org.h2.Driver"
url = "jdbc:h2:mem:testDb3"
username = "sa"
password = ""
dbCreate = "create-drop"
readOnly = true
}
dataSource_ds4 {
ds4 {
driverClassName = "org.h2.Driver"
url = "jdbc:h2:mem:testDb4"
}
dataSource_jndi {
jndi {
jndiName = "java:comp/env/myDataSource"
}
}
Expand Down Expand Up @@ -304,13 +304,13 @@ class DataSourceGrailsPluginTests extends AbstractGrailsMockTests {
beanDef = bb.getBeanDefinition('dataSource_ds2')
assertEquals TransactionAwareDataSourceProxy.name, beanDef.beanClassName

beanDef = bb.getBeanDefinition('dataSourceLazydataSource_ds2')
beanDef = bb.getBeanDefinition('dataSourceLazy_ds2')
assertEquals LazyConnectionDataSourceProxy.name, beanDef.beanClassName

beanDef = bb.getBeanDefinition('dataSourceUnproxieddataSource_ds2')
beanDef = bb.getBeanDefinition('dataSourceUnproxied_ds2')
assertEquals 'pooled false, readOnly true', ReadOnlyDriverManagerDataSource.name, beanDef.beanClassName

parentBeanDef = bb.getBeanDefinition('abstractGrailsDataSourceBeandataSource_ds2')
parentBeanDef = bb.getBeanDefinition('abstractGrailsDataSourceBean_ds2')

assertEquals 'user', parentBeanDef.propertyValues.getPropertyValue('username').value
assertEquals 'pass', parentBeanDef.propertyValues.getPropertyValue('password').value
Expand All @@ -323,13 +323,13 @@ class DataSourceGrailsPluginTests extends AbstractGrailsMockTests {
beanDef = bb.getBeanDefinition('dataSource_ds3')
assertEquals TransactionAwareDataSourceProxy.name, beanDef.beanClassName

beanDef = bb.getBeanDefinition('dataSourceLazydataSource_ds3')
beanDef = bb.getBeanDefinition('dataSourceLazy_ds3')
assertEquals LazyConnectionDataSourceProxy.name, beanDef.beanClassName

beanDef = bb.getBeanDefinition('dataSourceUnproxieddataSource_ds3')
beanDef = bb.getBeanDefinition('dataSourceUnproxied_ds3')
assertEquals 'pooled default true, readOnly true', TomcatDataSource.name, beanDef.beanClassName

parentBeanDef = bb.getBeanDefinition('abstractGrailsDataSourceBeandataSource_ds3')
parentBeanDef = bb.getBeanDefinition('abstractGrailsDataSourceBean_ds3')

assertEquals 'sa', parentBeanDef.propertyValues.getPropertyValue('username').value
assertEquals '', parentBeanDef.propertyValues.getPropertyValue('password').value
Expand All @@ -342,13 +342,13 @@ class DataSourceGrailsPluginTests extends AbstractGrailsMockTests {
beanDef = bb.getBeanDefinition('dataSource_ds4')
assertEquals TransactionAwareDataSourceProxy.name, beanDef.beanClassName

beanDef = bb.getBeanDefinition('dataSourceLazydataSource_ds4')
beanDef = bb.getBeanDefinition('dataSourceLazy_ds4')
assertEquals LazyConnectionDataSourceProxy.name, beanDef.beanClassName

beanDef = bb.getBeanDefinition('dataSourceUnproxieddataSource_ds4')
beanDef = bb.getBeanDefinition('dataSourceUnproxied_ds4')
assertEquals TomcatDataSource.name, beanDef.beanClassName

parentBeanDef = bb.getBeanDefinition('abstractGrailsDataSourceBeandataSource_ds4')
parentBeanDef = bb.getBeanDefinition('abstractGrailsDataSourceBean_ds4')

assertEquals 'sa', parentBeanDef.propertyValues.getPropertyValue('username').value
assertEquals '', parentBeanDef.propertyValues.getPropertyValue('password').value
Expand All @@ -361,7 +361,7 @@ class DataSourceGrailsPluginTests extends AbstractGrailsMockTests {
beanDef = bb.getBeanDefinition('dataSource_jndi')
assertEquals TransactionAwareDataSourceProxy.name, beanDef.beanClassName

beanDef = bb.getBeanDefinition('dataSourceUnproxieddataSource_jndi')
beanDef = bb.getBeanDefinition('dataSourceUnproxied_jndi')
assertEquals JndiObjectFactoryBean.name, beanDef.beanClassName

assertEquals "java:comp/env/myDataSource", beanDef.propertyValues.getPropertyValue('jndiName').value
Expand All @@ -379,7 +379,7 @@ class DataSourceGrailsPluginTests extends AbstractGrailsMockTests {
username = "sa"
password = ""
}
dataSource_ds2 {
ds2 {
pooled = true
driverClassName = "org.h2.Driver"
url = "jdbc:h2:tcp://localhost:1234/~/test"
Expand All @@ -402,8 +402,8 @@ class DataSourceGrailsPluginTests extends AbstractGrailsMockTests {
sql.execute('create table thing (foo int)')

def dataSource_ds2 = ctx.dataSource_ds2
def dataSourceLazy_ds2 = ctx.dataSourceLazydataSource_ds2
def dataSourceUnproxied_ds2 = ctx.dataSourceUnproxieddataSource_ds2
def dataSourceLazy_ds2 = ctx.dataSourceLazy_ds2
def dataSourceUnproxied_ds2 = ctx.dataSourceUnproxied_ds2
assert dataSource_ds2.targetDataSource.is(dataSourceLazy_ds2)
assert dataSourceLazy_ds2.targetDataSource.is(dataSourceUnproxied_ds2)

Expand Down

0 comments on commit c3e7175

Please sign in to comment.