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

各位浙商银行:

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

关于bp架构的事务综述

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

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

执行SQL 部分:

正常执行(验证通过):

驰骋工作流引擎,表单引擎工作事务单元测试报告_软件研发

代码如下

String bussID="zhoupeng";

//开始事务.

DBAccess.DoTransactionBegin(bussID);

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

DBAccess.RunSQL(sql);

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

执行后回滚(验证通过)

代码

驰骋工作流引擎,表单引擎工作事务单元测试报告_软件设计_02

<%

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;

%>

实体类更新部分

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

驰骋工作流引擎,表单引擎工作事务单元测试报告_软件设计_03

执行后回滚 (测试通过)

驰骋工作流引擎,表单引擎工作事务单元测试报告_软件设计_04

流程引擎的重要过程

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

创建workid(测试通过)

正常创建

代码如下:

驰骋工作流引擎,表单引擎工作事务单元测试报告_软件研发_05

首先删除:

delete from ND301Rpt

delete from wf_generworkflow

执行后代码:

驰骋工作流引擎,表单引擎工作事务单元测试报告_软件研发_06

驰骋工作流引擎,表单引擎工作事务单元测试报告_软件设计_07

执行两次没有错误。

撤销创建

代码如下:

驰骋工作流引擎,表单引擎工作事务单元测试报告_软件设计_08

先执行删除后的效果:

驰骋工作流引擎,表单引擎工作事务单元测试报告_软件研发_09

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

执行发送(测试通过)

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

源代码:

驰骋工作流引擎,表单引擎工作事务单元测试报告_软件研发_10

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

驰骋工作流引擎,表单引擎工作事务单元测试报告_软件研发_11

改造后的代码:

驰骋工作流引擎,表单引擎工作事务单元测试报告_软件研发_12

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

驰骋工作流引擎,表单引擎工作事务单元测试报告_软件设计_13

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

驰骋工作流引擎,表单引擎工作事务单元测试报告_软件研发_14

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

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

驰骋工作流引擎,表单引擎工作事务单元测试报告_软件设计_15

正常发送:

代码如下:

驰骋工作流引擎,表单引擎工作事务单元测试报告_软件研发_16

提示信息正常:

驰骋工作流引擎,表单引擎工作事务单元测试报告_软件设计_17

撤销发送:

首先执行删除语句:

驰骋工作流引擎,表单引擎工作事务单元测试报告_软件研发_18

编码如下:

驰骋工作流引擎,表单引擎工作事务单元测试报告_软件设计_19

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

驰骋工作流引擎,表单引擎工作事务单元测试报告_软件设计_20

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

执行退回(未测试)