关于J2EE事务的NotSupported和Supports

SUN的教程上如是说:
////////////////////////////////////////////////////////////////
NotSupported
如果客户端在一个运行的事务中调用企业Bean的方法,这个容器在调用该方
法以前挂起客户端事务。方法执行完后,容器重新开始客户端的事务。
如果客户端不关联事务,容器在方法运行以前不会开始一个新的事务。为不需要事务的方法使用NotSupported属性。因为事务包括整个过程,这个属性可以提高性能。

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

我对这句不太理解:“因为该属性使方法的事务行为不确定,你应该谨慎使用Supports属性。”
为什么?我觉得好像NotSupported才会比较不确定,因为它可能挂起一个事务。
比如方法A为required,方法B为NotSupported,方法A中调用方法B,方法A在调用B的时候已经锁住了一个表,方法B如果又要读写这个表不会死锁吗?或者挂起事务的时候会放弃锁,那别的线程不会读出脏数据吗?
Supports又如何会导致不确定性?

我觉得sun的教材的意思是

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

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

gz

我到是觉得NotSupported和RequeiredNew很容易导致一个线程自己把自己锁住,要小心使用。设置事务级别根本就不能是一个白盒过程。
Supports我想不出会有什么重大问题

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

一般查询操作用supported transaction, 更新操作用require transaction.
NotSupported和require new不推荐使用.