[Seasar-user:20687] TransactionManager使用時に[ESSR0062]コネクションは既に閉じています
高橋 武蔵
[E-MAIL ADDRESS DELETED]
2011年 3月 28日 (月) 04:34:43 JST
いつもお世話になっています。
高橋と申します。
S2JDBCにてS2コンテナから呼び出したサービス内のメソッドで、
トランザクションマネジャでコミットした後のjdbcmanagerで、
高頻度でエラーが発生します。
TransactionManager transactionManager =
(TransactionManagerImpl)SingletonS2Container.getComponent("transactionManager");
if (transactionManager.getStatus()==Status.STATUS_NO_TRANSACTION)
transactionManager.begin();
jdbcManager.update(entity).execute();
transactionManager.commit();
transactionManager.begin();
jdbcManager.from(Entity.class).where("Id = ?",id).getSingleResult();
transactionManager.commit();
上記でgetSingleResultする所で発生します。
(updateでは発生しません。)
deleteBach等のバッチ処理や、
マルチスレッド下でのトランザクションマネジャの使用後等
(コネクションを多く使用する??)に起こる事が多いようです。
下記はエラーログ抜粋です。
org.seasar.framework.exception.SQLRuntimeException: [ESSR0072]SQLで例外
(SQL=[null], Message=[[ESSR0062]コネクションは既に閉じています],
ErrorCode=0, SQLState=null)が発生しました
at org.seasar.extension.jdbc.util.ConnectionUtil.prepareStatement(ConnectionUtil.java:95)
at org.seasar.extension.jdbc.manager.JdbcContextImpl.usingPreparedStatement(JdbcContextImpl.java:141)
at org.seasar.extension.jdbc.query.AbstractSelect.processPreparedStatement(AbstractSelect.java:294)
at org.seasar.extension.jdbc.query.AbstractSelect.processResultSet(AbstractSelect.java:423)
at org.seasar.extension.jdbc.query.AbstractSelect.getSingleResultInternal(AbstractSelect.java:248)
at org.seasar.extension.jdbc.query.AbstractSelect.getSingleResult(AbstractSelect.java:182)
・・・・・(略)
Caused by: org.seasar.framework.exception.SSQLException: [ESSR0062]コネクションは既に閉じています
at org.seasar.extension.dbcp.impl.ConnectionWrapperImpl.assertOpened(ConnectionWrapperImpl.java:151)
at org.seasar.extension.dbcp.impl.ConnectionWrapperImpl.prepareStatement(ConnectionWrapperImpl.java:189)
at org.seasar.extension.jdbc.util.ConnectionUtil.prepareStatement(ConnectionUtil.java:93)
... 76 more
環境は
JDK 1.6
Tomcat 6.0.30
S2-Frameowrk 2.4.43
S2-Extension 2.4.43
S2-Tiger 2.4.43
です。
下記は使用しているjdbc.dicon です。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR2.1//DTD S2Container//EN"
"http://www.seasar.org/dtd/components21.dtd">
<components namespace="jdbc">
<include path="jta.dicon"/>
<component class="org.seasar.extension.jdbc.impl.BasicResultSetFactory"/>
<component class="org.seasar.extension.jdbc.impl.ConfigurableStatementFactory">
<arg>
<component class="org.seasar.extension.jdbc.impl.BasicStatementFactory"/>
</arg>
<property name="fetchSize">100</property>
</component>
<component name="xaDataSource"
class="org.seasar.extension.dbcp.impl.XADataSourceImpl">
<property name="driverClassName">
"com.ibm.db2.jcc.DB2Driver"
</property>
<property name="URL">
"jdbc:db2://xxxx/"
</property>
<property name="user">""</property>
<property name="password">""</property>
</component>
<component name="connectionPool"
class="org.seasar.extension.dbcp.impl.ConnectionPoolImpl">
<property name="timeout">600</property>
<property name="maxPoolSize">50</property>
<property name="allowLocalTx">true</property>
<destroyMethod name="close"/>
</component>
<component name="DataSource"
class="org.seasar.extension.dbcp.impl.DataSourceImpl"
/>
<component name="transactionManager"
class="org.seasar.extension.jta.TransactionManagerImpl"/>
</components>
お手数をお掛けしますが、エラーの原因についてご教授頂ければと思います。
よろしくお願い致します。
-----
高橋 武蔵 (タカハシ ムサシ)
e-mail:[E-MAIL ADDRESS DELETED]
Seasar-user メーリングリストの案内