I have a query which is taking more then 2 hours to run on a remote machine .But my application server is behind the firewall so the firewall drops the connection while it is waiting for results from the remote machine after .Is there any way that i can keep this connection alive for more then one hour
Please help me .
Exception I am getting when remote machine returns the result. ========================================================== Caught IOException: com.sybase.jdbc2.jdbc.SybConnectionDeadException: JZ0C0: Connection is already closed. at com.sybase.jdbc2.jdbc.ErrorMessage.createIOEKilledConnEx(ErrorMessage.java:775) at com.sybase.jdbc2.jdbc.ErrorMessage.raiseErrorCheckDead(ErrorMessage.java:816) at com.sybase.jdbc2.tds.Tds.handleIOE(Tds.java:3491) at com.sybase.jdbc2.tds.Tds.nextResult(Tds.java:2043) at com.sybase.jdbc2.jdbc.ResultGetter.nextResult(ResultGetter.java:69) at com.sybase.jdbc2.jdbc.SybStatement.nextResult(SybStatement.java:220) at com.sybase.jdbc2.jdbc.SybStatement.nextResult(SybStatement.java:203) at com.sybase.jdbc2.jdbc.SybStatement.executeLoop(SybStatement.java:1766) at com.sybase.jdbc2.jdbc.SybStatement.execute(SybStatement.java:1758) at com.sybase.jdbc2.jdbc.SybPreparedStatement.execute(SybPreparedStatement.java:619) at TestDbConnect.connect(TestDbConnect.java:55) at TestDbConnect.main(TestDbConnect.java:82)
There may be ways of dealing with the problem of connection timeout that I do not know. However, this whole thing really sounds wacky to me. I mean taking 2 hours to execute a query is something that really requires a design change. If the job really takes too long in normal scenarios, why not make it an asynchronous process? The client will post a request for processing and when the result is ready the status will be sent back to the client or updated somewhere, from where the client can pick up.
Well its a old application using Sybase as database e have more then 113 million records to process so time taken by it is normal.
I am getting your point but application was working fine from last 10 years before this new firewall was installed.
What we tried so far.. 1.Ran a new thread calling the query on same connection but this query went into the sybase queue and is getting processed after the first query complete .So it was a fail attempt.What ever we are calling on sybase is being sent to a queue.so e are not able to keep connection busy to be up for long.
2.changing firewall setting is not a option with us.
3.We tried to make a socket connection on the same port so tht it is busy .and ran setKeepalive function on it.
Obviously the problem is your new firewall. Certain configurations will interrupt existing but idle connections after a period of time. I ran into one at my employer. The security people would not disable this configuration, so we ended up doing as Nitesh suggests, and making the process asynchronous and sending an email when the process is done.