cayenne-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Andrus Adamchik <and...@objectstyle.org>
Subject Re: Crash when reconnecting to MySQL (3.0M3)
Date Wed, 26 Mar 2008 13:19:09 GMT
Good idea to use DBCP if the built-in connection pool is not enough. I  
am also using DBCP DataSource which is definitely much more  
configurable than the default Cayenne one. Since (a) I am using latest  
3.0 builds, and (b) the DataSource is abstracted via JNDI, I haven't  
seen the crashes described below. If you have stack traces, please  
open a Jira.

Andrus


On Mar 26, 2008, at 3:00 PM, Robert Zeigler wrote:

> I've seen the same issue periodically.
> Basically, it seems to have something to do with the connection pool  
> never being emptied, so you wind up with a closed connection.
> And yes, I've tried autoReconnect=true,and several related variants.
> I finally switched to using DBCP, which lets you specify a "test"  
> query to ensure that the connection is still valid, as well as a  
> host of other options.
> I haven't seen the exception since. One downside to switching is  
> that at least the 2.x modeler chokes on trying to load the project  
> when using the DBCP connection factory.
> Something about the auto-adapter detection failing.
>
> Cheers,
>
> Robert
>
> On Mar 26, 2008, at 3/264:51 AM , Alexander Lamb (dev) wrote:
>> Yes, we did add this parameter but we still can reproduce the bug  
>> locally (on the desktop using Jetty).
>>
>> But it does it only on one application which has something  
>> "special": it has two models that we merge when starting the app.
>>
>> On another app also in version 3 but with only one model, it works.
>>
>> To test, we simply kill MySql while the app is running, then  
>> restart MySql. The reconnect works with the app with one model and  
>> fails partially with the app with the merged models. Once the  
>> exception has been raised, the app continues fine (and so finally  
>> reconnects correctly). There is just no way of knowing where the  
>> exception will be raised (we tried catching an exception at one  
>> place but then the exception appeared at some other place).
>>
>> Alex
>>
>> Le 26 mars 08 à 10:27, Andrus Adamchik a écrit :
>>> Are you using "autoReconnect=true" parameter in the MySQL  
>>> connection URL?
>>>
>>> Thanks,
>>> Andrus
>>>
>>>
>>> On Mar 26, 2008, at 10:44 AM, Alexander Lamb wrote:
>>>
>>>> Hello List,
>>>>
>>>> We have an application, deployed successfully with Tapestry  
>>>> 5.0.11 and Cayenne 3.0M3 on Tomcat 6 with MySQL 5.0.
>>>>
>>>> Everything is fine until the point where a long period of  
>>>> inactivity has passed and (we suppose) all the DataContexts are  
>>>> garbage collected (we create one DataContext per user session).
>>>> The first user who logs in will generate an error on (again, what  
>>>> we suppose) is a problem reconnecting to MySQL.
>>>>
>>>> To avoid the problem, we "ping" the app to keep it alive... We  
>>>> also tried to catch the Exception but doing so simply pushes the  
>>>> problem to another part of the program. The funny thing is that  
>>>> it is not the first attempt to connect to the database but maybe  
>>>> the first attempt using either a stored query in the model or raw  
>>>> SQL.
>>>>
>>>> Here is the kind of message we get:
>>>>
>>>> 	Communications link failure due to underlying exception:
>>>>
>>>> ** BEGIN NESTED EXCEPTION **
>>>>
>>>> java.io.EOFException
>>>>
>>>> STACKTRACE:
>>>>
>>>> java.io.EOFException
>>>> 	at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:1905)
>>>> 	at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2351)
>>>> 	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2862)
>>>> 	at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1571)
>>>> 	at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1666)
>>>> 	at com.mysql.jdbc.Connection.execSQL(Connection.java:2988)
>>>> 	at com.mysql.jdbc.Connection.setAutoCommit(Connection.java:4913)
>>>> 	at  
>>>> org 
>>>> .apache 
>>>> .cayenne 
>>>> .conn 
>>>> .PooledConnectionImpl.getConnection(PooledConnectionImpl.java:129)
>>>> 	at  
>>>> org 
>>>> .apache 
>>>> .cayenne.conn.PoolManager.uncheckConnection(PoolManager.java:383)
>>>> 	at  
>>>> org 
>>>> .apache.cayenne.conn.PoolManager.getConnection(PoolManager.java: 
>>>> 367)
>>>> 	at  
>>>> org 
>>>> .apache.cayenne.conn.PoolManager.getConnection(PoolManager.java: 
>>>> 344)
>>>> 	at org.apache.cayenne.access.DataNode 
>>>> $TransactionDataSource.getConnection(DataNode.java:321)
>>>> 	at  
>>>> org.apache.cayenne.access.DataNode.performQueries(DataNode.java: 
>>>> 209)
>>>> 	at  
>>>> org 
>>>> .apache 
>>>> .cayenne 
>>>> .access.DataDomainQueryAction.runQuery(DataDomainQueryAction.java: 
>>>> 442)
>>>> 	at org.apache.cayenne.access.DataDomainQueryAction.access 
>>>> $000(DataDomainQueryAction.java:67)
>>>> 	at org.apache.cayenne.access.DataDomainQueryAction 
>>>> $2.transform(DataDomainQueryAction.java:415)
>>>> 	at  
>>>> org 
>>>> .apache 
>>>> .cayenne.access.DataDomain.runInTransaction(DataDomain.java:847)
>>>> 	at  
>>>> org 
>>>> .apache 
>>>> .cayenne 
>>>> .access 
>>>> .DataDomainQueryAction 
>>>> .runQueryInTransaction(DataDomainQueryAction.java:412)
>>>> 	at  
>>>> org 
>>>> .apache 
>>>> .cayenne 
>>>> .access.DataDomainQueryAction.execute(DataDomainQueryAction.java: 
>>>> 119)
>>>> 	at org.apache.cayenne.access.DataDomain.onQuery(DataDomain.java: 
>>>> 740)
>>>> 	at  
>>>> org 
>>>> .apache 
>>>> .cayenne 
>>>> .util 
>>>> .ObjectContextQueryAction.runQuery(ObjectContextQueryAction.java: 
>>>> 296)
>>>> 	at org.apache.cayenne.util.ObjectContextQueryAction 
>>>> $1.createObject(ObjectContextQueryAction.java:286)
>>>> 	at org.apache.cayenne.cache.MapQueryCache.get(MapQueryCache.java: 
>>>> 74)
>>>> 	at  
>>>> org 
>>>> .apache 
>>>> .cayenne 
>>>> .util 
>>>> .ObjectContextQueryAction 
>>>> .interceptLocalCache(ObjectContextQueryAction.java:258)
>>>> 	at  
>>>> org 
>>>> .apache 
>>>> .cayenne 
>>>> .util 
>>>> .ObjectContextQueryAction.execute(ObjectContextQueryAction.java:82)
>>>> 	at  
>>>> org.apache.cayenne.access.DataContext.onQuery(DataContext.java: 
>>>> 1331)
>>>> 	at  
>>>> org 
>>>> .apache.cayenne.access.DataContext.performQuery(DataContext.java: 
>>>> 1320)
>>>> 	at  
>>>> ch 
>>>> .rodano 
>>>> .studies 
>>>> .services 
>>>> .StudySession 
>>>> .getRunningTotalPatientsByMonthForRegistryCenters 
>>>> (StudySession.java:466)
>>>>
>>>>
>>>> etc...
>>>>
>>>> Thanks for any idea!
>>>>
>>>> Alex
>>>>
>>>> --
>>>> Alexander Lamb
>>>> Founding Associate
>>>> RODANOTECH Sàrl
>>>>
>>>> 4 ch. de la Tour de Champel
>>>> 1206 Geneva
>>>> Switzerland
>>>>
>>>> Tel:  022 347 77 37
>>>> Fax: 022 347 77 38
>>>>
>>>> http://www.rodanotech.ch
>>>>
>>>>
>>>>
>>>>
>>>
>>
>
>


Mime
View raw message