2016-05-24 16 views
0

私は、オンラインリソースを通じてEJBトランザクションに関するすべてを読みました。私がそれを適用したとき、説明ど​​おりに動作していません。私がやろうとしている何EJBトランザクション

は、私はそのトランザクション注釈

@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) 

あるステートレスEJBメソッドを持っていると私は、トランザクション別のステートレスEJBでメソッドを呼び出すためにしようとしている

です注釈は、ここで私は新しいトランザクションでは、その注釈

である私の発信者の方法で作成されたと思ったものを上記で

@TransactionAttribute(TransactionAttributeType.REQUIRED). 

です

TransactionAttributeType.REQUIRES_NEW 

と私は、その注釈

TransactionAttributeType.REQUIRED 

で、前のトランザクションが上運ぶが、私の場合には、新たなトランザクションが第二の方法で作成された第二の方法を呼び出すとき。

誰も私に何が起こっているのか、事前に感謝していますか?

以下に自分のコードを掲載しました。

EOutboundHandler.java

@Stateless 
@EJB(name = "EOutboundHandler") 
public class EOutboundHandler { 

@EJB 
    private EData eData; 

@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED) 
    public void Process() { 
     while (ProcessRequests()) { 
     } 
    } 
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) 
    private boolean ProcessRequests() { 
EQueue eQueue = eData.searchEQ(); 
} 
} 

EData.java

 @Stateless 
     @EJB(name="EData") 
     @TransactionAttribute(TransactionAttributeType.REQUIRED) 
     public class EData { 
      @PersistenceContext(unitName=EDataConstants.PERSISTANCE_UNIT_NAME) 
      private EntityManager em; 
     public EdiTxnQ searchEdiTxnQForSendMsg() 
      { 

       String searchSql = 
         "SELECT * FROM dbo.EQueue with (updlock, readpast) Where id = 1"; 

       Query searchQuery = em.createNativeQuery(searchSql, EdiTxnQ.class); 
       List<EdiTxnQ> list = searchQuery.getResultList(); 

       if (list.isEmpty()) 
       { 
        return null; 
       } 
       else 
       { 
        return (EdiTxnQ)list.get(0); 
       } 

      } 
} 
+1

新しいトランザクションが作成されたことをどのように知っていますか? 'MANDATORY'に対して' REQUIRED'を変更し、例外がスローされたかどうかを調べてください。そうでない場合、トランザクションは実行されます。 – Geinmachi

答えて

1

IMO、あなたはEJBスタブを使用して "ProcessRequestsを()" を呼び出す必要があるでしょう(I EJBの新しいバージョンでは何が呼び出されているのかわからない、以前はEJB Remote/Localインターフェイスでした)。 「必須ではない」トランザクション属性を持つメソッド内から通常のメソッド呼び出しとして「ProcessRequests()」を呼び出しているため、「Required_new」が起動していません。 これが役立つことを願っています。 -Amit

+0

ええ、それは問題だった、私はそれを考え出した。答えAmitに感謝します。 –

関連する問題