- PR -

TomcatからDB2への接続

1
投稿者投稿内容
オオサカ
常連さん
会議室デビュー日: 2003/07/02
投稿数: 49
投稿日時: 2003-11-12 09:57
お世話になっております。
Linux8上にApache2.0.48 Tomcat4.1.24 DB2v8.1が動作している環境で
毎晩DB2をバックアップするためインスタンスを再起動しています。
すると再起動後からTomcat上のサーブレットからDB2に接続できなくなります。
エラーは
A communication error has been detected. Communication protocol being used
です。
Tomcatを再起動すれば、エラーは発生しなくなりますが
この動作は正常なものなのでしょうか?
また回避する方法はありますでしょうか?
よろしくお願いいたします。
raystar
ぬし
会議室デビュー日: 2003/01/16
投稿数: 251
お住まい・勤務地: Tokyo/Japan
投稿日時: 2003-11-12 10:45
おはようございます。
TomcatとDB2のコネクションはどういったものでしょうか。

もし、コネクションプーリングを使用している場合に
DBを再起動すると、プールを破棄しないと
Tomcat側ではDBセッションのアドレスが残っているので
変な動きになったような覚えがあります。

TomcatではDBが勝手に再起動をしたなどというイベントを
直接うけとることはできません。(プログラムでもかませば別ですが)
そのときに、Tomcatの保持しているDBセッションのオブジェクト(DB側には既にない)を
そのまま使うと落ちます。当然ですが。
オオサカ
常連さん
会議室デビュー日: 2003/07/02
投稿数: 49
投稿日時: 2003-11-12 14:30
早速のご回答ありがとうございます。
まさにコネクションプーリングを使用しています。
正しい挙動ということですね。

プールを破棄というのはtomcatの設定で簡単にできるもの
なのでしょうか?
コーディング等必要であれば、DB2再起動後、Tomcatのサービスを
再起動させることを考えています。

よろしくお願いいたします。
raystar
ぬし
会議室デビュー日: 2003/01/16
投稿数: 251
お住まい・勤務地: Tokyo/Japan
投稿日時: 2003-11-12 15:20
JDBCなのか、EJBなのかわかりませんが、
コーディングで解決するような感じです。

私の場合は、独自のPOOLを使っていて、
接続時に失敗したら、再接続(新しいDBセッションをつくる)
という形を取っています。

接続を一つのクラスにまとめていないような場合は
非常に苦しいことになるかと思います。

また、TOMCATでCONTEXTのリロード時に
ContextListenerを用意し、明示的にコネクションを全てクローズしています。
オオサカ
常連さん
会議室デビュー日: 2003/07/02
投稿数: 49
投稿日時: 2003-11-13 09:26
ご回答ありがとうございます。

>>また、TOMCATでCONTEXTのリロード時に
>>ContextListenerを用意し、明示的にコネクションを全てクローズしています
このようにすれば、コネクションプーリングが再作成されるというこ
とでしょうか?
またあつかましいかもしれませんが
具体的にどのようにすればよいかご教授願えないでしょうか。
よろしくお願いいたします。
raystar
ぬし
会議室デビュー日: 2003/01/16
投稿数: 251
お住まい・勤務地: Tokyo/Japan
投稿日時: 2003-11-13 17:17
私のほうではConnectionCacheImplオブジェクトを破棄しています。
オオタさんがそれをつかっているかどうかしりませんが、
当方はOracleのAPIを使っております。

引用:

オオタさんの書き込み (2003-11-13 09:26) より:
ご回答ありがとうございます。

>>また、TOMCATでCONTEXTのリロード時に
>>ContextListenerを用意し、明示的にコネクションを全てクローズしています
このようにすれば、コネクションプーリングが再作成されるというこ
とでしょうか?
またあつかましいかもしれませんが
具体的にどのようにすればよいかご教授願えないでしょうか。
よろしくお願いいたします。

オオサカ
常連さん
会議室デビュー日: 2003/07/02
投稿数: 49
投稿日時: 2003-11-18 16:42
ご回答ありがとうございました。
当方はDB2を使用しております。

今回は時間をかけられないので、tomacatのサービス再起動
で対応したいと思います。

貴重な情報いただきありがとうございました。

今度使用してみたいと思います。
Apricot
会議室デビュー日: 2004/06/04
投稿数: 1
投稿日時: 2004-06-04 13:50
こんにちは。

私は、コネクションプールに Jakarta Commons の DBCP を使っています。
(データベースはOracleですが)

getConnection() する際に、自動でコネクションが生きているかチェックして
死んでいたら取り直してくれる機能(Validation Query)
があるのでとても重宝しています。

http://jakarta.apache.org/commons/dbcp/
1

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