2017-03-24 8 views
2

cdiアプリケーションとして使用されるBeanには、jpaの読み込み/書き込みが含まれていますか、またはDB stuffのために常にEJBを使用する必要がありますか?私はインターネット上のどこかでcdiがdbのものを含んでいないと読んでいます。本当?CDI BeanとJPAトランザクション

+0

一般に、1つのセンテンスはインターネット上で良い質問をしません。質問に文脈を追加できますか? – halfer

+0

ok私はもっと見てみてください – Joey

答えて

3

いつもの答えはそれが依存している...それはあなたの特定のユースケースによって異なります。

Java EEでは、後でEntityManagerを挿入してJPAエンティティの読み取り/書き込みを実行する場所として@EJB beansを使用します。 なぜこれを行うのですか? Transactionsが必要なためです。デフォルトでは、@StatelessでBeanに注釈を付けると、その中のすべてのメソッドはTransactionalとなり、すべて無料で取得できます。トランザクションを使用すると、アトミックな方法で複数のテーブルを更新できます。これらのテーブルはすべて成功するか失敗します。

例:あなたは、表A、B、Cを更新すると、あなたが成功するためにそれらのすべてまたはトランザクションがロール担保になりたいupdateABC()あなたの方法では :

@Stateless 
public class MyClass{ 
    @PersistenceContext 
    EntityManager em; 

    public void updateABC(){ 
     A a= em.find(A.class, aId); 
     //here update some fields on the entity "a" 

     B b= em.find(B.class, bId); 
     //here update some fields on the entity "b" 
     C c= em.find(C.class, cId); 
     //here update some fields on the entity "c" 
    } 
} 

そしてこれがそれです。 ..あなたは終わった。あなたのすべての更新は、魔法のようにDBに保存されます。

このようなものが必要ですか? EJBのために行く。 あなたはそうする必要はありませんか?あなたは手動で仕事をしたいですか?

+0

しかし、私はより多くのcdiとejbが好きではありません..ここではcdiを使って同じことをやっていますか? – Joey

+1

EJBよりもCDIが好きなのはどういう意味ですか?彼らはさまざまな目的を果たします。ユースケースでは、EJBは適切なテクノロジーです。確かにCDI Beanでそれを自分で行うことはできますが、手動でトランザクションの境界を実装する必要があります。つまり、手動でEJB内のCDIを有効にするということです。 – Alboz

+0

cdiはどのような目的を果たしますか? – Joey

1

YES、Java EE 7サーバーを使用している場合は、@Transactionalを使用して、DBIを管理できます。

のJavadocを見てみましょう:

public class EntityManagerProducer { 

    @PersistenceContext  
    private EntityManager em; 

    @Produces 
    @RequestScoped 
    public EntityManager getEntityManager() { 
    return em; 
    } 
} 

public MyCDIBean{ 
    @Inject 
    private EntityManager m_entityManager; 

    @Transactional 
    public doStuff(){ 
     // Here you are in a Transaction 
     m_entityManager.persist(...) 
    } 
} 

EntityManagerを生成するためにプロデューサーを使用して:あなたはdoStuff方法@Transactional注釈されているCDI Beanを持つことができます例えばhttp://docs.oracle.com/javaee/7/api/javax/transaction/Transactional.html

関連する問題