最近看《Mastering EJB》(3rd)呢,正好看到CMT的部分,其中对声明性事务管理的事务属性进行了介绍,感觉介绍的真是精辟易懂,就摘抄如下:
EJB CMT中共有6种属性:Required, RequiresNew, Supports, Mandatory, NotSupported, Never。
COM+中记得是5种:即除了Mandatory之外的那5个。
这些属性的控制粒度可以达到方法级,含义分别如下:
[1] Required:
必须运行于事务中。如果有事务已在运行,则参与;否则新建事务。
[2] RequiresNes:
总是启动新的事务。
[3] Supports:
跟随客户端的事务。如果有事务在运行,则参与;否则不要求运行于事务中。
[4] Mandatory:
要求客户端必须启动事务,否则就抛出异常给客户端。(这个属性COM+中没有)
[5] NotSupported:
不会参与到事务中,无论客户端是否启动事务。
[6] Never:
不能参与到事务中。如果客户端已经启动事务,则抛出异常给客户端。
最后给出一个示例表格,可以通俗易懂的表达出上边的各个概念:
事务属性 |
客户端的事务 |
标记属性的组件的事务 |
||
Required |
无 |
T1 |
T2 |
T1 |
RequiresNew |
无 |
T1 |
T2 |
T2 |
Supports |
无 |
T1 |
无 |
T1 |
Mandatory |
无 |
T1 |
异常 |
T1 |
NotSupported |
无 |
T1 |
无 |
无 |
Never |
无 |
T1 |
无 |
异常 |
关于事务隔离性的入门知识,可以参考我写的这篇文章:
http://interma.cnblogs.com/archive/2005/12/25/304472.html
最后,说一个无关的,尽管现在大家都在喊Without EJB,WithoutEJB,但是通过最近对EJB的学习,至少我感觉EJB(的目标)真的看上去很美。 :-)