2012-06-20 13 views
5

grailsで代替データソースを使ってトランザクションを開く方法を理解しようとしています。私は、定義された以下のデータソースを持っている...grails 'withTransaction' with alternate dataSource

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

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

私は、デフォルトのデータソースでこれを行うことができるよ...

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

しかし、私はALTデータソースでそれを試してみて、行うとき、I例外が発生しました - 'No transactionManager bean設定済み' ...

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

別のデータソースを使用してトランザクションを開始する方法はありますか?私はいくつかの掘り出し物をして、多くを見つけることができていない。

ありがとうございます!

+0

私はこれを試していませんが、サポートされていないと、grails 2で複数のデータソースを追加する際のバグや欠落した要件のようです。ドメインオブジェクトに対して '.withTransaction'を使用する回避策を使用する必要があります情報元。 – krock

+0

ショートカットを使用しない場合は機能しますか? 'DEF sessionFactory_ALT DEF doStuff(){ DEF TX = sessionFactory_ALT.currentSession.beginTransaction() tx.commit() tx.rollback() 等...} ' – Raphael

答えて

0

@Raphaelあなたの提案はうまくいきます。私は次のステップに進み、Transaction Managerを割り当てることによってトランザクションの動作を取得することができました。彼らは作成されたように見えますが、添付されていません。これらは、transactionManager_ALT(この例では)のような名前のSpring Beanとして存在します。実際に何が作成されているのか、GormStaticApiに接続されていない理由は不明です。

すなわち、ここであなたがしたい:

Foo["ALT"].transactionManager = transactionManager_ALT 

をおそらく取引を開始するために、どこでも、1つのドメインクラスを使用し、その後、1つのドメインクラスを選択し、すべての異なるトランザクションマネージャを割り当て、それが動作するかどうかを確認しようとします。