关于J2EE事务的NotSupported和Supports

03-08-15 AreYouOK?
SUN的教程上如是说:

////////////////////////////////////////////////////////////////

NotSupported

如果客户端在一个运行的事务中调用企业Bean的方法,这个容器在调用该方

法以前挂起客户端事务。方法执行完后,容器重新开始客户端的事务。

如果客户端不关联事务,容器在方法运行以前不会开始一个新的事务。为不需要事务的方法使用NotSupported属性。因为事务包括整个过程,这个属性可以提高性能。

Supports

如果客户端在一个运行的事务中调用企业Bean的方法,这个方法在客户端的事务中执行,如果这个客户端不关联一个事务,容器运行该方法前也不会开始一个新的事务。因为该属性使方法的事务行为不确定,你应该谨慎使用Supports属性。

///////////////////////////////////////////////////////////////

我对这句不太理解:“因为该属性使方法的事务行为不确定,你应该谨慎使用Supports属性。”

为什么?我觉得好像NotSupported才会比较不确定,因为它可能挂起一个事务。

比如方法A为required,方法B为NotSupported,方法A中调用方法B,方法A在调用B的时候已经锁住了一个表,方法B如果又要读写这个表不会死锁吗?或者挂起事务的时候会放弃锁,那别的线程不会读出脏数据吗?

Supports又如何会导致不确定性?

    

张无云
2003-08-15 16:36
我觉得sun的教材的意思是

如果一个Bean的事务属性设置为support的时候,这个Bean是否在事务中运行是不确定的,随着客户端是否关联事务。就是说在可能事务运行也可能不在事务中运行,这样Bean方法执行结果是不确定,可能不唯一吧。

如果为NotSupport的时候,反正Bean不在事务中运行,这样执行结果是确定的。

adiange
2003-08-16 08:38
gz

AreYouOK?
2003-08-16 09:01
我到是觉得NotSupported和RequeiredNew很容易导致一个线程自己把自己锁住,要小心使用。设置事务级别根本就不能是一个白盒过程。

Supports我想不出会有什么重大问题

AreYouOK?
2003-08-16 09:02
更正

》设置事务级别根本就不能是一个白盒过程。

设置事务级别根本就不能是一个黑盒过程。

猜你喜欢
2Go 1 2 下一页