首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java事务回滚

Java事务回滚
EN

Stack Overflow用户
提问于 2016-07-21 12:02:45
回答 1查看 1.7K关注 0票数 2

我有以下ejb:

代码语言:javascript
复制
for (int i = 1; i <= shopItem.getQuantity(); i++) {
        purchase = new Purchase();
        purchase.setUser(user);
        // a lot of sets
        purchase.setPhoneNumber(order.getPhoneNumber());
        try {
            financeEntityEjb.createPurchase(purchase);
        } catch (NotEnoughFundsException e) {
       throw new NotEnoughFundsExceptionWithRollback(e); // Making in rollable
     }
  }

public void createPurchase(Purchase purchase) throws InputValidationException, NotEnoughFundsException {
    // a lot of calculations
    em.persist(purchase);
    em.flush();
    /* Closing Order */
            purchase.getOrder().setState(Order.State.PURCHASED);
            em.merge(purchase.getOrder());

    }

我的例外课:

代码语言:javascript
复制
@ApplicationException(rollback = true)
public class NotEnoughFundsExceptionWithRollback extends NotEnoughFundsException {
public NotEnoughFundsExceptionWithRollback() {
    }

    public NotEnoughFundsExceptionWithRollback(Throwable e) {
        super(e);
    }

    public NotEnoughFundsExceptionWithRollback(String message, Throwable e) {
        super(message, e);
    }
}

因此,我有问题,ejb回滚所有的em.persist(购买),但忽略em.merge(purchase.getOrder());

循环在purchaseEjb中。CreatePurchase方法在financeEjb上

EN

回答 1

Stack Overflow用户

发布于 2016-07-21 21:28:37

我假设for-循环中的代码不在ejb或ejb中(您没有使用this)。在这种情况下,最有可能的问题是

EJB中的容器管理事务持续一个方法调用。根据事务属性,它会忽略、启动或加入事务。缺省值是必需的,这意味着事务从对createPurchase的调用开始,到方法完成时结束(如果这样,代理就会负责)。

事务在RuntimeException上回滚,当应用程序异常用@ApplicationException(rollback = true)抛出时,或者设置了rolledback标志时。

在您的示例中,很可能在createPurchase的事务上下文中没有任何一个发生。您没有显示NotEnoughFundsException的代码,但我假设它没有在@ApplicationException(rollback = true)中显示。

相反,您已经注释了NotEnoughFundsExceptionWithRollback,这是由调用EJB的客户机在事务上下文之外抛出的。

如果希望整个循环是原子操作,则需要将其放在事务上下文中(例如,使用EJB)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38503772

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档