- - PR -
複数のサーバーに接続する時のJDBCの選び方
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-08-08 17:43
サーバーAで PostgreSQL7.3
サーバーBで PostgreSQL8.0 サーバーAで運用しているアプリケーションサーバー上で 動いているWEBアプリケーションからサーバーA、サーバーB それぞれで動いているDBに接続しようと思っているのですが この場合クラスパスを通すJDBCは7.3用を使ったほうがよいのでしょうか? それとも8.0のほうがよいのでしょうか? 接続ごとにJDBCを変更するようなことは可能なのか? こういった場合の対処法がありましたら教えてください。 | ||||
|
投稿日時: 2006-08-08 18:01
どちらか片方だけ使う場合は、新しい方を使ったほうが
いいと思います。 それと、接続ごとにJDBCを変えることはできますよ。 直接JDBCを使ってもできますし、JNDIであらかじめ複数 接続先を定義するような使い方もできます。ただ、 サーバA、Bを跨ぐ形でトランザクション処理を行う 場合は、JTAなどのトランザクションマネージャーを 使う必要が出てきます。 | ||||
|
投稿日時: 2006-08-08 18:23
>小僧さん
解答アリガトウございます。 >どちらか片方だけ使う場合は、新しい方を使ったほうがいいと思います。 ありゃ…自己解決しかけてたのですが 逆の答えが返ってきてしまいました。 http://www.sraoss.co.jp/PostgreSQL/7.4/changes.html PostgreSQL(以下略)7.3⇒7.4の時にプロトコルが3.0になった 下位互換があり新しい機能は使えないが古いクライアントから の接続は問題ないとあったので(8.0もプロトコルは3.0) クライアントにあたるJDBCは古いほうがよいという考えはまずいでしょうか? >それと、接続ごとにJDBCを変えることはできますよ。 できるならこれが一番ですね。 自分は普段Tomcatだとserver.xmlに以下の感じで JDBCを指定しているのですが <parameter> <name>driverClassName</name> <value>org.postgresql.Driver</value> </parameter> これではバージョンごとに切り替えることはできそうにありません。 どのようにすればよいのでしょうか? 恥ずかしながら自分では検索し切れなかったので 参考になるページ等ありましたら教えてください。 [ メッセージ編集済み 編集者: kouichi 編集日時 2006-08-08 18:24 ] | ||||
|
投稿日時: 2006-08-08 21:11
7.4じゃなくて7.3でした、これは失礼いたしました。
自己解決された内容の方がよろしいと思います。
恥ずかしいのは私の方で、クラス名が一緒だからバージョン 違いは同時に使えないですよね、失礼いたしました。 7.3用のドライバで8.0にも接続するのがよろしいかと 思います。 | ||||
|
投稿日時: 2006-08-08 22:50
バージョンの違う同じクラスのドライバを混在させるためには、
別々のクラスローダで読み込む必要があります。 URLClassLoaderを使うのが一番楽かと思いますが、 URLClassLoaderは先に親クラスローダに移譲しますので、 クラスパス上にドライバのjarがあってはいけません。 ちなみに、DriverManagerの作りの問題上、 DriverManager経由では直接Connectionの取得はできません。 Driverのインスタンスを生成(不可視ならリフレクション操作が必要)して、 そのインスタンスからConnectionを生成する必要があります。 JNDI経由で利用したい場合は、独自のObjectFactoryを作成する必要があります。 org.apache.commons.dbcp.BasicDataSourceFactoryや、 org.apache.commons.dbcp.BasicDataSourceを拡張すればよいと思います。 ドライバの取得部分を上記処理で行うようにして、 いつもどおりのリソースのパラメータの指定のファクトリの指定の部分に、 上記実装クラスを指定すればOKです。 #どのみち面倒ですね・・・ | ||||
|
投稿日時: 2006-08-09 12:37
>かつのり さん
解答アリガトウございます。 …勉強だけはしたけどいじった経験は無いレベルの話がイッパイです(^^; JNDIのほうは難しそうですが、今回やりたいのはDBCPでなくてもOKなので URLClassLoaderだけで何とかなりそうです。 …何とか頑張ってみます。 |
1