Grails 2 múltiples fuentes de datos dinámicas en servicios

Estoy trabajando en una aplicación de Grails donde debo acceder a varias fuentes de datos. Las fuentes de datos se definen en la base de datos predeterminada (es decir, se almacenan allí y debo hacer una llamada a la base de datos predeterminada para recuperar una lista de los nombres de las fuentes de datos a los que debo prepararme). Cuando el servidor arranca, recupero la lista de bases de datos, creo los beans de fuente de datos y los inyecto. Todas las bases de datos agregadas dinámicamente son estructuralmente idénticas (es decir, tienen la misma tabla y estructura de objetos de dominio).

Esta pregunta es lo más cercano que pude a un trozo de código útil, pero no es exactamente lo que necesito.

Número 1Cuando registro los beans de origen de datos, aparecen donde espero, pero Grails no los recoge.

Así es como los agrego:

// Register datasource bean
def beanName = 'dataSource_devDB1'

BeanBuilder bb = new BeanBuilder()
bb.beans {
    "${beanName}"(BasicDataSource) { 
        url = "jdbc:h2:devDB1Db;MVCC=TRUE"
        pooled = true
        driverClassName = "org.h2.Driver"
        username = "sa"
        password = ""            
    }
}

bb.registerBeans(grailsApplication.mainContext)

// check that it registered
def ctx = grailsApplication.mainContext
def ctxlist = ctx2.beanDefinitionNames.findAll{it.contains( 'dataSource' )}

log.info "ctxlist = " + ctxlist

Esto imprime:

[dataSource, dataSourceUnproxied, dataSource_devDB1]

Cuando hago esto, puedo ejecutar operaciones en la fuente de datos predeterminada, y eso es todo.

Issue # 2Si declaro todas mis fuentes de datos como parte de laDatasource.groovy archivo, entonces puedo ejecutar operaciones en todas mis bases de datos, pero noSegún lo anunciado por la documentación.

Funciona si hago la asignación estática en mis objetos de dominio:

static mapping = {datasources(['devDB1', 'devDB2', 'DEFAULT')] or datasource = 'ALL'

pero lo que quiero es realizar todo esto como parte de un servicio y declarar a mis objetos de dominio usar TODAS las fuentes de datos.

La declaración de la fuente de datos en el servicio no funciona:

class secureDBService{

  static datasource = "devDB1"

  def readWriteMethod(){
   .....
  // this always uses the default datasource ignoring the static property above.
  // the only time it uses devDB1 is if I declare it as part of the domain datasource
  // mapping
  }
}

Esto siempre usará la fuente de datos predeterminada sin importar qué. La única vez que utiliza la fuente de datos correcta es si en el objeto de dominio enumero la fuente de datos en cuestión.

Entonces, alguien tiene:

¿Intentó agregar fuentes de datos dinámicas y tuvo éxito?

¿Cambiar entre fuentes de datos utilizando servicios de Grails?

(y esto sería un extra fantástico, ya que una "cereza en la parte superior") ¿tuvo éxito al usar múltiples fuentes de datos con el núcleo de seguridad de Spring? ¿Cómo se cambia la fuente de datos para el complemento de seguridad?

Gracias

-

Respuestas a la pregunta(4)

Su respuesta a la pregunta