2012-05-07 64 views
1

我需要一種機制來實現Java中的異步作業調度,並且正在查看Quartz Scheduler,但它似乎並未提供必要的功能。使用Quartz的Java中的異步調度

更具體地說,我的應用程序運行在不同的節點上,它有一個基於Web的用戶界面,通過它用戶可以調度幾個不同的作業。當作業完成時(將來某個時間),應該向用戶界面回報,以便用戶瞭解其狀態。在此之前,用戶應該可以選擇編輯或取消預定作業。

實現方法是讓一個調度程序線程在其中一個節點的後臺不斷運行,併爲作業執行收集JobDetail定義。

在任何情況下,有兩個問題(適用於任何一個單節點或多節點的情況):

  1. 石英是否允許修改或已計劃作業的取消?
  2. 如何實現「回調」機制,以便將作業執行結果回報給UI?

非常感謝任何代碼示例或指針。

回答

4
  1. Quartz是否允許修改或取消已安排的作業?

您可以 「取消調度」 工作:

scheduler.unscheduleJob(triggerKey("trigger1", "group1")); 

或刪除工作:

scheduler.deleteJob(jobKey("job1", "group1")); 

如在文檔中描述:

http://quartz-scheduler.org/documentation/quartz-2.x/cookbook/UnscheduleJob

注,兩者之間的主要區別是難以理解執行作業會刪除給定的觸發器,而刪除作業會刪除給定作業的所有觸發器。

  1. 如何實現「回調」機制,以便將作業執行結果回報給UI?

通常,在網絡世界中,您將輪詢Web服務器的更改。根據您的Web框架,可能有一個組件可用(Push,Pull,Poll?),這使得這很容易。另外,你需要做的是在服務器上存儲一些關於你的工作的狀態。作業完成後,您可以更新數據庫中的值或可能更新的內存中的值。這反過來會被輪詢拾取並顯示給用戶。