1. 程式人生 > 實用技巧 >誰說馳騁工作流引擎沒有事務?那是以前!!!

誰說馳騁工作流引擎沒有事務?那是以前!!!

>>> hot3.png

各位浙商銀行:

事務問題一直是浙商銀行客戶反覆提出尚未解決的問題,經過與浙商銀行的同事一起討論,我們把流程引擎的底層進行了一些改造,讓其支援事務,並且做出如下測試案例,請各位同事與客戶進行評估與測試。

關於bp架構的事務綜述

馳騁的bp框架所有執行update,delete,insert 的sql ,都是通過DBAccess.RunSQL()這個方法執行的,不管是直接執行的sql,還是實體類執行的增刪改查的sql。

所以該問題的解決重點就是DBAccess.RunSQL()這個方法。

執行SQL 部分:

正常執行(驗證通過):

aa3f9fa51a03049e0b4ec2bf1475c3058ad.jpg

程式碼如下

String bussID=

"zhoupeng";

//開始事務.

DBAccess.DoTransactionBegin(bussID);

String sql="UPDATE Port_Emp Set Name='admin1' where no='admin' ";

DBAccess.RunSQL(sql);

DBAccess.DoTransactionCommit(buessID); //提交事務.

執行後回滾(驗證通過)

程式碼

b27c2589c5235f274a640c90c5c1ecd5767.jpg

<%

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;

%>

實體類更新部分

正常執行更新(測試通過)

267b5898507793a254f2f754e4264527b47.jpg

執行後回滾 (測試通過)

4751b0e6f6638fef4990fc37f760f17447a.jpg

流程引擎的重要過程

在流程引擎的操作中,我們列出瞭如下方法對事務有一定的要求。

建立workid(測試通過)

正常建立

程式碼如下:

b67cb65626f0ea75f94a3121b51c1dadfb8.jpg

首先刪除:

delete from ND301Rpt

delete from wf_generworkflow

執行後代碼:

1eb7c8db125e599124fa5ffe01c535f8445.jpg

f47a91e8fa7d9a9a3fef5320fa9b3d0d2c5.jpg

執行兩次沒有錯誤。

撤銷建立

程式碼如下:

c588a4e396192ef5e130d60e7fbf62ea18d.jpg

先執行刪除後的效果:

c1ea378271c84bd9fd566e7b27f9811c7af.jpg

多次重新整理無資料,與上圖一樣,說明回滾成功:

執行傳送(測試通過)

錯誤傳送(沒有指定接受人的情況):

原始碼:

46142f03706da03a56006683dade4149cd7.jpg

這時候,死鎖產生,因為沒有釋放連線,kill 99; 改造程式碼實現如下步驟。

05252a0dddb4ac8fb3ecae1969d2923d9c6.jpg

改造後的程式碼:

d8b14f81c0b84df0f7e0be10c7b7b3c11b3.jpg

控制檯已經輸出了異常的訊息,如控制檯圖。

abe882cfd0a470323af376b9321247877bd.jpg

流程狀態,仍然是空白狀態:

a881d1ca25d10cde882bdf70af113cb2f45.jpg

多次執行資料仍然與上圖相同,說明已經執行了回滾。

改造後,增加了接收人程式碼,如下圖:

79c0326dd52778738ea9472d5749a76a6f5.jpg

正常傳送:

程式碼如下:

4bf754a5ac6836586e5364c87882698b693.jpg

提示資訊正常:

e6561d33c6fa352d9e3f0b992021f67184a.jpg

撤銷傳送:

首先執行刪除語句:

f3f379ee3d6b1dde42dfec9d8df9713316f.jpg

編碼如下:

5328381c5ae09a9a097b24bc213114a43e4.jpg

可以完整執行,執行後,查詢應該沒有資料,就符合預期。

4e80afc73dc08133f02075127765e7d671d.jpg

想了解ccflow的更多新功能,關注馳騁工作流引擎官網ccflow.org

轉載於:https://my.oschina.net/ccflow/blog/2994099