- - PR -
tomcat で 複数のバージョンのjdbcドライバを共存させたい
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2008-08-11 16:38
お世話になります
現在tomcat5.5でサーバーを構築しております 複数のアプリケーションを稼働させようとしているのですが 一つのアプリケーションはOracle8.1.7へ接続し 一方のアプリケーションはOracle10gに接続するようになっています 両者ともにコネクションプーリングを利用するため tomcat5.5ではdbcpが配備されるcommon/lib内に jdbcドライバを置く必要があるかと思います しかし、Ora8.1.7を利用するアプリケーションが 先にcommon/libにojdbcの9.0.2.0.0のバージョンを配備しており 今回別のアプリケーションから上記バージョンのjdbcを使用して 接続したところ「dataformatexception」の例外が発生してしまいました 後のアプリケーションではjdbcの10.2のバージョンのjdbcを利用するように したいのですが、このような状況で異なるバージョンのjdbcドライバを 共存させるような方法はありませんでしょうか? よろしくお願いいたします |
|
投稿日時: 2008-08-11 21:28
Tomcatの仕組みというより、Javaのクラスローダの仕組みとして、
同一クラス名を持つjarを複数扱うのは非常に面倒な仕組みが必要になります。 コネクションプーリング自体はJNDI経由じゃなくても使えますので、 自前で用意する必要が有りますが、Tomcatが内部で利用している、 Commons DBCPを使うとよいでしょう。 そのとき、JDBCドライバは各アプリのlibに配置してください。 |
|
投稿日時: 2008-08-11 22:29
THINドライバの場合は問題にはなりませんが、
OCIドライバを使っている場合は、複数のバージョンを 同一VM上に共存させることは不可能なので注意しましょう。 参考までに。 |
|
投稿日時: 2008-08-12 08:48
かつのりさん、あしゅさん ご回答ありがとうございます
>コネクションプーリング自体はJNDI経由じゃなくても使えますので、 >自前で用意する必要が有りますが、Tomcatが内部で利用している、 >Commons DBCPを使うとよいでしょう。 >そのとき、JDBCドライバは各アプリのlibに配置してください。 これはtomcatのnaming-factory-dbcp.jarをJNDIでtomcatコンテナから ロードせずに各アプリのローダを使用して利用する場合であれば アプリのWEB-INF/libにjdbcとCommons DBCPを配置できるという事でしょうか? 具体的にどのような設定を行えば上記の設定が可能になるのか 何か参考になる資料等はありませんでしょうか? よろしくお願いいたします [ メッセージ編集済み 編集者: mitti 編集日時 2008-08-12 09:51 ] |
|
投稿日時: 2008-08-12 10:12
WEB-INF/lib以下にJDBCドライバとCommons DBCPを配置、
ServletContextLinster等、コンテキスト初期化、破棄のタイミングで BasicDataSourceのインスタンスを生成、コネクションの解放を行う感じです。 ServletContextにデータソースを保持しておけばよいでしょう。 具体的なサンプルコード等はBasicDataSourceでググれば、 それなりに出てくるので読んでみてください。 |
|
投稿日時: 2008-08-12 10:47
>WEB-INF/lib以下にJDBCドライバとCommons DBCPを配置、
>ServletContextLinster等、コンテキスト初期化、破棄のタイミングで >BasicDataSourceのインスタンスを生成、コネクションの解放を行う感じです。 >ServletContextにデータソースを保持しておけばよいでしょう。 >具体的なサンプルコード等はBasicDataSourceでググれば、 >それなりに出てくるので読んでみてください。 ありがとうございます さっそく調べてみます |
1