【问题标题】:Transactions on Managed Beans托管 Bean 上的事务
【发布时间】:2015-10-06 03:27:39
【问题描述】:

在我的时区下午好。

我正在开发一个使用 JAVA EE6 的 WEB 应用程序,更准确地说是使用 JPA、JSF 和 EJB。在 JSF 页面中,我调用一种方法将数据保存到数据库中。在托管 Bean 中,我有以下方法:

 @ManagedProperty(value = "#{jndi['ejb/objectEAO']}")
 private ObjectEAO objectEAO;

 public void save(){
      ...
     for(Type1 type : list){
         if(..){
             ....
            objectEAO.save(type);
          }
      }
  } 

我的问题是: 默认情况下保存方法是事务性的吗?如果第三次插入由于某种原因失败,是否所有进程都回滚? objectEAO 是一个 EJB。

提前致谢。 最好的问候

【问题讨论】:

    标签: jsf jpa ejb managed-bean jta


    【解决方案1】:

    EJB bean 中的save() 方法是事务性的(假设 CMT - 容器托管事务),而不是 JSF 托管 bean 中的方法。因此,如果一次插入失败,它只会回滚该一次操作,而不会影响之前的插入。

    【讨论】:

    • 你确定吗?我本来希望在调用 ObjectEAO.save() 时有一个事务处于活动状态,更改并登记在该事务中,如果没有,那么它们都将合并为一个事务,该事务在 ObjectEAO.save() 时提交回归?
    • @hugh 在 JSF 托管 bean 中事务不太可能已经处于活动状态(除非使用 Open Session In View 模式)。这意味着托管 bean 只是一个在循环中调用 EJB 服务的客户端,如果使用 CMT(EJB 的默认行为),则容器在服务调用之前启动事务并在最后关闭它。没有一种机制可以将所有调用加入到一个事务中。
    猜你喜欢
    • 2012-12-10
    • 1970-01-01
    • 2014-04-30
    • 2012-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-09
    相关资源
    最近更新 更多