zoukankan
html css js c++ java
工作流中对于事务处理的思考
由于这个engine,需要考虑到COM+/ASP.NET/winform+Webservice,尤其是前者,业务系统的处理,和engine的处理,在事务上是否需要保持一个?咨询了一下ms,答案是不需要。不处理事务,而是按照错误来处理。所以,我写了一段伪码,业务单据的程序,这么修改应该就可以了吧!
public
void
bill.Save()
{
bool
enginesuccess
=
true
;
bool
billsuccess
=
true
;
try
{
db.BeginTransaction();
try
{
WorkflowEngine engine
=
WorkflowEngine.Create();
enginesuccess
=
engine.TransferSomeData(bill.SomeMethod());
//
把数据传递到engine的db中
}
catch
(Exception ex)
{
enginesuccess
=
false
;
//
false可能是异常造成的,也可能是TransferSomeData方法返回的
}
bill.Save();
db.Commint();
}
catch
(Exception ex)
{
billsuccess
=
false
;
//
单据保存失败了
}
if
(
false
==
billsuccess
&&
false
==
enginerror)
{
//
单据保存失败,工作流engine也失败
db.Rollback();
//
业务单据回滚
engine.CancelTransferSomeDataFromEngineDatabase();
//
引擎回滚
MessageBox.Show(“无法启动工作流实例!请系统管理员进行处理!”);
}
else
if
(
true
==
billsuccess
&&
false
==
enginesuccess)
{
//
单据保存成功,工作流engine失败
//
db.Rollback();这句是否需要加上?需要处理吗?
engine.CancelTransferSomeDataFromEngineDatabase();
//
引擎回滚
MessageBox.Show(“无法启动工作流实例!请系统管理员进行处理!”);
}
else
if
(
false
==
billsuccess
&&
true
==
enginesuccess)
{
//
单据保存失败,工作流engine成功
db.Rollback();
//
单据回滚
engine.CancelTransferSomeDataFromEnginDatabase();
//
引擎回滚
}
}
btw,edit new post的时候,page打开的速度好慢。。。
查看全文
相关阅读:
如何优雅地关闭资源
JMeter使用教程2——MySQL压测
JMeter使用教程
Redis系列(五):消息队列
Redis系列(四):地理信息
Redis系列(三):Bitmaps和HyperLogLog
Redis系列(二):常用操作
Redis系列(一):安装
linux命令学习_实验楼(总结)
【转】Linux中常用的tar解压打包命令语法介绍
原文地址:https://www.cnblogs.com/juqiang/p/25607.html
最新文章
【LeetCode】1290. 二进制链表转整数
【LeetCode】19. 删除链表的倒数第N个节点
【LeetCode】203. 移除链表元素
【LeetCode】剑指 Offer 18. 删除链表的节点
【LeetCode】206. 反转链表
C++引用计数设计与分析(解决垃圾回收问题)
C++深拷贝与浅拷贝
Windows核心编程——进程间通信之文件内存映射
Windows核心编程——进程间通信之dll共享段
Windows核心编程——进程间通信之WM_COPYDATA
热门文章
CTF—攻防练习之ssh服务渗透(反弹shell监听和暴力ssh破解)
Windows核心编程——进程的基本概念以及创建和退出
Windows核心编程——MFC下注册表操作
Windows核心编程——MFC下INI文件操作
Windows核心编程——MFC DLL
Windows核心编程——dllmain和dll劫持
Windows核心编程——动态库的加载与导出
String类对象相加时做了什么
jvm调优神器——arthas
jvm调优的几种场景
Copyright © 2011-2022 走看看