Return-Path: Delivered-To: apmail-ibatis-user-java-archive@www.apache.org Received: (qmail 8629 invoked from network); 19 Aug 2008 12:30:43 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 19 Aug 2008 12:30:43 -0000 Received: (qmail 84163 invoked by uid 500); 19 Aug 2008 12:30:40 -0000 Delivered-To: apmail-ibatis-user-java-archive@ibatis.apache.org Received: (qmail 84144 invoked by uid 500); 19 Aug 2008 12:30:40 -0000 Mailing-List: contact user-java-help@ibatis.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: user-java@ibatis.apache.org Delivered-To: mailing list user-java@ibatis.apache.org Received: (qmail 84133 invoked by uid 99); 19 Aug 2008 12:30:40 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 19 Aug 2008 05:30:40 -0700 X-ASF-Spam-Status: No, hits=2.0 required=10.0 tests=HTML_MESSAGE,SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (athena.apache.org: local policy) Received: from [129.41.63.10] (HELO out003.atlarge.net) (129.41.63.10) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 19 Aug 2008 12:29:43 +0000 Received: from MAIL-14PS.atlarge.net ([10.100.50.113]) by out003.atlarge.net with Microsoft SMTPSVC(6.0.3790.1830); Tue, 19 Aug 2008 07:29:12 -0500 X-MimeOLE: Produced By Microsoft Exchange V6.5 Content-class: urn:content-classes:message MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="----_=_NextPart_001_01C901F7.2F975F6C" Subject: RE: Re : Question: "Connection.close has already been closed" Date: Tue, 19 Aug 2008 07:29:45 -0500 Message-ID: In-reply-to: <385082.99566.qm@web31501.mail.mud.yahoo.com> X-MS-Has-Attach: X-MS-TNEF-Correlator: Thread-Topic: Re : Question: "Connection.close has already been closed" Thread-Index: AckB4+kl4ZjEjwe5RES666Ze9gfTEQAEKCQQ References: <385082.99566.qm@web31501.mail.mud.yahoo.com> From: "Brian Parkinson" To: X-OriginalArrivalTime: 19 Aug 2008 12:29:12.0308 (UTC) FILETIME=[2F8CDB40:01C901F7] X-TM-AS-Product-Ver: SMEX-7.0.0.1345-5.5.1027-16104.004 X-TM-AS-Result: No--36.835100-8.000000-31 X-Virus-Checked: Checked by ClamAV on apache.org This is a multi-part message in MIME format. ------_=_NextPart_001_01C901F7.2F975F6C Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Thanks Gilles (and Clinton): =20 Here is the config in gory detail - looks like there might be some use = in posting it for others - using Spring for transactions (external aop) = as well as DBCP for connection pooling. =20 Hopefully this is all correct now. :) =20 SqlMapConfig contains: =20 =20 Spring transactions: =20 =20 =20 =20 Spring datasource: =20 com/ecobee/foundation/dao/ibatis/SqlMapConfig.xml =20 =20 =20 =20 =20 =20 =20 =20 Regards, =20 Brian... =20 =20 ________________________________ From: Gilles Schlienger [mailto:s_gilou@yahoo.com]=20 Sent: Tuesday, August 19, 2008 6:11 AM To: user-java@ibatis.apache.org Subject: Re : Question: "Connection.close has already been closed" Actually, if you use the Spring way of plugging into iBATIS, Spring is = setting for you the transaction manager to the "External" one. The javadoc of the Spring classes is well documented and the source code = is not too complicated. However, I discovered yesterday (funny :) that the datasource that you = inject into you ibatis factory (SqlMapClientFactoryBean) needs to be = "transactional aware" In the class: org.springframework.orm.ibatis.SqlMapClientTemplate=20 you will see in the "execute" method: boolean transactionAware =3D (dataSource instanceof = TransactionAwareDataSourceProxy); [...] springCon =3D (transactionAware ? dataSource.getConnection() : = DataSourceUtils.doGetConnection(dataSource)); So my understanding would be that you need to encapsulate the datasource = in a TransactionAwareDataSourceProxy and inject it in the = SqlMapClientFactoryBean. I hope this helps! Regards Gilles ----- Message d'origine ---- De : Brian Parkinson =C0 : user-java@ibatis.apache.org Envoy=E9 le : Lundi, 18 Ao=FBt 2008, 22h54mn 43s Objet : RE: Question: "Connection.close has already been closed" Clinton writes: =20 "Make sure the iBATIS TransactionManager is set to EXTERNAL (in = SqlMapConfig.xml or equivalent). " =20 Aha. I had no TransactionManager element defined in my SqlMapConfig. = Whoops? =20 I was using Spring to configure the datasource: =20 com/ecobee/foundation/dao/ibatis/SqlMapConfig.xml =20 =20 =20 =20 but I had no TransactionManager defined in my SqlMapConfig.xml file.=20 =20 Am I correct in assuming that I just need to add: =20 =20 to my SqlMapConfig file? =20 If so, should I move the properly declarations from the spring bean = (id=3D"dataSource") into the SqlMapConfig file (under the = transactionManager) element? =20 Any advice on best practices appreciated - the configuraiton of the = datasource, spring, transaction manager, etc. isn't completely clear to = me. =20 Cheers, =20 Brian Parkinson... =20 =20 ________________________________ From: Clinton Begin [mailto:clinton.begin@gmail.com]=20 Sent: Monday, August 18, 2008 4:19 PM To: user-java@ibatis.apache.org Subject: Re: Question: "Connection.close has already been closed" Based on the stack trace, it doesn't look like iBATIS ever even gets the = connection... so this looks like a Spring/DBCP related issue. =20 That said, if iBATIS prematurely closed the connection and DBCP didn't = check the connection for validity, that would cause this problem.=20 But the root cause would be why iBATIS is closing the connection. Make = sure the iBATIS TransactionManager is set to EXTERNAL (in = SqlMapConfig.xml or equivalent). =20 Clinton On Mon, Aug 18, 2008 at 2:13 PM, Brian Parkinson = wrote: Hi all: =09 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". =09 When this happens, the server is pretty much borked - any new database access results in the exception. =09 I never call close() in my code - unsure what's going on here. A quick inspection of my logs didn't reveal anything... =09 Does anyone have any clues? =09 Any help is appreciated. =09 =09 com/ecobee/foundation/dao/ibatis/SqlMapConfig.xml =09 =09 Thanks. =09 Brian Parkinson =09 ----------- x8 snip =09 ERROR 15:45:16:428 Error selecting user from dataabase. {foundation.schedule.DbConnectionPing.executeTask} =09 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. =09 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.JdkDyna = micAopProxy.invoke(JdkDynamicAo pProxy.java:204) $Proxy5.getUser(Unknown Source) =09 >>> = com.ecobee.foundation.schedule.DbConnectionPing.executeTask(DbConnection Ping.java:27) =09 = 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(Transa ctionInterceptor.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) =09 >>> = com.ecobee.foundation.schedule.DbConnectionPing.executeTask(DbConnection Ping.java:27) =09 = 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) =09 ________________________________ Envoy=E9 avec Yahoo! Mail = . Une boite mail plus intelligente.=20 ------_=_NextPart_001_01C901F7.2F975F6C Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable
Thanks Gilles (and = Clinton):
 
