【问题标题】:Abort EJB transaction from JSF UI从 JSF UI 中止 EJB 事务
【发布时间】:2016-06-22 14:21:48
【问题描述】:

我正在开发一个使用以下技术的项目:Java 1.8、EJB 3、JSF (Primefaces)、Oracle、Weblogic 12.2.1

我有一个“保存”按钮,它运行一个耗时的 EJB 事务(在 Oracle 中读取、更新、写入)。

当方法运行时,用户会看到一个带有“取消”按钮的“请稍候”模式对话框。 当用户按下“取消”按钮而不解锁我的(Primefaces)用户界面时,我如何中止(显式回滚)我的 EJB 事务?

本质上,如何从其他方法回滚已经运行的事务? 这些事务是容器管理的事务。

我的代码的 sn-p:

@Named
@ViewScoped
public class MyBean implements Serializable {

    @Inject
    private IFacade facade;

    public String save() {
        facade.save();
    }

    public void abortSave() {
        // Cancel save transaction.
    }

}

@Stateless
public class FacadeImpl implements IFacade {

    @Override
    public String save() {
        // Transaction here, read, write, update DB.
    }

}

【问题讨论】:

标签: jsf jakarta-ee transactions ejb abort


【解决方案1】:

我只能想象一种解决方案:您有一些带有 volatile 标志“isCancelled”的共享对象(托管 JSF bean 中的字段)(或者这个共享对象可以是 AtomicBoolean)。

您将此对象作为参数传递给IFacade.save() 方法。 在保存方法中,您可以在任何地方查看取消状态并通过EJBContext.setRollbackOnly()回滚事务。

【讨论】:

    猜你喜欢
    • 2014-06-05
    • 1970-01-01
    • 1970-01-01
    • 2012-02-12
    • 1970-01-01
    • 2010-11-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多