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

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

各位浙商银行:

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

关于bp架构的事务综述

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

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

执行SQL 部分:

正常执行(验证通过):

clip_image002

代码如下

String bussID="zhoupeng";

//开始事务.

DBAccess.DoTransactionBegin(bussID);

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

DBAccess.RunSQL(sql);

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

执行后回滚(验证通过)

代码

clip_image004

<%

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;

%>

实体类更新部分

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

clip_image006

执行后回滚 (测试通过)

clip_image008

流程引擎的重要过程

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

创建workid(测试通过)

正常创建

代码如下:

clip_image010

首先删除:

delete from ND301Rpt

delete from wf_generworkflow

执行后代码:

clip_image012

clip_image014

执行两次没有错误。

撤销创建

代码如下:

clip_image016

先执行删除后的效果:

clip_image018

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

执行发送(测试通过)

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

源代码:

clip_image020

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

clip_image022

改造后的代码:

clip_image024

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

clip_image026

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

clip_image028

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

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

clip_image030

正常发送:

代码如下:

clip_image032

提示信息正常:

clip_image034

撤销发送:

首先执行删除语句:

clip_image036

编码如下:

clip_image038

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

clip_image040

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

执行退回(未测试)

原文地址:https://www.cnblogs.com/mengjuan/p/10185680.html