Here is the config in gory detail - looks like = there might=20 be some use in posting it for others - using Spring for transactions = (external=20 aop) as well as DBCP for connection pooling.
 
Hopefully this is all correct now. = :)
 
SqlMapConfig contains:
 
 <transactionManager=20 type=3D"EXTERNAL">
  <dataSource=20 type=3D"DBCP">
  </dataSource>
 </transa= ctionManager>
 
Spring transactions:
 
 <bean id=3D"txManager"=20 class=3D"org.springframework.jdbc.datasource.DataSourceTransactionManager= ">
  <property=20 name=3D"dataSource"=20 ref=3D"dataSource"/>
 </bean>
 
 <tx:= advice=20 id=3D"txAdvice"=20 transaction-manager=3D"txManager">
  <tx:attributes>= ;
   <tx:method=20 name=3D"get*" read-only=3D"true" = />
   <tx:method name=3D"*"=20 />
  </tx:attributes>
 </tx:advice> 
 <aop:config>
  <aop:pointcut=20 id=3D"daoServiceOperation" expression=3D"execution(*=20 com.ecobee.foundation.dao.ibatis.*.*(..))" = />
  <aop:advisor=20 advice-ref=3D"txAdvice" pointcut-ref=3D"daoServiceOperation"=20 />
 </aop:config>
 
