私がやること
async
システムで新しいエンティティが作成されるたびに反応するシステムがありmain
、このasync
システムはデータベースに新しく作成されたエンティティを照会します。
どのように私はそれを行う
async
システム iのメッセージを作成するには、hibernate interceptor
.
したがって、新しいエンティティが作成されるたびonSave
に、インターセプターのメソッドが呼び出され、i
エンティティ ID を に保存しlist
ますafterTransactionComplete(Transaction tx)
。
と呼ばれ、メッセージング システム (ActiveMq) を使用してシステムentity id
内のすべてをフラッシュします。list
async
何が問題ですか
現在、problem
処理中のトランザクションが複数ある場合に発生します..両方
トランザクションはエンティティを作成します。
例を挙げましょう:
Tx_A
エンティティを作成しますEA1, EA2
。
Tx_B
エンティティを作成しますEB1, EB2
。
ここで、実行フローが次のように発生するとします。
[1] EA1 の onSave、EA1 id を flushList に追加します
[2] EB1 の onSave、EB1 id を flushList に追加します
[3] Tx_A の afterTransactionComplete(tx)
この時点で、データベースにクエリを実行するときにEA1 and EB1
IDをシステムにフラッシュしますasync
トランザクションがまだ完了していない ため、EB1
null が見つかりました。Tx_B
onsave
呼び出しでトランザクションIDを取得でき、afterTransactionCompletion
そのトランザクションに関連するエンティティのみをフラッシュできる場合、この問題は解決できます
[1] このトランザクション ID を取得する方法はありますか?
[2] 上記の問題に対する他の解決策はありますか?
私は休止状態4.2.2を使用しています