2012-06-20 14 views
5

Próba znalezienia sposobu otwarcia transakcji z alternatywnym źródłem danych w grails. Mam następujący DataSources zdefiniowane ...Grails "withTransaction" z alternatywnym źródłem danych

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

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

jestem w stanie to zrobić z domyślnego źródła danych ...

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

Ale gdy próbuję i zrobić z DataSource ALT, ja uzyskać wyjątek - "Nie skonfigurowano komponentu bean menedżera transakcji" ...

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

Czy istnieje sposób rozpoczęcia transakcji przy użyciu innego źródła danych? Zrobiłem trochę kopania i nie mogłem znaleźć wiele.

Dzięki!

+0

Nie próbowałem tego, ale jeśli nie jest obsługiwany, wydaje się, że błąd/pominięte wymaganie w dodawaniu wielu źródeł danych w grails 2. Będziesz musiał użyć obejścia przy użyciu '.withTransaction' przeciwko obiektom domeny z tylko jednym źródło danych. – krock

+0

Czy to działa, jeśli nie używasz skrótów? 'def sessionFactory_ALT def DoStuff() { def tx = sessionFactory_ALT.currentSession.beginTransaction() tx.commit() tx.rollback() itd ... } ' – Raphael

Odpowiedz

0

@Raphael Twoja sugestia działa. Udało mi się przejść do następnego kroku i uzyskać zTransakcją pracę poprzez przypisanie menedżera transakcji. Wydają się być stworzeni, po prostu nie przywiązani. Istnieją one jako fasola Spring o nazwie coś w rodzaju transactionManager_ALT (w tym przykładzie). Nie wiem, co tak naprawdę je tworzy i dlaczego nie są dołączone do GormStaticApi.

to tutaj chcesz zrobić:

Foo["ALT"].transactionManager = transactionManager_ALT 

Prawdopodobnie spróbuje wybrać jedną klasę domeny i przypisać wszystkie różne menedżerów transakcji, sprawdzić, czy to działa, a następnie użyć że jedna klasa domeny wszędzie do rozpoczęcia transakcji.

Powiązane problemy