Presumably SQLException is thrown:

http://docs.oracle.com/javase/6/docs/api/java/sql/Statement.html#setQueryTimeout%28int%29

Andrus

On Dec 12, 2012, at 5:38 AM, Andrew Willerding <[email protected]> wrote:

> Thanks for the "old" advice.  ;-)   I will definitely try it although I'm not 
> sure if the condition that created this situation may happen again on the 
> Oracle server.  A lot of people have a lot of explaining to do to figure out 
> what was going wrong.  Luckily I'm just a dumb client in this situation.
> 
> One more question though.  If it does work and the driver accepts the timeout 
> value I set, what can I expect to happen when the timer expires?  Is there a 
> specific exception I need to catch or a condition I need to check?
> 
> Andrew
> 
> 
> On 12/11/2012 02:33 PM, Andrus Adamchik wrote:
>> At the JDBC level timeout can be controlled via 
>> Statement.setQueryTimeout(..). However YMMV between different DBs and 
>> drivers. Don't have much recent Oracle experience, but if Oracle driver 
>> happens to support this API, you can use this old advice [1] which is still 
>> applicable. Moreover if you have any success with it, please open a Jira and 
>> we'll integrate it in the basic Cayenne SelectQuery.
>> 
>> Still your description sounds odd. If there is problem with a query on the 
>> Oracle side, I would expect an exception. Though fwiw Oracle driver has 
>> always been an odd one among all the DBs supported by Cayenne.
>> 
>> Andrus
>> 
>> [1] http://cayenne.195.n3.nabble.com/query-timeout-needed-td1070.html
>> 
>> On Dec 11, 2012, at 5:57 PM, Andrew Willerding <[email protected]> 
>> wrote:
>> 
>>> I had a situation yesterday that I didn't expect and therefore didn't 
>>> handle correctly.  My code is executing a Stored Procedure on an Oracle DB 
>>> using the performGenericQuery method.  The problem was that the Oracle 
>>> server was not responding to the stored procedure and the eventually the 
>>> query returned "successfully" with an empty result.  I was expecting some 
>>> sort of exception to be thrown (like a timeout) in this situation but it 
>>> definitely was not the case.  I currently measure the transaction time and 
>>> the empty response was returning consistently  at 60 seconds - it normally 
>>> takes less than 2 seconds.  I am not sure if this 60 second timeout is set 
>>> on the Oracle server or somewhere in the Cayenne connection.
>>> 
>>> I have three questions:
>>> 
>>> 1)  Is there a way to set a timeout value within the Cayenne connection, or 
>>> better yet, an individual query to force a timeout exception if a response 
>>> is not received within a certain period of time?
>>> 
>>> 2)  Assuming the timeout is triggered from the Oracle server for the 
>>> situation I describe above, other than examining the timeout value within 
>>> my code, is there a way to differentiate between a successful transaction 
>>> and one where the DB server times out and returns an empty result set?
>>> 
>>> 3)  Assuming that the answer is "no" to both questions 1 & 2, is there a 
>>> way to "kill" a query in order to release the DB connection and return it 
>>> to the pool?
>>> 
>>> I am using V3.0.2.
>>> 
>>> Thanks,
>>> 
>>> Andrew
> 
> 

Reply via email to