1.什么是事务
为了保证数据的一致性
begin transaction
debit checking account
credit saving account
update history log
end trasaction
其中任意的三个操作要么都执行,要么都不执行,否则就不能保证数据的一致性。
2.容器管理的事务
在容器管理的enterprise bean, EJB 容器设置事务的边界。容器管理的事务可以被
用到任何类型的bean(session bean,entity bean,message-driven bean)。容器管理事务
可以简化开发,开发中无需明确包含开启事务和关闭事务代码。
容器事务在bean方法调用前开启,在bean方法结束前结束。一个方法是不能嵌套事务和
包含多个事务。
不是所有的bean方法都要求是事务管理的,在部署bean时我们可以通过设置事务的属性
配置哪些方法是不容器事务管理的。
2.1 如果对象A的a方法调用对象B的b方法,如果a方法属于事务,那么b方法是再开启个新事务
还是在原来的事务中呢?这个依赖于对象B的事务属性设置。
Required : 当一个方法被客户调用,这个客户在事务中运行,那么这个方法也在事务
中运行,否则容器会在这个方法运行前启动事务。
RequiredNew : 容器会始终为这个方法开启一个新的事务,如果客户端是在事务中,那
么容器会悬挂客户端的事务执行,开启一个新的事务为这个方法,等结束后再继续客户端的
事务运行。
Mandatory:bean的方法必须在客户端的事务中运行,否则容器会抛出异常。
NotSupported :如果客户端在事务中运行时调用bean的方法,容器会悬挂事务的执行,
等bean方法执行完后再继续刚才的事务。
Supports : 如果客户端是在事务中运行时调用bean的方法,那么这个方法也在事务中运行,
如果客户端没有在事务中运行,那么容器也不会开启一个事务。
Never :bean的方法不能在事务中运行,否则会抛出异常。
为了保证数据的一致性
begin transaction
debit checking account
credit saving account
update history log
end trasaction
其中任意的三个操作要么都执行,要么都不执行,否则就不能保证数据的一致性。
2.容器管理的事务
在容器管理的enterprise bean, EJB 容器设置事务的边界。容器管理的事务可以被
用到任何类型的bean(session bean,entity bean,message-driven bean)。容器管理事务
可以简化开发,开发中无需明确包含开启事务和关闭事务代码。
容器事务在bean方法调用前开启,在bean方法结束前结束。一个方法是不能嵌套事务和
包含多个事务。
不是所有的bean方法都要求是事务管理的,在部署bean时我们可以通过设置事务的属性
配置哪些方法是不容器事务管理的。
2.1 如果对象A的a方法调用对象B的b方法,如果a方法属于事务,那么b方法是再开启个新事务
还是在原来的事务中呢?这个依赖于对象B的事务属性设置。
Required : 当一个方法被客户调用,这个客户在事务中运行,那么这个方法也在事务
中运行,否则容器会在这个方法运行前启动事务。
RequiredNew : 容器会始终为这个方法开启一个新的事务,如果客户端是在事务中,那
么容器会悬挂客户端的事务执行,开启一个新的事务为这个方法,等结束后再继续客户端的
事务运行。
Mandatory:bean的方法必须在客户端的事务中运行,否则容器会抛出异常。
NotSupported :如果客户端在事务中运行时调用bean的方法,容器会悬挂事务的执行,
等bean方法执行完后再继续刚才的事务。
Supports : 如果客户端是在事务中运行时调用bean的方法,那么这个方法也在事务中运行,
如果客户端没有在事务中运行,那么容器也不会开启一个事务。
Never :bean的方法不能在事务中运行,否则会抛出异常。