W jaki sposób „anulować zapytanie” praca w SQL Developer

głosy
3

W SQL Developer, klikając przycisk Anuluj Task zatrzymuje wykonanie zapytania immidiately. Muszę wdrożyć taką samą funkcjonalność w naszym projekcie.

anulować

Używam BC4J jako narzędzie ORM do wykonania zapytań. Muszę odwołać wykonanie kwerendy wyszukiwania o nazwie thorugh widzenia obiektów, który wywołuje kilka funkcji baz danych / procedury, aby uzyskać wynik.

Próbowałem, używając viewObject.cancelQuery();ale to nie ma żadnego wpływu; zapytanie utrzymuje wykonanie do końca.

Mam podłączony poprzez zestawianiem połączeń JDBC, obsługiwane przez BC4J.

Utwórz 19/02/2013 o 10:06
użytkownik
W innych językach...                            


1 odpowiedzi

głosy
2

Moja propozycja jest

  • Kiedy zapytanie jest złożone
    • blokować dowolne polecenie UI zaakceptować „anuluj” (najprostszy sposób: za pomocą okna dialogowego modalnego w tym celu bardziej użytkownik wygodne: block tylko lokalne komendy zobacz)
    • Uruchom kwerendę w osobnym wątku innego niż wątek UI, użyj Runnablerealizację których
      • ma swoją własną cancel()metodę, która
        • wzywa cancelQuerywzgl. cancelo zapytaniu
        • zasygnalizować to zdarzenie do zapytania runnable użyciu <query thread>.interrupt(); W tym celu trzeba przechowywać odniesienie do kwerendy w wątku <query thread>. Operacje aktywne IO są czasami przerwana przez ten sygnał!
      • jest w stanie poradzić sobie z InterruptedExceptioni SQLExceptionw run(): czy te wyjątki są catched transakcji wycofywania (jeśli w ogóle jest uruchamiany za pomocą kwerendy tylko do odczytu)
      • jeśli istnieje wiele wypowiedzi długo działa w ten uruchamialny następnie sprawdzić Thread.currentThread().isInterrupted()po każdej instrukcji, cancel()jeśli wynik jest prawdziwy
  • na zakończeniu kwerendy synchronizować swoje wyniki z UI
  • na anulowanie:
    • zadzwonić cancel()z zapytaniem runnable
    • zapomnieć wątek (ale pamiętaj, by nie wyczerpać zasoby systemowe lub swojej puli połączeń, jeśli zbyt wiele wątków anulowane nadal nie zostały jeszcze zakończone)
    • odblokować UI

Istnieje pomocnicze zajęcia w Swing, a także Eclipse RCP, które wspierają ten projekt.

Odpowiedział 01/03/2013 o 10:12
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more