You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user-java@ibatis.apache.org by Brian Parkinson <pa...@avaning.com> on 2008/08/18 22:16:12 UTC

Okay, for the last time: Connection.close() has already been closed.

Hi all:

My apologies for the spam and possible thread-jacking - not my
intention. This is a proper fresh email, which I should have sent out
first time.

Hopefully third time lucky - sorry all for the multiple emails.

I'm using iBatis 2.3.3.720 and Spring and dbcp 1.2.2.  All seems to be
well, but sometimes I see an exception related to "Connection.close()
has already been called".

When this happens, the server is pretty much borked - any new database
access results in the exception.

I never call close() in my code - unsure what's going on here. A quick
inspection of my logs didn't reveal anything...

Does anyone have any clues?

Any help is appreciated.

	<bean id="mapConfig"
class="org.springframework.core.io.ClassPathResource">
		<constructor-arg>
	
<value>com/ecobee/foundation/dao/ibatis/SqlMapConfig.xml</value>
		</constructor-arg>
	</bean>
	<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
		<property name="driverClassName"
value="com.mysql.jdbc.Driver" />
		<property name="url" value="jdbc:mysql:///ecobee" />
		<property name="username" value="ecobee" />
		<property name="password" value="ecobee" />	
		<property name="initialSize" value="10" />
		<property name="maxActive" value="64" />	
		<property name="maxIdle" value="16" />
		<property name="maxWait" value="1000" />
	</bean>
	<bean id="sqlMapClient"
class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<property name="configLocation" ref="mapConfig" />
	</bean>

	<bean id="txManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
>
		<property name="dataSource" ref="dataSource"/>
	</bean>
	<tx:advice id="txAdvice" transaction-manager="txManager">
		<tx:attributes>
			<tx:method name="get*" read-only="true" />
			<tx:method name="*" />
		</tx:attributes>
	</tx:advice>
	<aop:config>
		<aop:pointcut id="daoServiceOperation"
expression="execution(* com.ecobee.foundation.dao.ibatis.*.*(..))" />
		<aop:advisor advice-ref="txAdvice"
pointcut-ref="daoServiceOperation" />
	</aop:config>

Thanks.

Brian Parkinson

----------- x8 snip

ERROR 15:45:16:428 Error selecting user from dataabase.
{foundation.schedule.DbConnectionPing.executeTask}

Message: Could not open JDBC Connection for transaction; nested
exception is
com.mysql.jdbc.exceptions.MySQLNonTransientConnectionException:
Connection.close() has already been called. Invalid operation in this
state.

Trace org.springframework.transaction.CannotCreateTransactionException:
org.springframework.jdbc.datasource.DataSourceTransactionManager.doBegin
(DataSourceTransactionManager.java:238)
org.springframework.transaction.support.AbstractPlatformTransactionManag
er.getTransaction(AbstractPlatformTransactionManager.java:377)
org.springframework.transaction.interceptor.TransactionAspectSupport.cre
ateTransactionIfNecessary(TransactionAspectSupport.java:261)
org.springframework.transaction.interceptor.TransactionInterceptor.invok
e(TransactionInterceptor.java:101)
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(Ref
lectiveMethodInvocation.java:171)
org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(E
xposeInvocationInterceptor.java:89)
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(Ref
lectiveMethodInvocation.java:171)
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAo
pProxy.java:204)
$Proxy5.getUser(Unknown Source)

>>>
com.ecobee.foundation.schedule.DbConnectionPing.executeTask(DbConnection
Ping.java:27)

com.ecobee.foundation.schedule.ScheduledService.executeSchedule(Schedule
dService.java:38)
sun.reflect.GeneratedMethodAccessor287.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessor
Impl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
org.springframework.util.MethodInvoker.invoke(MethodInvoker.java:275)
org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean
$MethodInvokingJob.executeInternal(MethodInvokingJobDetailFactoryBean.ja
va:272)
org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBea
n.java:86)
org.quartz.core.JobRunShell.run(JobRunShell.java:202)
org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java
:529)
Message: Connection.close() has already been called. Invalid operation
in this state.
Nested exception trace
com.mysql.jdbc.exceptions.MySQLNonTransientConnectionException:
com.mysql.jdbc.SQLError.createSQLException(SQLError.java:888)
com.mysql.jdbc.Connection.getMutex(Connection.java:3728)
com.mysql.jdbc.Connection.setAutoCommit(Connection.java:5365)
org.apache.commons.dbcp.DelegatingConnection.setAutoCommit(DelegatingCon
nection.java:331)
org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.set
AutoCommit(PoolingDataSource.java:317)
org.springframework.jdbc.datasource.DataSourceTransactionManager.doBegin
(DataSourceTransactionManager.java:221)
org.springframework.transaction.support.AbstractPlatformTransactionManag
er.getTransaction(AbstractPlatformTransactionManager.java:377)
org.springframework.transaction.interceptor.TransactionAspectSupport.cre
ateTransactionIfNecessary(TransactionAspectSupport.java:261)
org.springframework.transaction.interceptor.TransactionInterceptor.invok
e(TransactionInterceptor.java:101)
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(Ref
lectiveMethodInvocation.java:171)
org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(E
xposeInvocationInterceptor.java:89)
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(Ref
lectiveMethodInvocation.java:171)
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAo
pProxy.java:204)
$Proxy5.getUser(Unknown Source)

>>>
com.ecobee.foundation.schedule.DbConnectionPing.executeTask(DbConnection
Ping.java:27)

com.ecobee.foundation.schedule.ScheduledService.executeSchedule(Schedule
dService.java:38)
sun.reflect.GeneratedMethodAccessor287.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessor
Impl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
org.springframework.util.MethodInvoker.invoke(MethodInvoker.java:275)
org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean
$MethodInvokingJob.executeInternal(MethodInvokingJobDetailFactoryBean.ja
va:272)
org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBea
n.java:86)
org.quartz.core.JobRunShell.run(JobRunShell.java:202)
org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java
:529)