前言
Ejb事物其实就跟我们数据库中学的时候是一样,事物的回滚,他所具有的特性。在前面的文章中我介绍过关于在javaEE中事物的概念,http://blog.csdn.net/dtttyc/article/details/78722773,链接里面是讲解jdbc和事物的概念,在这次的博客中我们讲的是一个宏观的Ejb的事物,然后再连接到我们的链接中间中讲的另一种形式的组件事务
What Ejb事物
我们有的时候会发现出现异常并且事物也没有正常的回滚,最终导致事物的不一致性,所以我们如果才可以让他会滚保证数据的一致性,EJB事物就是解决这个问题的。在Ejb事物中我们分为两种。1容器管理事物,2bean管理事物
bean我们在最初的时候可以分为会话bean,消息bean,实体bean,会话和消息都可以在管理事物中,而实体bean不可以在管理事物中
容器管理服务(CMt ,Container-Managed Transaction)
容器管理服务就是开发人员不用管事物,容器都为开发人员做好了功能,例如启动一个事物,每一个方法都有事物,并一个方法不可以有多个事物存在。由于很多事情cmt都替我们做了,所以我们不需要用commit,begin,abort等语句,所以使用的时候会很方便
容器管理事物的回滚
1如果产生系统异常,那么容器将自动回滚
2由于EJBException作为系统异常,他继承RuntimeException,所以当一个继承RuntimeException的时候Ejb容器会自动回滚
3通过调用EJBContext接口SetRollbackOnly方法,bean方法通知容器回滚该事物
实现过程
1.Ejb容器自动拦截客户请求
2Ejb使用begin语句调用底层事物系统
3这个时候事物已经启动了,当组件业务操作相当于是在事物的包含范围在
4一旦发生异常,ejb组件会通知ejb的容器来实现回滚
5Ejb容器为主要角色,他使用commit或abort语句调用底层事物系统
EJb事物属性的取值
1 Require:该属性是为了标注方法或者组件是是否一直在事物中运行,如何组件是在事物中则运行,如果有一个新组件则让他在一个新的事物运行
2 Requires_New:他总是在新开启的事物中运行,如果这个时候有一个新的则我们可以把原来的事物挂起,然后让开启另一个事物,当这个事物结束的时候,我们再把挂起的事物放下运行,当我们想让事物的回滚不影响客户端的时候可以使用这个Request New
3 Supports:如果某个EJB组件使用了Supports 事务属性,则只有调用它的客户已经启用了事务时,在没有事物的环境下不会开启一个事物
4 Mandatory :Mandatory事物属性要求调用Ejb组件的客户必须是在事务中,如果是非事物的调用则会抛出异常,所以Mandatory是非常安全的。所以他可以组件一定在事务中,并且Mandatory不会像Support一样会自己启动事务
5 NotSupport :如果使用了NotSupport属性,那么他就不会使用事物,如果调用者使用了向关联的事物调用方法,容器就会停止事务,
6 Never :如果ejb组件使用naver事物属性,他就不可以调用事物属性,所以如果调用有事物属性,那么会暂停服务,然后抛出异常
总结
这次学习感觉Ejb不亏是核心什么东西都能跟他挂钩,而且ejb的容器概念也是非常棒!