1

着信メッセージに応答して、一連のアクションをアトミックに実行する必要がある MDB があり、そのために CMT を使用しています。メッセージが処理され、トランザクションがコミットされたら、最後のアクションを実行する必要があります。つまり、スレッド プールで実行するタスクを作成してキューに入れます。この MDB で作成および更新するエンティティは、そこから参照されます。

onMessage() からの成功した (ポストコミット) 戻り時に JMS にメソッド (コールバックなど) を呼び出す方法があるかどうかを調べようとしています。このコールバックは、onMessage() と同じ場所で実行する必要があります。

追加情報は、Glassfish 3.1 と含まれている JMS プロバイダーを使用していることです。何か案は?ありがとう。

うまくいけば明確にするための疑似コードを次に示します。

public void onMessage(final Message inMessage) {
    addDatabaseRecord();
    addOtherDatabaseRecord();
    updateDatabaseRecord();
}

@RunAfterOnMessageCommits  // Hypothetical annotation
public void postCommit()
    // Must not happen until transaction commits.
    addToThreadPoolWorkQueue();
}
4

3 に答える 3

0

サーバー上またはクライアント上でコールバックメソッドを呼び出す場所が詳しく説明されていないため、質問を理解するのは困難です。メッセージを受信すると、onMessage() は明らかにクライアントによって処理されます。

于 2012-05-29T20:56:08.877 に答える
0

もしあなたが〜なら。トランザクションで実行すると、onMessageブロックでセカンダリ メッセージを送信できます。このトランザクションがロールバックした場合、送信されません (技術的には、受信されません)。

于 2012-05-29T21:45:53.463 に答える
0

プレーンなJava eeで実行しているようです。メソッドの前または後に特定のコードを実行するために、spring-aop などのアスペクト指向フレームワークを使用していくつかのトリックを実行できます。これは少し xml 構成になりますが、アプリケーション アーキテクチャに干渉しすぎる可能性があります。ただし、Spring AOP は実際のコードに干渉しません。

于 2012-05-30T17:06:21.147 に答える