Orchestration中的Transaction,Exception,Compensation以及Throw Exception Shape

前几天做了一个例子尝试了一把,结合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根据名称来调用。

不正确的地方,请大家指正。

鸡尾虾的壳

你可能感兴趣的:(transaction)