Okay, that's the issue (not calling close()).  I thought what I was getting
back was a real JDBC Connection, but it looks like I'm getting back a
ConnectionWrapper, which when closed, returns the connection to pool.  I
can do something conditionally with this.

Thanks,

Lon

On Tue, Oct 14, 2014 at 5:12 PM, Lon Varscsak <lon.varsc...@gmail.com>
wrote:

> That's basically what I'm doing...
>
>      DataSource dataSource = serverRuntime().getDataSource(dataNodeName);
>
>
>
>     try {
>
>     return dataSource.getConnection();
>
>     } catch (SQLException sqe) {
>
>     throw new RuntimeException(sqe);
>
>     }
>
> No exception is being throw.  My query executes (a simple select) and
> returns results.  I then immediately do a "normal" Cayenne fetch, but it
> times out with the error I mentioned.  My code doesn't explicitly close the
> connection, because historically I wouldn't want to disconnect from the
> database.
>
> -Lon
>
> On Tue, Oct 14, 2014 at 4:46 PM, Andrus Adamchik <and...@objectstyle.org>
> wrote:
>
>> Hi Lon,
>>
>> Some code samples showing how you get and release connection would help
>> to understand your problem better. But... You can actually bypass dealing
>> with the internals of Cayenne stack and work with DataSource as you would
>> in a straight JDBC application:
>>
>> ServerRuntime r = ...
>> DataSource ds = r.getDataSource("mydatanode");
>>
>> try(Connection c = ds.getConnection()) {
>>    // do your thing here.. and the Java will close the connection
>>    // on exit from the "try" block
>> }
>>
>>
>> Or you can use SQLTemplate for raw SQL and avoid dealing with connections
>> all together, which is a preferred way:
>>
>>
>> http://cayenne.apache.org/docs/3.1/cayenne-guide/queries.html#sqltemplate
>>
>> Andrus
>>
>>
>> On Oct 14, 2014, at 6:54 PM, Lon Varscsak <lon.varsc...@gmail.com> wrote:
>>
>> > Hey all,
>> >
>> > I have some code that executes some raw SQL and historically (with EOF)
>> I
>> > just get the connection that would normally be used for that editing
>> > context.  No problems.  So I'm trying to implement that similarly in
>> > Cayenne, and I'm getting the DataNode's DataSource's connection, and it
>> > works, but then any subsequent calls (at least within the same request)
>> I
>> > get a timeout because it's like the connection is being used (even
>> though
>> > I'm done executing my query) and unavailable to the pool (error:  Can't
>> > obtain connection. Request timed out. Total used connections: 1)
>> >
>> > I've been using this code with a JDBC Connection for a very long time,
>> and
>> > I think I'm releasing the resources I create (the Statement).  What
>> could I
>> > be missing here?  Is there a better way to "checkout" and then "release"
>> > the connection?
>> >
>> > Thanks,
>> >
>> > Lon
>>
>>
>

Reply via email to