2012-06-20 8 views
5

Cercando di capire come aprire una transazione con una fonte di dati alternativa in Grails. Ho le seguenti origini dati definiti ...Grails 'withTransaction' con dati alternativiSource

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

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

sono in grado di fare questo con il datasource di default ...

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

Ma quando provo e faccio con la dataSource ALT, I ottenere un'eccezione - 'No fagioli transactionManager configurato' ...

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

c'è un modo per avviare una transazione utilizzando una dataSource diverso? Ho fatto un po 'di ricerche e non sono riuscito a trovare molto.

Grazie!

+0

Non l'ho provato, ma se non è supportato sembra un bug/mancato requisito nell'aggiungere più origini dati in grails 2. Dovrai usare una soluzione alternativa per usare '.withTransaction' contro gli oggetti di dominio con un solo fonte di dati. – krock

+0

Funziona se non usi le scorciatoie? 'def sessionFactory_ALT def doStuff() { def tx = sessionFactory_ALT.currentSession.beginTransaction() tx.commit() tx.rollback() ecc ... } ' – Raphael

risposta

0

@Raphael Il tuo suggerimento non funziona. Sono stato in grado di andare al passo successivo e ottenere con Transaction lavorando assegnando un gestore delle transazioni. Sembrano essere creati, solo non attaccati. Esistono come bean Spring chiamati qualcosa come transactionManager_ALT (in questo esempio). Non sei sicuro di cosa li crei e perché non sono collegati a GormStaticApi.

vale a dire qui faresti:

Foo["ALT"].transactionManager = transactionManager_ALT 

Probabilmente cercherà di prendere una classe di dominio e assegnare tutti i diversi gestori di transazioni, vedere se funziona, quindi utilizzare che una classe di dominio in tutto il mondo per iniziare le operazioni.