Spring datasource:
 
 <bean id=3D"mapConfig"=20 class=3D"org.springframework.core.io.ClassPathResource">
 &nbs= p;<constructor-arg>
   <value>com/ecobee/fo= undation/dao/ibatis/SqlMapConfig.xml</value>
  </co= nstructor-arg>
 </bean>
 
 <bean id=3D"dataSource"=20 class=3D"org.springframework.jdbc.datasource.TransactionAwareDataSourcePr= oxy">
  <property=20 name=3D"targetDataSource">
   <ref=20 local=3D"dataSourceImpl"/>
  </property>
 &= lt;/bean>
 
 <bean=20 id=3D"dataSourceImpl" class=3D"org.apache.commons.dbcp.BasicDataSource"=20 destroy-method=3D"close">
  <property = name=3D"driverClassName"=20 value=3D"com.mysql.jdbc.Driver" />
  <property = name=3D"url"=20 value=3D"jdbc:mysql:///ecobee" />
  <property = name=3D"username"=20 value=3D"XXX" />
  <property name=3D"password" = value=3D"YYY"=20 /> 
  <property name=3D"initialSize" = value=3D"10"=20 />
  <property name=3D"maxActive" value=3D"100"=20 /> 
  <property name=3D"maxIdle" value=3D"16"=20 />
  <property name=3D"maxWait" value=3D"2000"=20 />
 </bean>
 
 <bean id=3D"sqlMapClient"=20 class=3D"org.springframework.orm.ibatis.SqlMapClientFactoryBean">
&= nbsp; <property=20 name=3D"dataSource" ref=3D"dataSource" />
  <property = name=3D"configLocation" ref=3D"mapConfig"=20 />
 </bean>
 
 
 
Regards,
 
Brian...
 
 


From: Gilles Schlienger=20 [mailto:s_gilou@yahoo.com]
Sent: Tuesday, August 19, 2008 = 6:11=20 AM
To: user-java@ibatis.apache.org
Subject: Re : = Question:=20 "Connection.close has already been closed"

Actually, if you use the Spring way of plugging into iBATIS, Spring = is=20 setting for you the transaction manager to the "External" one.
The = javadoc of=20 the Spring classes is well documented and the source code is not too=20 complicated.

However, I discovered yesterday (funny :) that the=20 datasource that you inject into you ibatis factory = (SqlMapClientFactoryBean)=20 needs to be "transactional aware"
In the class:=20 org.springframework.orm.ibatis.SqlMapClientTemplate

you will see = in the=20 "execute" method:

boolean transactionAware =3D (dataSource = instanceof=20 TransactionAwareDataSourceProxy);
[...]
springCon =3D = (transactionAware=20 ?
             =20         dataSource.getConnection() :=20 DataSourceUtils.doGetConnection(dataSource));


So=20 my understanding would be that you need to encapsulate the datasource in = a=20 TransactionAwareDataSourceProxy and inject it in the=20 SqlMapClientFactoryBean.

I hope this=20 helps!
Regards
Gilles


-----=20 Message d'origine ----
De : Brian Parkinson = <parki@avaning.com>
=C0 :=20 user-java@ibatis.apache.org
Envoy=E9 le : Lundi, 18 Ao=FBt 2008, = 22h54mn=20 43s
Objet : RE: Question: "Connection.close has already been=20 closed"

Clinton writes:
 
"Make=20 sure the iBATIS TransactionManager is set to EXTERNAL (in = SqlMapConfig.xml or=20 equivalent). "
 
Aha. I had no TransactionManager element = defined in my=20 SqlMapConfig. Whoops?
 
