- - PR -
グローバルトランザクション?
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2008-12-18 10:10
非常に基本的な質問かもしれませんが・・・
Project--->Person の2つのEntityがあり、ProjectはDB1(PU1)、PersonはDB2(PU2)に格納されています。 そもそもこのような構成は可能なのでしょうか? EntityManagerは一つのPUに関連付けられており、つまり、この場合 PU2つ、EntityManager2つ存在するはずです。 しかし、em.persist(project) と実行すると、projectに関連付けられている personもpersistしなければならない可能性があるわけです。 いわゆるグローバルトランザクションは、 UserTransaction tx; tx.begin(); em1.persist(project); em2.persist(person); tx.commit(); このようにならなければならない気もします。 上記のような構成で、 UserTransaction tx; tx.begin(); em1.persist(project); tx.commit(); とできるものでしょうか? | ||||
|
投稿日時: 2008-12-18 13:31
私の知っている範囲ではできないと思っています。
こういった複数のDBをまとめるのはEntityManagerではなく、サーバのJDBCリソースのほうだと思います。分散トランザクションは使ったことがないので、よく知りませんが、javax.sql.XADataSourceをJDBCのリソースタイプにすればできるのでは、と思います。 | ||||
|
投稿日時: 2008-12-18 21:28
やっぱりできませんかね・・・
私もいろいろWEBを見て、できない気がしてきました。 できたら本当の意味でグローバルなトランザクションができるのに・・・ | ||||
|
投稿日時: 2008-12-19 09:51
条件反射で突っ込ませていただきます。 グローバルトランザクションの価値とは、 1ノードのAPサーバだけでトランザクションを実行するのではなく、 複数ノードにまたがった処理をひとつのトランザクションとして 実行する分散トランザクションの実現にあると思います。 EntityManagerで複数のデータソースにまたがるエンティティを まとめて扱いたいということとは別の問題ではないでしょうか。 こちらの場合はどちらかというと、複数のデータソースに 分散したテーブルをまとめて照会を行うSQLが書けますか? ということに近いです。 どうしてもやりたいのであれば、DBMS側でデータベースリンクを 行うなどして、DBMS側で分散トランザクションするようにすれば 現状のJPA仕様の範囲でも実現は可能です。 | ||||
|
投稿日時: 2008-12-19 10:12
>グローバルトランザクションの価値とは、
>1ノードのAPサーバだけでトランザクションを実行するのではなく、 >複数ノードにまたがった処理をひとつのトランザクションとして >実行する分散トランザクションの実現にあると思います。 「基本的な」グローバルトランザクションの概念は理解しています。 >EntityManagerで複数のデータソースにまたがるエンティティを >まとめて扱いたいということとは別の問題ではないでしょうか。 それもまたトランザクションだと思ったので、 「本当の分散トランザクション」という表現を使いました。 >こちらの場合はどちらかというと、複数のデータソースに >分散したテーブルをまとめて照会を行うSQLが書けますか? >ということに近いです。 実際にどういうSQLが発行されるかはORMの実装の問題ですよね。 >どうしてもやりたいのであれば、DBMS側でデータベースリンクを >行うなどして、DBMS側で分散トランザクションするようにすれば >現状のJPA仕様の範囲でも実現は可能です。 MySQL----Oracle10g なのです。無理ですよね・・・ Oracle---Oracleならできるという事ですね。 RACとか |
1