2016-04-09 11 views
0

私のアプリケーションはWildFly 8.2にデプロイされています。Java EE WildFly 8.2トランザクションが必要です例外

バッチ処理中です。

セッションEJBのメソッドAには新しいアノテーションが必要です。

私は別のメソッドBメソッドを同じEJBで呼び出していますが、別のメソッドでは新しいアノテーションが必要です。

このメソッドBは実行時例外をスローします。方法Aそれをキャッチし続けます。

しかし、JPAアップデートを扱う次の行では、トランザクションに必要な例外が与えられます。必要な新しいアノテーションを持つメソッドBは、方法A

に影響を与え、なぜ

基本的に私は、それはJPAダオ失う取引上のエンティティマネージャであるかわかりません。

例外が発生した場合は、メソッドBを単独で実行し、メソッドBをロールバックするにはどうすればよいですか。

+2

あなたが同じEJBから別のメソッドを呼び出す場合、トランザクション属性が考慮されていません。

あなたのEJBは、次のようになります。メソッドBで新しいトランザクションを実行する場合は、新しいEJBに移動します。今のところ、メソッドAとメソッドBは同じトランザクションを共有します。 – Geinmachi

+1

S.Stavrevaさんが私が というsessionContext.getBusinessObject(Object.class)を使用することを提案したので、感謝しました。 – user330026

答えて

3

セッションコンテキストを使用してEJBコンテナ経由でメソッドBを呼び出すと、トランザクション注釈が有効になります。

@Resource 
SessionContext sessionCtx; 
. 
. 
. 
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) 
public void methodA() { 
    <Your-EJB-Interface> ejbObject = sessionCtx.getBusinessObject(<Your-EJB-Interface>.class); 
    ejbObject.methodB(); 
} 

@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) 
public void methodB.... 
+0

はい、そのように機能しました。今は意味があります。新しいトランザクションを作成するために、プロキシを介してメソッドを呼び出す必要があります。 ありがとうございます。 – user330026

関連する問題