I was using Spring to configure the=20 datasource:
 
 <bean id=3D"mapConfig"=20 class=3D"org.springframework.core.io.ClassPathResource">
 &nbs= p;<constructor-arg>
   <value>com/ecobee/fo= undation/dao/ibatis/SqlMapConfig.xml</value>
  </co= nstructor-arg>
 </bean>

 <bean=20 id=3D"dataSource" class=3D"org.apache.commons.dbcp.BasicDataSource"=20 destroy-method=3D"close">
  <property = name=3D"driverClassName"=20 value=3D"com.mysql.jdbc.Driver" />
  <property = name=3D"url"=20 value=3D"jdbc:mysql:///ecobee" />
  <property = name=3D"username"=20 value=3D"XXX" />
  <property name=3D"password" = value=3D"YYY"=20 /> 
  <property name=3D"initialSize" = value=3D"10"=20 />
  <property name=3D"maxActive" value=3D"64"=20 /> 
  <property name=3D"maxIdle" value=3D"16"=20 />
  <property name=3D"maxWait" value=3D"1000"=20 />
 </bean>
 
 <bean id=3D"sqlMapClient"=20 class=3D"org.springframework.orm.ibatis.SqlMapClientFactoryBean">
&= nbsp; <property=20 name=3D"dataSource" ref=3D"dataSource" />
  <property = name=3D"configLocation" ref=3D"mapConfig"=20 />
 </bean>
 
but I=20 had no TransactionManager defined in my SqlMapConfig.xml file.=20
 
Am I=20 correct in assuming that I just need to add:
 
 <transactionManager=20 type=3D"EXTERNAL">
  <dataSource=20 type=3D"DBCP">
  </dataSource>
 </transa= ctionManager>
 
to my=20 SqlMapConfig file?
 
If so,=20 should I move the properly declarations from the spring bean = (id=3D"dataSource")=20 into the SqlMapConfig file (under the transactionManager)=20 element?
 
Any=20 advice on best practices appreciated - the configuraiton of the = datasource,=20 spring, transaction manager, etc. isn't completely clear to=20 me.
 
Cheers,
 
Brian=20 Parkinson...
 
 


From: Clinton Begin=20 [mailto:clinton.begin@gmail.com]
Sent: Monday, August 18, = 2008 4:19=20 PM
To: user-java@ibatis.apache.org
Subject: Re: = Question:=20 "Connection.close has already been closed"

Based on the stack trace, it doesn't look like iBATIS = ever even=20 gets the connection... so this looks like a Spring/DBCP related = issue. =20

That said, if iBATIS prematurely closed the connection and DBCP = didn't=20 check the connection for validity, that would cause this problem. =

But=20 the root cause would be why iBATIS is closing the connection. Make sure = the=20 iBATIS TransactionManager is set to EXTERNAL (in SqlMapConfig.xml or=20 equivalent). 

Clinton

On Mon, Aug 18, 2008 at 2:13 PM, Brian = Parkinson <parki@avaning.com> = wrote:
Hi=20 all:

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

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

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

Does=20 anyone have any clues?

Any help is appreciated.

  =  =20    <bean=20 = id=3D"mapConfig"
class=3D"org.springframework.core.io.ClassPathResourc= e">
 =20            =20 =  <constructor-arg>

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

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

Thanks.

Brian=20 Parkinson

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

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

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

Trace=20 = org.springframework.transaction.CannotCreateTransactionException:
org.= springframework.jdbc.datasource.DataSourceTransactionManager.doBegin
(= DataSourceTransactionManager.java:238)
org.springframework.transaction= .support.AbstractPlatformTransactionManag
er.getTransaction(AbstractPl= atformTransactionManager.java:377)
org.springframework.transaction.int= erceptor.TransactionAspectSupport.cre
ateTransactionIfNecessary(Transa= ctionAspectSupport.java:261)
org.springframework.transaction.intercept= or.TransactionInterceptor.invok
e(TransactionInterceptor.java:101)
= org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(Ref<= BR>lectiveMethodInvocation.java:171)
org.springframework.aop.intercept= or.ExposeInvocationInterceptor.invoke(E
xposeInvocationInterceptor.jav= a:89)
org.springframework.aop.framework.ReflectiveMethodInvocation.pro= ceed(Ref
lectiveMethodInvocation.java:171)
org.springframework.aop.= framework.JdkDyna=20 = micAopProxy.invoke(JdkDynamicAo
pProxy.java:204)
$Proxy5.getUser(Un= known=20 = Source)

