- - PR -
TomcatからDB2への接続
1
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 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を再起動すれば、エラーは発生しなくなりますが この動作は正常なものなのでしょうか? また回避する方法はありますでしょうか? よろしくお願いいたします。 | ||||
|
投稿日時: 2003-11-12 10:45
おはようございます。
TomcatとDB2のコネクションはどういったものでしょうか。 もし、コネクションプーリングを使用している場合に DBを再起動すると、プールを破棄しないと Tomcat側ではDBセッションのアドレスが残っているので 変な動きになったような覚えがあります。 TomcatではDBが勝手に再起動をしたなどというイベントを 直接うけとることはできません。(プログラムでもかませば別ですが) そのときに、Tomcatの保持しているDBセッションのオブジェクト(DB側には既にない)を そのまま使うと落ちます。当然ですが。 | ||||
|
投稿日時: 2003-11-12 14:30
早速のご回答ありがとうございます。
まさにコネクションプーリングを使用しています。 正しい挙動ということですね。 プールを破棄というのはtomcatの設定で簡単にできるもの なのでしょうか? コーディング等必要であれば、DB2再起動後、Tomcatのサービスを 再起動させることを考えています。 よろしくお願いいたします。 | ||||
|
投稿日時: 2003-11-12 15:20
JDBCなのか、EJBなのかわかりませんが、
コーディングで解決するような感じです。 私の場合は、独自のPOOLを使っていて、 接続時に失敗したら、再接続(新しいDBセッションをつくる) という形を取っています。 接続を一つのクラスにまとめていないような場合は 非常に苦しいことになるかと思います。 また、TOMCATでCONTEXTのリロード時に ContextListenerを用意し、明示的にコネクションを全てクローズしています。 | ||||
|
投稿日時: 2003-11-13 09:26
ご回答ありがとうございます。
>>また、TOMCATでCONTEXTのリロード時に >>ContextListenerを用意し、明示的にコネクションを全てクローズしています このようにすれば、コネクションプーリングが再作成されるというこ とでしょうか? またあつかましいかもしれませんが 具体的にどのようにすればよいかご教授願えないでしょうか。 よろしくお願いいたします。 | ||||
|
投稿日時: 2003-11-13 17:17
私のほうではConnectionCacheImplオブジェクトを破棄しています。
オオタさんがそれをつかっているかどうかしりませんが、 当方はOracleのAPIを使っております。
| ||||
|
投稿日時: 2003-11-18 16:42
ご回答ありがとうございました。
当方はDB2を使用しております。 今回は時間をかけられないので、tomacatのサービス再起動 で対応したいと思います。 貴重な情報いただきありがとうございました。 今度使用してみたいと思います。 | ||||
|
投稿日時: 2004-06-04 13:50
こんにちは。
私は、コネクションプールに Jakarta Commons の DBCP を使っています。 (データベースはOracleですが) getConnection() する際に、自動でコネクションが生きているかチェックして 死んでいたら取り直してくれる機能(Validation Query) があるのでとても重宝しています。 http://jakarta.apache.org/commons/dbcp/ | ||||
1
