我有以下代码:
JSF 托管 Bean:
@ManagedBean(name = "purchaseView")
@ViewScoped
public class PurchaseView implements Serializable {
@EJB
private PurchaseService service;
private Order order;
// Getter/Setters here
public void checkoutOrder() {
// .. some checks for null here, then call service
service.checkout(order);
}
}
服务:
@Stateless
public class BuyVoucherService {
@EJB
private OrderBean orderBean;
@EJB
private ProductBean productBean;
public boolean checkout(Order order) {
orderBean.create(order);
for(int i=0;i<order.getQuantity();i++) {
Product product = new Product();
if(someCondition) {
// don't save anything and
return false;
}
// .. some setter here
product.setOrder(order);
productBean.create(product);
}
return true;
}
productBean 和 orderBean 是简单的 JPA EJB,带有 EntityManager 和 CRUD 操作(由 Netbeans 生成..)。在上面的服务中,当服务返回时,事物被持久化在数据库中。如果出现问题(someCondition
上面的 == TRUE),如果我返回 false,orderBean.save(order) 仍会将订单保留在数据库中,我不希望这样。
抛出 EJBException 并在 ManagedBean 中捕获它是最佳选择吗?