[Seasar-user:9077] Re: IPアドレスを渡しての動的なDB変更
Koichi Kobayashi
[E-MAIL ADDRESS DELETED]
2007年 7月 10日 (火) 20:00:06 JST
小林 (koichik) です.
Date: Tue, 10 Jul 2007 18:20:12 +0900
From: 大坪 淳一 <[E-MAIL ADDRESS DELETED]>
To: [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:9076] Re: IPアドレスを渡しての動的なDB変更
> ただ、
> > public void hoge() {
> > xaDataSource.setURL("jdbc:mysql://" + addr1 + ":3306/test");
> > dao.select();
> > xaDataSource.setURL("jdbc:mysql://" + addr2 + ":3306/test");
> > dao.select();
> > }
> のようなことがしたいのですが、その場合はどうすれば良いでしょうか。
これらは同一トランザクションでのアクセスに
なるのでしょうか?
それとも独立したトランザクションですか?
同一のトランザクションで,しかも本当に XA で
2 フェーズコミットが必要なら先の XADataSourceImpl は
そもそも使えません.
独立したトランザクションの場合はそれぞれの
トランザクション境界を明確にして,そこに
トランザクションのアスペクトを適用すれば
よいかと.
例えば
public void foo() {
bar(addr1);
bar(addr2);
}
public void bar(String addr) {
xaDataSource.setURL("jdbc:mysql://" + addr + ":3306/test");
dao.select();
}
foo() にはトランザクションを設定せず,bar() の方に
設定すれば,それぞれ指定のアドレスの DB に接続します.
> もう一つ、親のPCのIPアドレスをデフォルトで設定しておきたいのですがなにか
> 良い方法はないでしょうか。
親と子を区別してアクセスするならデータソースの
設定も個別にした方がいいように思いますが.
もし一つのデータソースで親も子もアクセスするなら,
XADataSourceImpl に defaultURL のような
プロパティを追加してそこに親 PC の URL を
設定し,getURL() メソッドはurl という
スレッドローカルの値が null だったら
defaultURL の値を返すようにすればいいかと.
その場合,子の方にアクセスした後は必ず
xaDataSource.setURL(null);
のようにしないといけなくなり,何かと
問題を抱えやすい気のせいがするので,
親と子は別のデータソースにするか,親であれ
子であれ常に URL を明示的に設定する方が
無難だと思います.
--
<signature>
<name>Koichi Kobayashi</name>
<e-mail>[E-MAIL ADDRESS DELETED]</e-mail>
</signature>
Seasar-user メーリングリストの案内