- PR -

グローバルトランザクション?

1
投稿者投稿内容
hekigyoku
会議室デビュー日: 2008/12/16
投稿数: 17
投稿日時: 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();

とできるものでしょうか?
だっちょ
大ベテラン
会議室デビュー日: 2006/12/05
投稿数: 115
投稿日時: 2008-12-18 13:31
 私の知っている範囲ではできないと思っています。
 こういった複数のDBをまとめるのはEntityManagerではなく、サーバのJDBCリソースのほうだと思います。分散トランザクションは使ったことがないので、よく知りませんが、javax.sql.XADataSourceをJDBCのリソースタイプにすればできるのでは、と思います。
hekigyoku
会議室デビュー日: 2008/12/16
投稿数: 17
投稿日時: 2008-12-18 21:28
やっぱりできませんかね・・・
私もいろいろWEBを見て、できない気がしてきました。

できたら本当の意味でグローバルなトランザクションができるのに・・・
あしゅ
ぬし
会議室デビュー日: 2005/08/05
投稿数: 613
投稿日時: 2008-12-19 09:51
引用:

hekigyokuさんの書き込み (2008-12-18 21:28) より:
できたら本当の意味でグローバルなトランザクションができるのに・・・


条件反射で突っ込ませていただきます。

グローバルトランザクションの価値とは、
1ノードのAPサーバだけでトランザクションを実行するのではなく、
複数ノードにまたがった処理をひとつのトランザクションとして
実行する分散トランザクションの実現にあると思います。

EntityManagerで複数のデータソースにまたがるエンティティを
まとめて扱いたいということとは別の問題ではないでしょうか。

こちらの場合はどちらかというと、複数のデータソースに
分散したテーブルをまとめて照会を行うSQLが書けますか?
ということに近いです。

どうしてもやりたいのであれば、DBMS側でデータベースリンクを
行うなどして、DBMS側で分散トランザクションするようにすれば
現状のJPA仕様の範囲でも実現は可能です。
hekigyoku
会議室デビュー日: 2008/12/16
投稿数: 17
投稿日時: 2008-12-19 10:12
>グローバルトランザクションの価値とは、
>1ノードのAPサーバだけでトランザクションを実行するのではなく、
>複数ノードにまたがった処理をひとつのトランザクションとして
>実行する分散トランザクションの実現にあると思います。

「基本的な」グローバルトランザクションの概念は理解しています。

>EntityManagerで複数のデータソースにまたがるエンティティを
>まとめて扱いたいということとは別の問題ではないでしょうか。

それもまたトランザクションだと思ったので、
「本当の分散トランザクション」という表現を使いました。

>こちらの場合はどちらかというと、複数のデータソースに
>分散したテーブルをまとめて照会を行うSQLが書けますか?
>ということに近いです。

実際にどういうSQLが発行されるかはORMの実装の問題ですよね。


>どうしてもやりたいのであれば、DBMS側でデータベースリンクを
>行うなどして、DBMS側で分散トランザクションするようにすれば
>現状のJPA仕様の範囲でも実現は可能です。

MySQL----Oracle10g

なのです。無理ですよね・・・

Oracle---Oracleならできるという事ですね。
RACとか

1

スキルアップ/キャリアアップ(JOB@IT)