2012-06-20 4 views
5

Попытка выяснить, как открыть транзакцию с альтернативным источником данных в графе. Я определил следующие DataSources ...Grails 'withTransaction' с альтернативным источником данных

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

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

Я могу сделать это с DataSource по умолчанию ...

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

Но когда я пытаюсь сделать это с ALT DataSource, я получить исключение - «No TransactionManager боб сконфигурированный» ...

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

есть ли способ, чтобы начать транзакцию с использованием другой DataSource? Я проделал кое-какие операции и не смог найти много.

Спасибо!

+0

Я не пробовал это, но если он не поддерживается, это похоже на ошибку/пропущенную потребность в добавлении нескольких источников данных в grails 2. Вам придется использовать обходной путь использования '.withTransaction' для объектов домена только с одним источник данных. – krock

+0

Работает ли это, если вы не используете ярлыки? 'Защита sessionFactory_ALT Защиту DoStuff() { Защиту Те = sessionFactory_ALT.currentSession.beginTransaction() tx.commit() tx.rollback() и т.д. ... } ' – Raphael

ответ

0

@Raphael Ваше предложение действительно работает. Я смог перейти к следующему шагу и работать с Transaction, назначив менеджера транзакций. Кажется, они созданы, просто не привязаны. Они существуют, поскольку весенние бобы назвали нечто вроде transactionManager_ALT (в этом примере). Не уверен, что на самом деле их создает, и почему они не привязаны к GormStaticApi.

то здесь вы могли бы сделать:

Foo["ALT"].transactionManager = transactionManager_ALT 

Вероятно, будет пытаться выбрать один класс домена и назначить все другие менеджеры транзакций, посмотрите, что работает, а затем использовать что один класс домен всюду, чтобы начать операции.

Смежные вопросы