首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

EJB3事务传播

EJB 3 是 Java 企业版(Java Enterprise Edition,简称 J2EE)的一个关键组件,它为实现分布式系统的业务服务提供了一个可扩展的体系结构。下面是一些关于 EJB 3 事务传播的基本信息。

EJB3 事务传播

EJB 3 事务传播主要分为以下三类:

REQUIRED

这是默认的事务传播行为。在业务方法执行期间,如果有一个活跃的事务,则该事务将与业务方法共享。如果业务方法执行时没有活跃事务,则会抛出异常。

代码语言:txt
复制
Exception in component resource injection
javax.ejb.EJBException: Transaction is not active

REQUIRES_NEW

在这种事务传播行为中,新的事务将在执行业务方法时开始,而不管当前是否存在活跃的事务。如果在业务方法上提交或回滚事务,而其他事务的参与者尚未结束,则会抛出异常。

代码语言:txt
复制
Exception in transaction: Rollback complete after failure
org.jboss.ejb3.exception.EJBTransactionRolledbackException: EJB Exception occurred during commit processing, error while creating EJB transaction: javax.transaction.RollbackException: Transaction marked for rollback. Please fix failed transaction before performing this operation.

SUPPORTS

这种事务传播行为允许 EJB 组件与现有的事务分离,即使没有创建新的事务。这是最不安全的事务行为。如果当前没有创建新事务的业务方法发生异常,则会抛出异常。

代码语言:txt
复制
javax.ejb.EJBException: Could not commit EJB transaction; Nested exception is: javax.transaction.RollbackException: Transaction marked for rollback. Please fix failed transaction before performing this operation.

在选择合适的事务传播行为时,需要权衡业务的正确性和安全性。在具体实施时,还需要注意事务的隔离性和数据一致性等方面的问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • EJB3最新的EJB标准

    Spring可以部分简化EJB本地和远程调用。EJB3分消息驱动Bean、有、无状态Bean和实体Bean。分别服务于应用层和持久层。JBoss的EJB3实体Bean部分的底层核心是Hibernate。  Model层?是MVC中的M吗?Spring支持配置表现层,Model可以通过Spring配置实现。比如你可以用Spring配置Struts。EJB和表现层没有任何关系。Model和它的关系只是Model可以去调用EJB罢了。  EJB3的持久层是一个新的标准JPA。EJB3的实体Bean的变化是最大的,吸收了Hibernate的ORM工具的很多好思想。不过要注意,JPA不是Hibernate。JPA是标准,Hibernate是框架。Hibernate+Hibernate元数据+Hibernate EntryManager组合起来,就是JBoss的JPA实现方案。JPA还有很多其他实现,比如Bea的开源实现OpenJPA。  注意,它们不属于MVC的任何一个部分。EJB属于应用层和持久层。Spring虽然有自己的Spring MVC,但是本质上来说,Spring属于中间层框架。  应用EJB的标准结构是:  表现层(Struts/JSF等)+应用层(EJB中的Session Bean)+持久层(实体Bean)。  或者纯Spring的:  表现层(Struts/JSF/Spring MVC)+应用层(Spring)+持久层(ORM框架或JDBC)。  Spring+EJB的:  表现层(Struts/JSF/Spring MVC)+应用层(Spring+EJB中的Session Bean)+持久层(实体Bean/ORM框架/JDBC)。

    02

    EJB 3.0 规范的变化可以大致分成2大部分

    EJB 3.0 规范的变化可以大致分成2大部分: 1、 使用了jdk1.5中提供的 annotation 机制的编程模型。在EJB2.1中采用一些接口和部署时的描述符来完成类似的功能。  EJB的 annotations  在EJB3中所有的企业Bean都是POJO(Plan old Java object)和一些相关的描述符。用描述符可以用来定义Bean需要实现的 接口、O/R 映射时需要的信息、需要引用的资源等等。 2、 提供了一个基于Hibernate的 O/R Mapping 工具, EJB QL 发生了重大的变化。   当一个实体POJO类和EntityManager建立关系后,这个类就是可以实例化的类了,同时就时实例化上下文的一个部分。  JB3.0虽然提供了新的更简单的编程方法,但仍然保持向下兼容,EJB2.1中的部署描述符和 home/remote接口仍然有效。 目前EJB3.0支持的Annotations 包括: @Entity @Stateless @Remote @TransactionAttribute @Table @Id @Basic @Column @ManyToOne @OneToMany @ManyToMany @JoinColumn @AssociationTable

    03
    领券