0

CMT ベースの EJB を作成しました。EJB はデータベースにレコードを挿入し、別のコード (A) を非同期的に実行します。ejb は処理を続行するため、非同期呼び出しの後にトランザクションをコミットまたはロールバックできます。コード (A) では、EJB のトランザクションがコミットまたはロールバックされるまで待機する必要があります。次に、EJB が挿入したレコードを読み取るか、次の実行をスキップします。私の質問は、EJB のトランザクション イベントに通知できるか、またはレコードを読み取れるまでポーリングする必要があるかということです。

私は IBM WebSphere 7.0 (Java EE 5) に取り組んでいます

4

1 に答える 1

0

私の知る限り、非同期的に呼び出されたコードをトランザクション イベントと同期させる唯一の方法は、CDI イベントを使用することです。トランザクション内で実行されるコードでは、CDI イベントを送信する必要があります。特定のトランザクション結果でのみ実行するように CDI イベントのハンドラーを構成できます。これらのハンドラーは、トランザクション オブザーバーと呼ばれます。

構文と一般的な概念を概説する JBoss ドキュメントからこのページを見つけました - セクション 11.7 を参照してください

http://docs.jboss.org/weld/reference/latest/en-US/html/events.html

基本的にはこんな感じ

public void refreshCategoryTree(@Observes(during = AFTER_SUCCESS) CategoryUpdateEvent event) 
{// only called after the transaction committed successfully }

WebSphere については知りませんが、これは CDI 仕様の一部であるため、そこでも動作するはずです。私はかつてこれをJBossで使用しましたが、うまくいきました。必要に応じて、ハンドラーを独自のトランザクション内で実行することもできます。

于 2013-03-15T15:20:35.367 に答える