誰說馳騁工作流引擎沒有事務?那是以前!!!
各位浙商銀行:
事務問題一直是浙商銀行客戶反覆提出尚未解決的問題,經過與浙商銀行的同事一起討論,我們把流程引擎的底層進行了一些改造,讓其支援事務,並且做出如下測試案例,請各位同事與客戶進行評估與測試。
關於bp架構的事務綜述
馳騁的bp框架所有執行update,delete,insert 的sql ,都是通過DBAccess.RunSQL()這個方法執行的,不管是直接執行的sql,還是實體類執行的增刪改查的sql。
所以該問題的解決重點就是DBAccess.RunSQL()這個方法。
執行SQL 部分:
正常執行(驗證通過):
程式碼如下
String bussID=
//開始事務.
DBAccess.DoTransactionBegin(bussID);
String sql="UPDATE Port_Emp Set Name='admin1' where no='admin' ";
DBAccess.RunSQL(sql);
DBAccess.DoTransactionCommit(buessID); //提交事務.
執行後回滾(驗證通過)
程式碼
<%
String bussID="zhoupeng"; //定義事務的ID.
//開始事務.
DBAccess.DoTransactionBegin(bussID);
String sql="UPDATE Port_Emp Set Name='admin1' where no='admin' ";
DBAccess.RunSQL(sql);
DBAccess.DoTransactionRollback(bussID); //回滾事務.
return;
//DBAccess.DoTransactionCommit(buessID); //提交事務.
//return;
%>
實體類更新部分
正常執行更新(測試通過)
執行後回滾 (測試通過)
流程引擎的重要過程
在流程引擎的操作中,我們列出瞭如下方法對事務有一定的要求。
建立workid(測試通過)
正常建立
程式碼如下:
首先刪除:
delete from ND301Rpt
delete from wf_generworkflow
執行後代碼:
執行兩次沒有錯誤。
撤銷建立
程式碼如下:
先執行刪除後的效果:
多次重新整理無資料,與上圖一樣,說明回滾成功:
執行傳送(測試通過)
錯誤傳送(沒有指定接受人的情況):
原始碼:
這時候,死鎖產生,因為沒有釋放連線,kill 99; 改造程式碼實現如下步驟。
改造後的程式碼:
控制檯已經輸出了異常的訊息,如控制檯圖。
流程狀態,仍然是空白狀態:
多次執行資料仍然與上圖相同,說明已經執行了回滾。
改造後,增加了接收人程式碼,如下圖:
正常傳送:
程式碼如下:
提示資訊正常:
撤銷傳送:
首先執行刪除語句:
編碼如下:
可以完整執行,執行後,查詢應該沒有資料,就符合預期。
想了解ccflow的更多新功能,關注馳騁工作流引擎官網ccflow.org
轉載於:https://my.oschina.net/ccflow/blog/2994099