[Seasar-user:11104] Tomcatを停止しても、コネクションが開放されないケースがある?

Taro Unno [E-MAIL ADDRESS DELETED]
2007年 10月 18日 (木) 15:21:03 JST


海野と申します。
いつもお世話になっております。

次の環境で作成して運用しているアプリケーションで問題が起きておりまして、
何かアドバイスいただけたらと思い、メールしました。

Tomcat5.5.23
Oracle10g Release 10.2.0.1.0

Seasar2.4.16
teeda1.0.8
s2-dao1.0.45
DBFlute-0.5.4

まず、アプリケーションにコネクションの開放漏れがあるらしく(調査中です)、
コネクションが取得できない状態になってしまいました。
(これは、こちらの作りの問題です。恥ずかしい。。。)

で、Tomcatを停止/起動したのですが、起動時にコネクションが取得できない状態
が続いていました。(最後にスタックトレースを添付します。)

・Tomcatを停止したらコネクションも開放されるものと思っていたが、
 実はそうではないケースもある。
・Oracleが、Tomcat停止によるコネクション開放を感知できなかった。

なんてことを考えてみましたが、イマイチ頭が整理できないでいます。
トランザクション制御はS2JTAのUserTransactionクラスと
RequiredTxアノテーション、コネクションプールはS2DBCPを使用しています。

現象が起きた際にOracleに詳しい人間がいなかったもので
DBの状態をみて分析することができず、復旧を急いでいた為
結局Oracleを再起動したので原因は想像するしかない状態です。

こんな状況に出くわしたことがある人がいらっしゃいましたら、
また、原因や解決策をご存知の方、見当がつく方、アドバイスいただけませんでしょうか。

SeasarMLの話題としては適切でないかもしれませんが、
宜しくお願いします。

INFO  2007-10-17 18:13:09,866 [main]
initializeDatabaseProductNameOfContext threw the exception: class
org.seasar.framework.exception.SQLRuntimeException
org.seasar.framework.exception.SQLRuntimeException:
[ESSR0072]SQLで例外(SQL=[], Message=[I/O例外です。: Connection reset],
ErrorCode=17002, SQLState=null)が発生しました
	at org.seasar.extension.jdbc.util.DataSourceUtil.getConnection(DataSourceUtil.java:50)
	at jp.co.aaa.bbb.dbflute.allcommon.s2dao.S2DaoMetaDataFactoryImpl.initializeDatabaseProductNameOfContext(S2DaoMetaDataFactoryImpl.java:66)
	at jp.co.aaa.bbb.dbflute.allcommon.s2dao.S2DaoMetaDataFactoryImpl.<init>(S2DaoMetaDataFactoryImpl.java:54)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
	at java.lang.reflect.Constructor.newInstance(Unknown Source)
	at org.seasar.framework.util.ConstructorUtil.newInstance(ConstructorUtil.java:54)
	at org.seasar.framework.container.assembler.AutoConstructorAssembler.doAssemble(AutoConstructorAssembler.java:47)
	at org.seasar.framework.container.assembler.AbstractConstructorAssembler.assemble(AbstractConstructorAssembler.java:55)
	at org.seasar.framework.container.deployer.SingletonComponentDeployer.assemble(SingletonComponentDeployer.java:64)
	at org.seasar.framework.container.deployer.SingletonComponentDeployer.deploy(SingletonComponentDeployer.java:48)
	at org.seasar.framework.container.deployer.SingletonComponentDeployer.init(SingletonComponentDeployer.java:76)
	at org.seasar.framework.container.impl.ComponentDefImpl.init(ComponentDefImpl.java:236)
	at org.seasar.framework.container.impl.S2ContainerImpl.init(S2ContainerImpl.java:563)
	at org.seasar.framework.container.impl.S2ContainerImpl.init(S2ContainerImpl.java:560)
	at org.seasar.framework.container.factory.SingletonS2ContainerFactory.init(SingletonS2ContainerFactory.java:150)
	at org.seasar.framework.container.servlet.SingletonS2ContainerInitializer.initialize(SingletonS2ContainerInitializer.java:55)
	at org.seasar.framework.container.servlet.S2ContainerServlet.initializeContainer(S2ContainerServlet.java:139)
	at org.seasar.framework.container.servlet.S2ContainerServlet.init(S2ContainerServlet.java:127)
	at org.seasar.teeda.core.webapp.TeedaServlet.init(TeedaServlet.java:41)
	at javax.servlet.GenericServlet.init(GenericServlet.java:212)
	at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1139)
	at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:966)
	at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:3956)
	at org.apache.catalina.core.StandardContext.start(StandardContext.java:4230)
	at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:760)
	at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:740)
	at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:544)
	at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:825)
	at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:714)
	at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:490)
	at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1138)
	at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
	at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:120)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1022)
	at org.apache.catalina.core.StandardHost.start(StandardHost.java:736)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)
	at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
	at org.apache.catalina.core.StandardService.start(StandardService.java:448)
	at org.apache.catalina.core.StandardServer.start(StandardServer.java:700)
	at org.apache.catalina.startup.Catalina.start(Catalina.java:552)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:295)
	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:433)
Caused by: java.sql.SQLException: I/O例外です。: Connection reset
	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:255)
	at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:387)
	at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:414)
	at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:165)
	at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:35)
	at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:801)
	at java.sql.DriverManager.getConnection(Unknown Source)
	at java.sql.DriverManager.getConnection(Unknown Source)
	at org.seasar.extension.dbcp.impl.XADataSourceImpl.getXAConnection(XADataSourceImpl.java:156)
	at org.seasar.extension.dbcp.impl.XADataSourceImpl.getXAConnection(XADataSourceImpl.java:146)
	at org.seasar.extension.dbcp.impl.ConnectionPoolImpl.createConnection(ConnectionPoolImpl.java:297)
	at org.seasar.extension.dbcp.impl.ConnectionPoolImpl.checkOut(ConnectionPoolImpl.java:259)
	at org.seasar.extension.dbcp.impl.DataSourceImpl.getConnection(DataSourceImpl.java:63)
	at org.seasar.extension.jdbc.util.DataSourceUtil.getConnection(DataSourceUtil.java:48)
	... 47 more



Seasar-user メーリングリストの案内