[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 メーリングリストの案内