`
chii
  • 浏览: 20412 次
社区版块
存档分类
最新评论

【转】使用EJB3的事务管理功能

    博客分类:
  • java
阅读更多

我们一般编程都会使用到两种模型实现事务管理:
1.         编程式事务
手工调用jdbc的connection事务方法和使用JTA接口都属于编程式开发,在EJB中叫BMT(Bean管理事务)。
    JTA最重要的接口就是UserTransaction和它的六个方法-begin,commit,rollback,getStatus,setRollbackonly,setTransactionTimeout。
       关于JTA事务和JDBC事务的使用参考:
http://hi.baidu.com/coolcat%5Fpolice/blog/item/57af71123e01c6cbc2fd78a6.html
2.         宣告式事务
EJB的CMT(容器管理事务)就是一个宣告式事务。利用容器,当应用出现失败或异常时,它保证了数据库的完整性。最常见的事务是定义在session bean 的方法上,方法中所有的数据库操作只有在方法正常退出时才会提交,如果方法抛出未捕获的异常,事务管理将回滚所有变更。
@TransactionAttribute 注释一个方法用作定义一个需要事务的方法。它可以有以下参数(TransactionAttributeType.参数名):
Required:如果Context中有事务就加入,没有就自己创建一个。(最常用设置)
Mandatory:永远加入一个事务。如果当前Context没有事务,抛出异常。(那些不打算自己负责rollback事务的方法,必须加入到别人的事务,由别人来控制rollback)
RequiresNew:永远新建一个事务。(那些不管别人如何,自己必须提交事务的方法,比如审计信息是一定要写的)
Supports:如果有事务就加入,如果没有就算了。永远不会创建新事务。(一般用于只读方法,不会主动创建事务,但如果当前有事务就加入,以读到事务中未提交的数据)
NotSupported:永远不使用事务,如果当前有事务,挂起事务。(那些有可能抛异常但异常并不影响全局的方法)
Never:不能在有当前事务的情况下调用本方法。
可见,Required是默认的设置,Supports是只读方法的最佳选择。
注意,EJB里,想rollback只能sessionContext.setRollbackOnly(),或者抛出EJBException。(EJB3还可以annotation设置某些自定义Exception可以触发rollback)。另外,不需要远程调用的接口就不需配置EJB注释,但最好都显式标出。
在Spring里,同样只会回滚 unchecked exception(RuntimeExcption及子类),而checked exception(Exception及子类)是不会rollback的,除非你特别声明。
简单使用的话,直接在service层里面需要rollback的地方throw new RuntimeException("异常信息");
事务隔离级别
ReadUncommited:本事务可以看到另一事务未提交的数据。脏读。
ReadCommited:本事务只可以看到另一事务已提交的数据。不可重复读。
RepeatableRead:可重复读。在一个事务内,第一次读到的数据,在本事务没有提交前,无论另一个事务如何提交数据,本事务读到的数据都是不变的。
Serializable:串行化,同时只有一个事务能读相同的数据。
    级别越低越安全效率也越低。隔离级别需要相关资源支持,如重复读在Oracle里会降级为ReadCommited。

 

分享到:
评论

相关推荐

    EJB与事务 -详细描述EJB和事务

    在EJB中,事务管理是核心功能之一,确保了数据的一致性和完整性。事务是数据库操作的基本单元,确保一组操作要么全部成功,要么全部失败,避免数据的不一致。 事务的界定是定义事务的生命周期,包括开始、挂起、...

    EJB的事务属性

    它提供了一种模块化的方法来封装业务逻辑,使得开发人员可以专注于编写业务规则,而将并发控制、事务管理、安全性等非功能性需求交由容器处理。 EJB的事务属性是指EJB容器如何管理和控制EJB方法执行过程中的事务...

    EJB3-JBOSS7-分布式事务示例

    4. **容器管理的事务**:EJB3支持自动事务管理,可以通过`@TransactionAttribute`来定义事务的传播行为和隔离级别。 **JBoss AS7 (现为WildFly)** 是一个开源的应用服务器,它是EJB3规范的一个实现,提供了运行和...

    EJB3基础教程

    EJB3中的容器管理的事务(CMT)允许开发者无需关心事务的开始、提交或回滚,这些都由EJB容器自动处理。开发者只需在方法上添加`@TransactionAttribute`注解来指定事务的属性。 ### 6. 容器服务 EJB3提供了一系列的...

    ejb3-persistence

    这些类和接口提供了CRUD(创建、读取、更新、删除)操作,事务管理,以及查询语言JPA(Java Persistence API)的实现,如Criteria API和JPQL(Java Persistence Query Language)。 "使用说明-jar包.txt"很可能是对...

    EJB 3实战 带书签

    EJB容器提供了一组服务,如事务管理、安全性、远程访问和生命周期管理等,开发者可以很轻松地在不编写额外代码的情况下使用这些服务。此外,EJB 3还引入了无状态会话Bean和有状态会话Bean这两种类型的Bean,分别用于...

    EJB3开发Entity

    EJB3提供自动的事务管理,开发者可以通过注解来控制事务的边界,例如`@TransactionAttribute(TransactionAttributeType.REQUIRED)`。 6. **查询语言JPA QL** JPA提供了自己的查询语言——JPA Query Language...

    ejb3进阶案例

    ejb3的实体管理器提供了事务管理和懒加载等功能,大大提高了开发效率。 **3. MessageDriven Bean** MessageDriven Bean(消息驱动Bean)是ejb3中的一个特殊类型,主要用于处理JMS(Java Message Service)消息。...

    EJB3 入门经典 源码

    8. **事务管理(Transaction Management)**:EJB容器提供了自动事务管理,开发者无需关心事务的开始、提交或回滚,只需专注于业务逻辑。 9. **安全控制(Security)**:EJB3允许开发者使用角色和权限来控制对bean...

    jboss7 + EJB3

    EJB3支持声明式事务管理,开发者可以通过`@TransactionAttribute`注解来指定事务的传播行为和隔离级别。 7. **安全性** JBOSS7集成了JAAS(Java Authentication and Authorization Service),允许开发者通过`@...

    ejb3实例源代码

    6. **容器管理事务(Container-managed Transactions)**:EJB容器自动处理事务管理,开发者无需编写事务控制代码。 7. **安全性和并发控制**:EJB 3提供了内置的角色和权限管理,以及会话同步机制,确保多用户环境...

    struts2-ejb3配置

    Struts2和EJB3是两个在Java Web开发中广泛使用的框架,Struts2主要用于处理MVC模式的前端控制,而EJB3则提供企业级的服务,如事务管理、安全性和持久化等。将这两者整合在一起,可以利用EJB3的强大功能来处理复杂的...

    spring with ejb3

    2. **EJB 3事务管理**:EJB 3容器自动管理事务,通过`@TransactionAttribute`注解可以控制事务属性。 **EJB 3与Spring的安全性** 1. **Spring Security**:Spring Security提供了一套全面的身份验证和授权机制,...

    ejb3-persistence.jar

    使用EJB3的持久化功能时,需要在实体类上添加适当的注解,然后通过EntityManager进行数据库操作。 四、 ejb3-persistence.jar与其他技术的集成 ejb3-persistence.jar不仅适用于传统的Java EE应用,还可以与Spring...

    ejb3.rar_EJB3

    EJB3,全称Enterprise JavaBeans 3.0,...通过注解驱动的编程模型,EJB3简化了开发流程,同时保持了强大的功能,如事务管理、依赖注入和持久化。对于学习和理解Java EE企业级应用开发,这是一个非常有价值的实践案例。

    实战EJB 实战EJB 实战EJB

    通过将业务逻辑与基础架构关注点(如事务管理、安全性、持久性和并发控制)分离,EJB允许开发者专注于核心业务逻辑的实现,而将非功能性的复杂性交由容器来处理。 **EJB体系结构** EJB体系结构主要包括三个主要...

Global site tag (gtag.js) - Google Analytics