EJB事务属性可以具有以下几个值:
Required
RequiresNew
Mandatory
NotSupported
Supports
Never
Required
如果运行事务中的客户调用企业bean的方法,则方法运行于客户的事务中。如果客户没有关联到事务中,容器会在运行入方法之前启动一个新的事务。
Required属性是CMT中企业bean所有的事务属性中隐含的事务属性。一般除非你需要重载其他的事务属性,否则不需要指定Required属性。因为事务属性是声明性的,你可以随后很简单地更改它。
RequiresNew
如果客户端运行在事务里,并且调用了企业bean的方法,容器就会执行下列步骤:
1,挂起客户端事务
2,启动一个新的事务
3,委派这个方法的调用
4,在方法结束后重新恢复客户断事务
如果客户端没有关联到一个事务中,容器就会在运行这个方法之前的启动一个新的事务。
如果你想确保这个方法总是运行在一个新的事务中,你就可以用RequiresNew属性。
Mandatory
如果运行于事务中的客户调用了企业bean的方法,方法在客户的事务中执行。如果客户没有关联到事务中,容器就会抛出TransactionRequiredException。
如果企业bean方法必须用客户事务则采用Mandatory属性。
NotSupported
如果运行在一个事务里的客户调用了企业bean的方法,容器会在调用之前中止客户事务。在调用结束后,容器会恢复客户事务。
如果客户没有关联到一个事务中,容器不会在运行到方法前启动一个新的事务。
用NotSupported属性标识不需要事务的方法。因为事务会带来更高的性能支出,所以这个属性可以提高性能。
Supports
如果运行在事务中的客户调用了企业bean方法,这个方法运行于客户事务中。如果客户没有关联到事务中,容器不会在运行这个方法之前启动一个新的事务。
因为方法的事务行为是多变的,所以你要小心使用Supports属性。
Never
如果运行在事务中的方法调用了企业bean的方法,容器会抛出RemoteException。如果客户没有关联到事务,则容器不会在运行入方法之前启动一个新的事务。