- PR -

AbandonedObjectPool

1
投稿者投稿内容
Oz
会議室デビュー日: 2006/12/14
投稿数: 15
投稿日時: 2006-12-28 10:31
お世話になっております。
Tomcat5.5にてデータソース接続を行っているのですが、
DBのUPDATE時に

AbandonedObjectPool is used (org.apache.tomcat.dbcp.dbcp.AbandonedObjectPool@bad8a8)
LogAbandoned: true
RemoveAbandoned: true
RemoveAbandonedTimeout: 300

このようなエラーが出てしまい、更新できませんでした。
SELECT文などで要素を取り出すことはできているようです。
また、Class.forNameでのDB接続には正しく更新できました。

コンテキストルート/WEB-INF/web.xmlの記述
<resource-ref>
<res-ref-name>jdbc/sample</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Application</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>

コンテキストルート/META-INF/context.xmlの記述
<Context
docBase="Hoge"
reloadable="true"
path="/Hoge">
<Resource
auth="Application"
description="DB Connection"
name="jdbc/sample"
type="javax.sql.DataSource"
driverClassName="COM.ibm.db2.jdbc.app.DB2Driver"
url="jdbc:db2:SAMPLE"
username="usr" password="pass"
maxActive="100" maxIdle="30" maxWait="10000" />
</Context>

また、このエラーにより
connection.setAutoCommit(false); に
java.lang.NullPointerExceptionのエラーが出ました。

破棄されたコネクションを使っている、というふうに読めるのですが、
自分で調べてみても詳細がよく分からず困っています。
どなたかご教授願えませんでしょうか。

[ メッセージ編集済み 編集者: Oz 編集日時 2006-12-28 12:41 ]

[ メッセージ編集済み 編集者: Oz 編集日時 2006-12-28 12:48 ]
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2006-12-28 10:38
結構事例はあるみたいですね。
どこらへんのページをあたった/どういう調査をしたのでしょうか?

APIを見ると、logAbandoned=true とするとコネクション取得時のスタックトレースを記録できるようですね。

[ メッセージ編集済み 編集者: インギ 編集日時 2006-12-28 10:40 ]
Oz
会議室デビュー日: 2006/12/14
投稿数: 15
投稿日時: 2006-12-28 12:48
インギ様 毎回お世話になっております。

自分でもAbandonedObjectPoolで検索をかけてみましたが、
日本語のページが見当たらず、英語には明るくないこともあり
翻訳サイトなどで英語ページを日本語訳させたりしてみました。
また、Class.forNameだと問題なく動く、
SELECT文などが通るということはjavaソース以外の箇所
(Tomcat内のxml文書など)に問題があるのかと思い、
データソースでもUPDATE文/INSERT文の通るコンテキストのxmlと比較してみましたが、
問題箇所を探し出すことができませんでした。

>APIを見ると、logAbandoned=true とするとコネクション取得時のスタックトレースを記録できるようですね。
恐縮ながらそれは初めて知りました。
試してみます。ありがとうございます。
Oz
会議室デビュー日: 2006/12/14
投稿数: 15
投稿日時: 2006-12-28 13:16
連投すいません。

http://takakkalinux.blog20.fc2.com/blog-entry-61.html
こちらの記述によると

コネクションプーリングがちゃんとできているかの確認として
AbandonedObjectPool is used が出ていればOKという記事がありました。
ということは、UPDATE/INSERTできないこととAbandonedObjectPool表記は
関係ないのかもしれません…。

まったく違うところに原因があるのかもしれないので、調べ直したいと思います。
はしもと
大ベテラン
会議室デビュー日: 2003/02/05
投稿数: 182
投稿日時: 2006-12-29 00:46
引用:
Ozさんの書き込み (2006-12-28 10:31) より:
AbandonedObjectPool is used (org.apache.tomcat.dbcp.dbcp.AbandonedObjectPool@bad8a8)
LogAbandoned: true
RemoveAbandoned: true
RemoveAbandonedTimeout: 300



このメッセージは removeAbandoned = true とした時に、
指定通り DB 接続のリーク対策機能を有効にした事を知らせるものです。
詳しくは Tomcat のオフィシャル・ページを見て下さい。
以下のページは 5.0 の日本語訳ですが 5.5 でも通用するでしょう。
http://www.jajakarta.org/tomcat/tomcat5.0/ja/docs/tomcat-docs/jndi-datasource-examples-howto.html
1

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