关于J2EE事务的NotSupported和Supports
SUN的教程上如是说:
////////////////////////////////////////////////////////////////
NotSupported
如果客户端在一个运行的事务中调用企业Bean的方法,这个容器在调用该方
法以前挂起客户端事务。方法执行完后,容器重新开始客户端的事务。
如果客户端不关联事务,容器在方法运行以前不会开始一个新的事务。为不需要事务的方法使用NotSupported属性。因为事务包括整个过程,这个属性可以提高性能。
Supports
如果客户端在一个运行的事务中调用企业Bean的方法,这个方法在客户端的事务中执行,如果这个客户端不关联一个事务,容器运行该方法前也不会开始一个新的事务。因为该属性使方法的事务行为不确定,你应该谨慎使用Supports属性。
///////////////////////////////////////////////////////////////
我对这句不太理解:“因为该属性使方法的事务行为不确定,你应该谨慎使用Supports属性。”
为什么?我觉得好像NotSupported才会比较不确定,因为它可能挂起一个事务。
比如方法A为required,方法B为NotSupported,方法A中调用方法B,方法A在调用B的时候已经锁住了一个表,方法B如果又要读写这个表不会死锁吗?或者挂起事务的时候会放弃锁,那别的线程不会读出脏数据吗?
Supports又如何会导致不确定性?