EJB3.0事务管理

来源:互联网 发布:苹果5可以用移动4g网络吗 编辑:程序博客网 时间:2024/06/13 13:55


          EJB3事务管理分为两种:CMT(容器管理事务)和BMT(Bean管理事务),只有SessionBean和MessageDrivenBean才支持CMT和BMT。SessionBean默认是受CMT管理,当然也可以在代码中通过注解显示声明:

          @TransactionManagement(TransactionManagementType.CONTAINER)

 

         在CMT中,可以通过注解@TransactionAttribute()来设置类或者方法的事务策略。CMT的事务模式有下面几个:


           默认的是Required。对于Session Bean,支持所有6种属性,但对于Message Driven Bean,只支持其中两种属性(REQUIRED、NOT_SUPPORTED)。 

          在SessionBean中,通过自动抛出RuntimeException来让容器自动回滚事务。在SessionBean的某个方法中,如果该方法中,操作数据库的语句会出现错误,只有在该方法执行完毕后,才会抛出异常,而在执行merge或persist等语句时,不会立即抛出异常,因此,这种情况下,在该方法内部,捕捉不到数据库操作的异常,应该在调用该方法的代码中捕捉异常。如果要在该方法中,捕捉异常,则应该执行entityManager.flush()语句,或者执行query.executeUpdate()语句,执行完该语句,如果有错误,则立即抛出异常,这样就可以在该方法中捕获异常。在捕获该异常之后,容器仍然能够自动回滚事务。

         待续..