2012-05-10 34 views
0

を防ぐために持たないEJBExceptionをスローする必要があります:は、私は次のコードを持っているエンティティの作成

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で最良のオプションをキャッチしていますか?

+0

OrderBeanのcreate()のトランザクション属性は、デフォルトですか? –

+0

はい、特定のトランザクション属性を設定していません – JScoobyCed

答えて

1

トランザクション属性を明示的に指定していないため、おそらくRequiredになりますが、サーバーによって異なります。したがって、これらのメソッドは両方とも同じトランザクション内にあるため、メソッド内でロールバックすると、別のメソッドに変更がカスケードされます。

また、Mandatory属性を2番目のメソッドに使用すると、トランザクションをさらに進める必要があります。そうでないと実行時例外が発生します。

@Resource 
    private EJBContext context; 

    try{ 

     if(someCondition) { 
      throw SomeBusinessException("Failed, rolling back"); 
    } 

    }catch(Exception e){ 
     log(e.getMessage, e) 
     context.setRollbackOnly(); 
    } 

これ以外の場合は、システム例外をスローすると、強制的に変更がロールバックされます。

if(someCondition) 
     throw SomeBusinessException("Failed, rolling back"); 

    }catch(Exception e){ 
     throw new EJBException (e.getMessage(), e); 
    } 
+0

ありがとうございます。私はEJBContextの方が安全だと思うので、ロールバックするかどうかを決めるコンテナには依存しません(あまりにも安全です:) – JScoobyCed

+0

@JScoobyCedよろしくお願いします。 –

関連する問題