驰骋工作流引擎,表单引擎工作事务单元测试报告
各位浙商银行:
事务问题一直是浙商×××反复提出尚未解决的问题,经过与浙商银行的同事一起讨论,我们把流程引擎的底层进行了一些改造,让其支持事务,并且做出如下测试案例,请各位同事与客户进行评估与测试。
关于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); //提交事务.
执行后回滚(验证通过)
代码
<%
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; 改造代码实现如下步骤。
改造后的代码:
控制台已经输出了异常的消息,如控制台图。
流程状态,仍然是空白状态:
多次执行数据仍然与上图相同,说明已经执行了回滚。
改造后,增加了接收人代码,如下图:
正常发送:
代码如下:
提示信息正常:
撤销发送:
首先执行删除语句:
编码如下:
可以完整执行,执行后,查询应该没有数据,就符合预期。