Orchestration中的Transaction,Exception,Compensation以及Throw Exception Shape
Posted on 2007-04-08 15:58 鸡尾虾的壳 阅读(357) 评论(1) 编辑 收藏 举报前几天做了一个例子尝试了一把,结合MS文档以及一些牛人的blog article,总结出来的要点如下:
1. Orchestration(.odx)有transaction属性。设置方法:打开odx文件,鼠标选中中间的面板,在property中可以看到odx的所有属性,其中包含属性Transaction Type。
2. Scope有不同的层次,可以相互嵌套,每个Scope都可以有自己的Transaction Type设置。Orchestration可以认为是最Top Level的Scope。如果Parent Scope的Transaction Type值为None或者Atomic,那么其嵌套的Scope的Transaction Type必须为None。
3. Atomic Scope可以包含Compensation Block,但不能包含Exception Block。如果不设置,使用默认的Compensation Block.设置的方法是:选中Scope,右键菜单"New Compensation Block"。
4. Long Running Transaction Scope可以嵌套任意transaction type设置的Scope。可以包含任意多个Exception Bolck,可以包含1个Customal Compensation Block。
5. 每个Exception Block都必须设置Exception Object Type属性。总体有2类选择:General Exception与.net Exception。前者主要用来捕获非.net Exception。
6. Exception捕获的顺序问题:与Exception Block的order无关,最多被捕获一次。如果是.net异常,那么按照类层次最解决的原则捕获,如果没有合适的.net Exception Block,那么General Exception Block才可以捕获。如果当前Scope中没有合适的Exception Block,那么异常会向上一层次的Scope抛出。
7. Throw Exception Shape的使用:只能用在Exception Block中,用于重新抛出当前Exception Block的异常(Exception Block的Exception Object Name属性值)或者General Exception。
8. Compensation Block不会被自动调用。需要使用Compensate Shape根据名称来调用。
不正确的地方,请大家指正。
鸡尾虾的壳