So there's a leak somewhere. Do you see any hanging threads with jstack, or 
maybe some unclosed ResultIterators?

Andrus

> On Jun 12, 2015, at 5:51 PM, Mike Kienenberger <mkien...@gmail.com> wrote:
> 
> ....And upping my connection pool size from 1 to 3 didn't help as I
> got the error again today, but this time with all 3 in use.
> 
> Caused by: java.sql.SQLException: Can't obtain connection. Request
> timed out. Total used connections: 3
> 
> 
> 
> On Thu, Jun 11, 2015 at 11:41 AM, Mike Kienenberger <mkien...@gmail.com> 
> wrote:
>> So what I had when I originally deployed would have been three pools
>> of one connection each?   That's fine.  And that explains why it
>> worked without problems.
>> 
>> So when I increased to 3 connections, I actually have 9 now, three in
>> each of the three pools which I definitely do not want.
>> 
>> So apparently I only hit this problem in a single runtime's connection
>> pool, and not in all of them.   That should make it easier to track
>> down what caused it.   Thanks.
>> 
>> 
>> 
>> On Thu, Jun 11, 2015 at 11:32 AM, Andrus Adamchik
>> <and...@objectstyle.org> wrote:
>>>> My guess is that all three runtimes share the same pool
>>> 
>>> 
>>> Actually no. If you have 3 runtimes, and let Cayenne instantiate its pool 
>>> (as the stack trace implies) instead of using say container JNDI 
>>> DataSource, you should have 3 instances of the pool. You can try confirming 
>>> the number of PoolManager instances with VisualVM or jmap.
>>> 
>>> Andrus
>>> 
>>>> On Jun 11, 2015, at 6:18 PM, Mike Kienenberger <mkien...@gmail.com> wrote:
>>>> 
>>>> So I finally put my old Cayenne 1.x-upgraded to 3.x app into production.
>>>> 
>>>> A couple of hours later, I got this error [1].   Note that my app
>>>> synchronizes requests so only one thread should ever be running
>>>> Cayenne requests at a time.
>>>> 
>>>> My app has run for years with only a single connection.   My 3.x app
>>>> ran in development for a year before it was deployed to production.
>>>> 
>>>> Is this a fluke?   I did raise my connection pool to 3 the next day,
>>>> but I don't want to arbitrarily assign a higher number and think I've
>>>> magically solved the problem.
>>>> 
>>>> Does having three active server runtimes affect this?   Before, my
>>>> query qualifiers were all handled inside the main runtime, but now I
>>>> have three separate runtimes configured.   My guess is that all three
>>>> runtimes share the same pool, so this is probably not the cause.   And
>>>> since the problem happened a couple hours later and the three runtimes
>>>> were being used well before that without an error, I'd say experience
>>>> bears this out.
>>>> 
>>>> 
>>>> [1]
>>>> 
>>>> Caused by: java.sql.SQLException: Can't obtain connection. Request
>>>> timed out. Total used connections: 1
>>>>       at 
>>>> org.apache.cayenne.conn.PoolManager.uncheckPooledConnection(PoolManager.java:452)
>>>>       at 
>>>> org.apache.cayenne.conn.PoolManager.getConnection(PoolManager.java:382)
>>>>       at 
>>>> org.apache.cayenne.conn.PoolManager.getConnection(PoolManager.java:371)
>>>>       at 
>>>> org.apache.cayenne.access.DataNode$TransactionDataSource.getConnection(DataNode.java:351)
>>>>       at 
>>>> org.apache.cayenne.access.DataNode.performQueries(DataNode.java:259)
>>>> 
>>> 
> 

Reply via email to