2010-05-18 80 views
3

在我的web服務中,所有的方法調用都將作業提交給一個隊列。基本上這些操作需要很長時間才能執行,所以所有這些操作都將一個Job提交給一個隊列並返回一個表示「已提交」的狀態。然後,客戶端使用其他服務方法繼續輪詢以檢查作業的狀態。作業排隊和執行機制

目前,我所做的是創建自己的Queue,Job類,這些類是Serializable並將這些作業(即它們的序列化字節流格式)保存到數據庫中。因此,一個UpdateLogistics操作只是將一個「UpdateLogisticsJob」隊列排隊並返回。我寫了自己的JobExecutor,每N秒喚醒一次,掃描數據庫表中的任何現有作業並執行它們。請注意,作業必須持續存在,因爲這些作業必須經歷應用程序服務器崩潰。

這是很久以前完成的,我用我的Queues,Jobs,Executors等定製的類。但現在,我想知道有人做過類似的事情嗎?特別是,

  • 是否有框架可用於此? Spring/Apache等東西
  • 任何易於適應/調試並與像Spring這樣的庫一起玩的框架都很棒。

編輯 - 石英

很抱歉,如果我沒有解釋更多,石英有利於無狀態的工作(和也爲一些有狀態的作業),但對我來說,關鍵是非常有狀態堅持「作業實例「(不只是工作或任務)。因此,例如executeWorkflow("SUBMIT_LEAVE")的操作實際上可能會創建5個作業實例,每個實例都具有至少5-10個參數,如userId,accountId等以保存到數據庫中。

我正在尋找圍繞該地區的一些支持,其中Job實例可以保存到數據庫並重新創建等?

回答

2

看看JBoss jBPM。這是一個工作流程定義軟件包,可讓您混合自動和手動流程。任務被持久化到數據庫後端,看起來它具有some asynchronous執行屬性。

+0

我很久以前看過jBPM,但不知道異步連續存在。謝謝 – 2010-05-19 14:33:30

0

我很長時間沒有使用Quartz,但我懷疑它可以做你想做的一切。

0

彈簧批量加石英