2012-06-20 16 views
5

Tratando de averiguar cómo abrir una transacción con un dataSource alternativo en griales. He definido los siguientes dataSources ...Grails 'withTransaction' con fuentes de datos alternativas

dataSource { 
    dbCreate = "update" 
    url = "jdbc:h2:mem:testDb;MVCC=TRUE" 
} 

dataSource_ALT { 
    dbCreate = "update" 
    url = "jdbc:h2:mem:altDb;MVCC=TRUE" 
} 

soy capaz de hacer esto con el origen de datos por defecto ...

Foo.withTransaction { status -> 
    //... 
} 

Pero cuando intento y hago con el origen de datos ALT, I obtener una excepción - 'No frijol transactionManager configurado' ...

Foo.ALT.withTransaction { status -> 
    //... 
} 

¿hay una manera de iniciar una transacción con un origen de datos diferente? He hecho algunas investigaciones y no he podido encontrar mucho.

Gracias!

+0

No he probado esto, pero si no es compatible, parece un error/requisito perdido al agregar múltiples fuentes de datos en griales 2. Tendrá que usar una solución de usar '.withTransaction' contra objetos de dominio con solo una fuente de datos. – krock

+0

¿Funciona si no usa los accesos directos? 'def sessionFactory_ALT def hacerTarea() {def tx = sessionFactory_ALT.currentSession.beginTransaction() tx.commit() tx.rollback() etc ... } ' – Raphael

Respuesta

0

@Raphael Su sugerencia no funciona. Pude ir al siguiente paso y trabajar con Transacción asignando un administrador de transacciones. Parecen ser creados, simplemente no unidos. Existen como Spring beans llamados algo así como transactionManager_ALT (en este ejemplo). No estoy seguro de qué es lo que realmente los crea y por qué no están adjuntos a GormStaticApi.

decir aquí que haría:

Foo["ALT"].transactionManager = transactionManager_ALT 

Probablemente se trate de elegir una clase de dominio y asignar todos los diferentes gestores de transacciones, ver si funciona, a continuación, utilizar una clase de dominio que en todas partes para iniciar las transacciones.

Cuestiones relacionadas