私がやること
asyncシステムで新しいエンティティが作成されるたびに反応するシステムがありmain、このasyncシステムはデータベースに新しく作成されたエンティティを照会します。
どのように私はそれを行う
asyncシステム iのメッセージを作成するには、hibernate interceptor.
したがって、新しいエンティティが作成されるたびonSaveに、インターセプターのメソッドが呼び出され、i
エンティティ ID を に保存しlistますafterTransactionComplete(Transaction tx)。
と呼ばれ、メッセージング システム (ActiveMq) を使用してシステムentity id内のすべてをフラッシュします。listasync
何が問題ですか
現在、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 EB1IDをシステムにフラッシュしますasync
トランザクションがまだ完了していない ため、EB1null が見つかりました。Tx_B
onsave呼び出しでトランザクションIDを取得でき、afterTransactionCompletionそのトランザクションに関連するエンティティのみをフラッシュできる場合、この問題は解決できます
[1] このトランザクション ID を取得する方法はありますか?
[2] 上記の問題に対する他の解決策はありますか?
私は休止状態4.2.2を使用しています