>>>
com.ecobee.foundation.schedule.DbConnectio= nPing.executeTask(DbConnection
Ping.java:27)

com.ecobee.foundat= ion.schedule.ScheduledService.executeSchedule(Schedule
dService.java:3= 8)
sun.reflect.GeneratedMethodAccessor287.invoke(Unknown=20 = Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMeth= odAccessor
Impl.java:25)
java.lang.reflect.Method.invoke(Method.jav= a:597)
org.springframework.util.MethodInvoker.invoke(MethodInvoker.jav= a:275)
org.springframework.scheduling.quartz.MethodInvokingJobDetailFa= ctoryBean
$MethodInvokingJob.executeInternal(MethodInvokingJobDetailFa= ctoryBean.ja
va:272)
org.springframework.scheduling.quartz.QuartzJo= bBean.execute(QuartzJobBea
n.java:86)
org.quartz.core.JobRunShell.r= un(JobRunShell.java:202)
org.quartz.simpl.SimpleThreadPool$WorkerThrea= d.run(SimpleThreadPool.java
:529)
Message:=20 Connection.close() has already been called. Invalid operation
in = this=20 state.
Nested exception=20 = trace
com.mysql.jdbc.exceptions.MySQLNonTransientConnectionException:<= BR>com.mysql.jdbc.SQLError.createSQLException(SQLError.java:888)
com.m= ysql.jdbc.Connection.getMutex(Connection.java:3728)
com.mysql.jdbc.Con= nection.setAutoCommit(Connection.java:5365)
org.apache.commons.dbcp.De= legatingConnection.setAutoCommit(DelegatingCon
nection.java:331)
or= g.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.setAutoCommit(PoolingDataSource.java:317)
org.springframework.jdbc.datas= ource.DataSourceTransactionManager.doBegin
(DataSourceTransactionManag= er.java:221)
org.springframework.transaction.support.AbstractPlatformT= ransactionManag
er.getTransaction(AbstractPlatformTransactionManager.j= ava:377)
org.springframework.transaction.interceptor.TransactionAspect= Support.cre
ateTransactionIfNecessary(TransactionAspectSupport.java:26= 1)
org.springframework.transaction.interceptor.TransactionInterceptor.= invok
e(Transa=20 = ctionInterceptor.java:101)
org.springframework.aop.framework.Reflectiv= eMethodInvocation.proceed(Ref
lectiveMethodInvocation.java:171)
org= .springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(E
= xposeInvocationInterceptor.java:89)
org.springframework.aop.framework.= ReflectiveMethodInvocation.proceed(Ref
lectiveMethodInvocation.java:17= 1)
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDyna= micAo
pProxy.java:204)
$Proxy5.getUser(Unknown=20 = Source)

>>>
com.ecobee.foundation.schedule.DbConnectio= nPing.executeTask(DbConnection
Ping.java:27)

com.ecobee.foundat= ion.schedule.ScheduledService.executeSchedule(Schedule
dService.java:3= 8)
sun.reflect.GeneratedMethodAccessor287.invoke(Unknown=20 = Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMeth= odAccessor
Impl.java:25)
java.lang.reflect.Method.invoke(Method.jav= a:597)
org.springframework.util.MethodInvoker.invoke(MethodInvoker.jav= a:275)
org.springframework.scheduling.quartz.MethodInvokingJobDetailFa= ctoryBean
$MethodInvokingJob.executeInternal(MethodInvokingJobDetailFa= ctoryBean.ja
va:272)
org.springframework.scheduling.quartz.QuartzJo= bBean.execute(QuartzJobBea
n.java:86)
org.quartz.core.JobRunShell.r= un(JobRunShell.java:202)
org.quartz.simpl.SimpleThreadPool$WorkerThrea= d.run(SimpleThreadPool.java
:529)



Envoy=E9 avec Yahoo!=20 Mail.
Une boite mail plus intelligente. ------_=_NextPart_001_01C901F7.2F975F6C--