驰骋工作流引擎,表单引擎工作事务单元测试报告

各位浙商银行:

事务问题一直是浙商×××反复提出尚未解决的问题,经过与浙商银行的同事一起讨论,我们把流程引擎的底层进行了一些改造,让其支持事务,并且做出如下测试案例,请各位同事与客户进行评估与测试。

关于bp架构的事务综述

驰骋的bp框架所有执行update,delete,insert 的sql ,都是通过DBAccess.RunSQL()这个方法执行的,不管是直接执行的sql,还是实体类执行的增删改查的sql。

所以该问题的解决重点就是DBAccess.RunSQL()这个方法。

执行SQL 部分:

正常执行(验证通过):

驰骋工作流引擎,表单引擎工作事务单元测试报告_第1张图片

代码如下

String bussID="zhoupeng";

//开始事务.

DBAccess.DoTransactionBegin(bussID);

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

DBAccess.RunSQL(sql);

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

执行后回滚(验证通过)

代码

驰骋工作流引擎,表单引擎工作事务单元测试报告_第2张图片

<%

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;

%>

实体类更新部分

正常执行更新(测试通过)

驰骋工作流引擎,表单引擎工作事务单元测试报告_第3张图片

执行后回滚 (测试通过)

驰骋工作流引擎,表单引擎工作事务单元测试报告_第4张图片

流程引擎的重要过程

在流程引擎的操作中,我们列出了如下方法对事务有一定的要求。

创建workid(测试通过)

正常创建

代码如下:

驰骋工作流引擎,表单引擎工作事务单元测试报告_第5张图片

首先删除:

delete from ND301Rpt

delete from wf_generworkflow

执行后代码:

驰骋工作流引擎,表单引擎工作事务单元测试报告_第6张图片

驰骋工作流引擎,表单引擎工作事务单元测试报告_第7张图片

执行两次没有错误。

撤销创建

代码如下:

驰骋工作流引擎,表单引擎工作事务单元测试报告_第8张图片

先执行删除后的效果:

驰骋工作流引擎,表单引擎工作事务单元测试报告_第9张图片

多次刷新无数据,与上图一样,说明回滚成功:

执行发送(测试通过)

错误发送(没有指定接受人的情况):

源代码:

驰骋工作流引擎,表单引擎工作事务单元测试报告_第10张图片

这时候,死锁产生,因为没有释放连接,kill 99; 改造代码实现如下步骤。

驰骋工作流引擎,表单引擎工作事务单元测试报告_第11张图片

改造后的代码:

驰骋工作流引擎,表单引擎工作事务单元测试报告_第12张图片

控制台已经输出了异常的消息,如控制台图。

驰骋工作流引擎,表单引擎工作事务单元测试报告_第13张图片

流程状态,仍然是空白状态:

驰骋工作流引擎,表单引擎工作事务单元测试报告_第14张图片

多次执行数据仍然与上图相同,说明已经执行了回滚。

改造后,增加了接收人代码,如下图:

驰骋工作流引擎,表单引擎工作事务单元测试报告_第15张图片

正常发送:

代码如下:

驰骋工作流引擎,表单引擎工作事务单元测试报告_第16张图片

提示信息正常:

驰骋工作流引擎,表单引擎工作事务单元测试报告_第17张图片

撤销发送:

首先执行删除语句:

驰骋工作流引擎,表单引擎工作事务单元测试报告_第18张图片

编码如下:

驰骋工作流引擎,表单引擎工作事务单元测试报告_第19张图片

可以完整执行,执行后,查询应该没有数据,就符合预期。

驰骋工作流引擎,表单引擎工作事务单元测试报告_第20张图片

执行流程发送后的撤销(未测试)

执行退回(未测试)