Re: How to stop a long running query?

From: Nikolaos Paraschou (niparas..mail.com)
Date: Fri Aug 20 2010 - 05:37:40 UTC

  • Next message: Andrus Adamchik: "Re: How to stop a long running query?"

    Thank you for your replies. I'll try out your suggestions. It seems, though,
    it is a pretty hard task...

    Regards,
    Nikos

    2010/8/19 Chris Poulsen <mailinglis..esluop.dk>

    > Hi,
    >
    > I've played around with query cancellation a couple of years ago (on Oracle
    > btw), the strategy I found to be least intrusive was to wrap the JDBC
    > connection/statements in my own Connection/*Statement classes and let
    > statements register themselves somewhere accessible from other threads on
    > creation and unregister on .close() before delegating to the inner instance.
    >
    > How you glue in the wrapped JDBC objects depends on your setup - you could
    > create your own wrapping Driver or DataSource/DataSourceFactory.
    >
    > On my part it was an attempt to isolate the query cancellation stuff from
    > an old webapp framework in order to be able to eliminate lots of home rolled
    > jdbc/transaction handling and make it easier to integrate things like spring
    > and cayenne, while maintaining the original feature-set (which included
    > query cancellation). In the end it turned out that query cancellation wasn't
    > really necessary and it was replaced by a fixed transaction timeout instead.
    > (Simple cancellation was a breeze, but allowing the user to choose whether
    > he would cancel or force a long-running query turned out to be a mess in our
    > case)
    >
    > Hth!
    >
    > --
    > Chris
    >
    >
    >
    > On 18-08-2010 21:54, Nikolaos Paraschou wrote:
    >
    >> Hello,
    >>
    >> I have written a small application in java that interacts with db2 using
    >> apache cayenne.
    >> The application sends a long running query to the db2 server and awaits
    >> response. The query starts executing from within SwingWorker's
    >> doInBackground() method. During the query's execution, a cancel button
    >> appears allowing the user to cancel the operation. When clicked,
    >> SwingWorker's cancel() is called and everything seems to work fine
    >> regarding
    >> java code. The SwingWorker thread is canceled (I can confirm that). But,
    >> unfortunately, the other thread running the query doesn't stop (or perhaps
    >> it stops but the query is already being processed by db2 until finished).
    >>
    >> Is there any way to stop the query using cayenne specific methods? I tried
    >> to create a new DataContext and bind it to the running thread (the
    >> following
    >> code is executed inside doInBackground():
    >>
    >> BaseContext.bindThreadObjectContext(DataContext.createDataContext());
    >> ObjectContext oc = BaseContext.getThreadObjectContext();
    >>
    >> return oc.performQuery(longRunQuery);
    >>
    >> No success.
    >>
    >> Thank you,
    >> Nikos
    >>
    >>
    >



    This archive was generated by hypermail 2.0.0 : Fri Aug 20 2010 - 05:38:18 UTC