- - PR -
SybaseとDBCP
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-11-19 11:19
TomcatでDBCPの設定(データソースの作成)をして
Sybaseへ接続しようとしているのですが、以下のException が発生してコネクションの取得が出来ていないようです。 どなたかSybaseを使ってDBCPでシステムを構築された方が いらっしゃいましたらアドバイスをお願い致します。 以下に情報を明記させていただきます。 ○Appサーバー JDK:1.4.1 TOMCAT:5.0 DBCP:1.1 JConnect:5.5 OS:Win2000 pro ○DBサーバー Sybase ASE11.5 OS:Win2000 srv ○Tomcatデータソース作成内容 JNDI名: jdbc/sybds データソースURL: jdbc:sybase:Tds:ホスト名:5000/DB名 JDBCドライバクラス:com.sybase.jdbc2.jdbc.SybDriver ユーザ名:xxxx パスワード:xxxx 有効な最大接続数:10 アイドル状態の最大接続数:5 最大接続待ち時間:5000 クエリの検証:select count(*) from XXXX ○ソース Context context = new InitialContext(); DataSource ds = (DataSource) context.lookup(dsname); con = ds.getConnection(); ←ここでException発生 ○エラー内容 org.apache.commons.dbcp.SQLNestedException: Cannot get a connection, pool exhausted, cause: java.util.NoSuchElementException: Could not create a validated object at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericOb jectPool.java:851) at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSo urce.java:140) at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource .java:518) at ds.DS.execute(DS.java:77) at ds.DS.doGet(DS.java:47) at javax.servlet.http.HttpServlet.service(HttpServlet.java:743) at javax.servlet.http.HttpServlet.service(HttpServlet.java:856) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl icationFilterChain.java:284) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF ilterChain.java:204) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperV alve.java:256) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValv eContext.java:151) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav a:564) at org.apache.catalina.core.StandardContextValve.invokeInternal(Standard ContextValve.java:245) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextV alve.java:199) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValv eContext.java:151) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav a:564) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.j ava:195) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValv eContext.java:151) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.j ava:164) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValv eContext.java:149) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav a:564) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineVal ve.java:156) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValv eContext.java:151) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav a:564) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:972) at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:21 1) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java :805) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.proce ssConnection(Http11Protocol.java:696) at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java :605) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadP ool.java:677) at java.lang.Thread.run(Thread.java:536) | ||||
|
投稿日時: 2004-11-19 11:26
Sybaseに依存した現象でしょうか?
環境があれば他のデータベースで設定してみて切り分けてみてはいかがでしょう。 | ||||
|
投稿日時: 2004-11-19 11:47
早速の回答ありがとうございます。
実際にPostgreSQL、DB2での接続確認 はしておりかなりの部分でSybaseに依存 していると考えております。 | ||||
|
投稿日時: 2004-11-22 10:50
私が見た事のあるメッセージとちょっと違うのですが、 borrowObject() 時に pool exhausted というのは アクティブな接続が最大接続数に達していて、これ以上 接続を作成できないという事ではないでしょうか。 最大接続数以上の DB 接続をしなければならない程の リクエストをしているなら、DBCP として正常な動作です。 そんなに DB 接続が多い筈は無いという事なら、 多分 Connection#close() し忘れです。 全てを新規に起動して、まったく同じ処理をさせると PostgreSQL でも DB2 でも再現しませんか ? | ||||
|
投稿日時: 2004-11-22 16:21
はしもと様、回答ありがとうございます。
私も「pool exhausted 」という内容からコネクションの接続最大数 などを疑いSybaseを再起動したのですが、再起動後も同様の現象になって います。 恐らく設定関連だと思っているのですが・・・ | ||||
|
投稿日時: 2004-11-22 18:52
DBMS を再起動しても、アクティブな接続は管理下から外れないです。 切断された Connection を抱えた DelegatingConnection が、 正常なフリしてプールに戻されるのを待つだけです。 以下のパラメータを追加してみて下さい。 removeAbandoned = true removeAbandonedTimeout = 300 logAbandoned = true DataSource#getConnection() してから 5 分経っても Connection#close() されなかったら強制的に close() してログが出力されます。もしログが出力されたら close() し忘れているという事です。 |
1