2011-07-13 36 views
3

由於到目前爲止ColdFusion中還沒有完整的BPM框架/解決方案,您如何將工作流建模爲可輕鬆擴展和維護的ColdFusion應用程序?如何在ColdFusion中建立業務工作流程模型?

商務工作流程更是那麼好聽映射到編程語言的流程圖。例如:

你如何模擬一個任務X,它遵循並行發生的多個任務Y0,Y1,Y2,其中Y0是一個人類進程(需要等待輸入),Y1是一個web服務,可能會出錯並可能需要自動重試,而Y2是一個自動化過程;在任務Z完成後,只有當所有的Y完成時才執行任務Z?

我的想法......

  • 好像我需要做存儲/管理/保持 跟蹤狀態,並與cfscheuler頻繁檢查了一大堆。
  • cfthread不會有太大幫助,因爲某些任務可能需要幾天的時間(例如等待用戶的確認) 。
  • 我已經可以像流將要在多個UDF的四處傳播, DB,和CFC
  • 在其他的語言,也許我們可以移植到任何CF開源工作流引擎?

謝謝你的智力。 :)

回答

1

研究Java Process Definition Language specification其中JBoss has an execution engine for it。使用這種基於Java的引擎可能是您最簡單的解決方案,它解決了您列出的許多問題。

如果你打算自己寫,你最終可能會在有向圖中最終建模狀態和轉換,頂點和邊。正如Ciaran Archer所寫,這是State Machine的組件。最好的持久性方法IMO正在捕獲通過序列化通過工作流發送的任何數據的版本,捕獲當前狀態以及狀態之間的轉換歷史和對該數據的更改。該機制可能需要一種方式來跟蹤對該工作流採取下一步行動的責任人或負責人。

根據您的問題,我們要考慮的是你是否真的不需要在您的解決方案來表示並行任務。相反,它可能會對一組消息進行排隊,然後爲所有這些消息指定一個等待狀態來完成。表示實際並行性意味着您正在通過幾個不同的進程同時移動數據。在這種情況下,當他們再次加入時,您需要一種算法來解決增量,這是非常重要的任務。

在ColdFusion和您正在嘗試完成的環境中,如果您正在編寫的系統需要輪詢其他系統,則可能需要計劃任務。將WDDX看作序列化格式。 JSON雖然誘人簡單,但我記得有一些圍繞數字和日期的邊緣案例會導致你悲傷。

Finally see my answer to this question for some additional thoughts

+0

謝謝。關於JPDL,是否可以在JPDL中定義進程,然後從CF和CF服務器中調用JBoss執行引擎? – Henry

+0

@Henry:沒有試過 - 在學習JPDL之後寫下我自己的 - 但應該是可以的。 – orangepips

+0

@oranagepips你寫了你自己的執行引擎?在ColdFusion中?哇。我猜你不打算開源嗎?你可以分享的任何提示?謝謝 – Henry

1

關閉我的頭頂我正在考慮State design pattern狀態堅持到數據庫。查看Head First Design Patterns的Gumball機器示例。

通常,這工作,如果你有東西(比如客戶端/順序/等)通過一些狀態改變的打算。

根據您所處的狀態,您的對象可能會發生不同的事情,這可能意味着坐在數據庫表中等待用戶手動更新標誌。

在其他語言方面我知道的Grails有一個可用的workflow module。我不知道你是否會更好地移植到CF或跳槽到Grails(適合這項工作的所有工具)。

這只是一個想法,希望它有幫助。