Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Configuring Grails to use own DataSource implementation or to proxy the standard DataSource

In an application I want to use my own implementation of javax.sql.DataSource that extends the standard org.apache.commons.dbcp.BasicDataSource used by Grails and adds the functionality to set the client identifier based on the currently logged in user at the Grails application.

What is the best way to change the underlying javax.sql.DataSource implementation in a Grails application?

At the moment I see two possibilities:

  • change the implementation of the DataSource that is used by Grails
  • proxy the DataSource that is used by Grails and add the functionality with AOP

Any hints on how to deal with this requirement?

like image 770
stefanglase Avatar asked Aug 04 '10 09:08

stefanglase


2 Answers

here is my resources.groovy

import org.codehaus.groovy.grails.commons.ConfigurationHolder as CH

// Place your Spring DSL code here
beans = {

    /**
     * c3P0 pooled data source that forces renewal of DB connections of certain age 
     * to prevent stale/closed DB connections and evicts excess idle connections
     * Still using the JDBC configuration settings from DataSource.groovy
     * to have easy environment specific setup available
     */
    dataSource(com.mchange.v2.c3p0.ComboPooledDataSource) { bean ->
        bean.destroyMethod = 'close'
        //use grails' datasource configuration for connection user, password, driver and JDBC url
        user = CH.config.dataSource.username 
        password = CH.config.dataSource.password
        driverClass = CH.config.dataSource.driverClassName
        jdbcUrl = CH.config.dataSource.url
        //force connections to renew after 2 hours
        maxConnectionAge = 2 * 60 * 60
        //get rid too many of idle connections after 30 minutes 
        maxIdleTimeExcessConnections = 30 * 60
    }

}

i'm using c3p0 ComboPooledDataSource

like image 176
Oleksandr Avatar answered Oct 22 '22 08:10

Oleksandr


did you try configuring your own datasource in resources.groovy? Here is a blog post (not mine) that goes over the process

http://burtbeckwith.com/blog/?p=312

the stuff you need is at the end.

like image 28
hvgotcodes Avatar answered Oct 22 '22 08:10

hvgotcodes