2017-10-10 93 views
1

我正在研究如何構建一個通用應用程序或微服務來啓用構建以工作流爲中心的應用程序。我已經完成了一些關於框架的研究(見下文),最有前途的候選人很難依賴RDBMS來存儲與JPA註釋實體相結合的工作流和過程狀態。在我看來,這會損害設計一個通用的,數據驅動的工作流微服務的可能性。通過以JSON或XML格式存儲數據對象和規則,似乎可以在MondoDB或Cassandra等NoSQL解決方案上構建真正的通用工作流系統。這些將允許執行代碼來執行類型或模式,同時使用一個或兩個簡單的Java對象來檢索和保存實體。正如我所看到的,這可以使單個應用程序作爲控制器部署在不同域的模型 - 視圖對中,無需修改(無可否認,該界面提供了非常聰明的界面)。NoSQL支持BPM的成熟Java工作流引擎嗎?

我試圖找到支持NoSQL後端的工作流引擎/ BPM框架。我找到的最接近的是Activiti-Neo4J,這似乎是一個廢棄的項目,啓用了Activity和Neo4J之間的連接器。

是否有Java Work Engine/BPM框架支持NoSQL後端並在不需要特定POJO實體的情況下概括數據對象?

如果我放棄我的理想,神奇的一般解決方案,我可能會選擇一個框架,如jBPMActivi,因爲它們具有很好的功能集並且已經成熟。在試圖找到其他候選人時,我發現了一個名副其實的廢棄項目墳墓,如this one on Java-Source.net

+0

如果您選擇downvote,請發表評論。如果有什麼方法可以改善我的問題,我想知道。我知道https://stackoverflow.com/help/on-topic建議不要問圖書館建議的問題,但事實是(1)StackOverflow中的這些問題首先幫助我研究這個問題,並且(2)任何這個問題的答案可以幫助我恢復我的搜索,因爲我已經死了。 – sadakatsu

回答

0

Activiti項目的設計人員也意識到了你所說的問題,但知道實現這樣的靈活性是可以重新編寫的,而這種靈活性應該從一開始就被設計到項目中。正如您在下面提供的鏈接中所看到的,問題在於除了關係數據庫之外,缺乏接口來編寫不同的實現。隨着版本6,他們繼續前進,撕掉了bandaid,並用一組接口爲不同的實現(認爲Neo4J,MongoDB或任何其他持久性技術,你喜歡)可以編寫和插入。

在在下面的鏈接文章中,他們提供了一些簡單的內存中實現上述接口的代碼示例。看起來很酷,聽起來也許正是你想要的。

https://www.javacodegeeks.com/2015/09/pluggable-persistence-in-activiti-6.html

0

我想,爲什麼工作流引擎往往是基於RDBMS的原因不是數據庫模式,但更多的組合到一個事務安全的數據存儲。 事務健壯性是工作流引擎的一個重要因素,特別是對於複雜工作流程中典型的長時間運行或嵌套事務。 所以,也許這就是爲什麼大多數引擎(如activi)不關注數據驅動方法的原因之一。 (我不是在談論這裏的數據複製,在大多數情況下,NoSQL數據庫覆蓋了這些數據複製)

如果您看一下Imixs-Workflow Project,您會發現一種基於Java Enterprise的不同方法。該引擎使用通用數據對象,該對象可以使用任何類型的可序列化的數據值。使用Lucene Search技術解決了數據檢索問題。每個對象都被翻譯成具有每個項目的名稱/值對的虛擬文檔。這樣可以輕鬆搜索已處理的業務數據,也可以查詢狀態信息或流程所有者等結構化工作流數據。所以這是一個可能的解決方案。

除此之外,您始終可以選擇將業務數據存儲到NoSQL數據庫中。這與正在運行的流程實例的工作流數據無關,只要將兩個對象鏈接在一起即可。 回到事務健壯性的方面,將對NoSQL數據存儲的引用存儲到流程實例中是一個好主意,這是事務感知。再看看here

所以唯一可以解決的問題是,事務上下文從EJB/JPA同步到'外部'NoSQL數據庫非常困難。例如:當您的數據成功保存到NoSQL數據存儲(例如Casnadra)時,您將如何處理,但工作流引擎的事務失敗並觸發角色後退?