现在的位置: 首页 > 综合 > 正文

EJB3.0事务管理

2013年10月04日 ⁄ 综合 ⁄ 共 689字 ⁄ 字号 评论关闭

          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()语句,执行完该语句,如果有错误,则立即抛出异常,这样就可以在该方法中捕获异常。在捕获该异常之后,容器仍然能够自动回滚事务。

         待续..

 

          

抱歉!评论已关闭.