0

JPA/Hibernate を使用してアプリケーション (CMS) を作成しています。単一の UI に、同じエンティティを表示する可能性のある複数のコンポーネントがあります (それぞれが一部のみを表示します)。また、複数のユーザー向けの複数のセッションで、複数の UI を使用しています。

これらのコンポーネントの一部はエンティティを編集することもでき、他のすべてのコンポーネントは常に最新のエンティティを表示する必要があります。ひどい方法は定期的な更新ですが、これはラグがあり重いので、jpaの同期メカニズムを考え出しました。

インターセプター (JPA はダムなので休止状態のもの) を使用すると、すべてのトランザクション、すべての新規/更新/削除されたエンティティをリッスンし、関心のあるすべてのコンポーネントに通知を送信できます。また、派生トランザクションをキャッチすることもできます。コンポーネント、通知への応答、任意の方法でエンティティを変更 (新しいトランザクションを開く) 通知を再送信できます (デルタのみ)。これは、別のコンポーネントがエンティティを再度変更する必要があるような方法で、コンポーネントがエンティティを変更する可能性があるためです。(単なるばかげた例: コンポーネントは生年月日を設定し、別のコンポーネントは年齢を再計算します)

ps。 通知は、トランザクションのコミット後にのみディスパッチされます。これは主に

JPA 仕様のセクション 3.5 には次のように記載されています。ライフサイクル コールバック メソッドは、それが呼び出されたエンティティの非関係状態を変更する可能性があります。」</p>

そのため、トランザクション内で通知された場合、リスナーは役に立たなくなります。そして(ニヤニヤして耐えるために)変更されたエンティティをグループ化し、それらをまとめて通知します。

この通知メカニズムは複雑になりつつあり、私は疑問に思っていました:

なぜjpaにはそのようなメカニズムがないのですか? 私は何か奇妙なことを発明していますか?「実際のアプリケーション」はこの問題をどのように解決しますか?

4

0 に答える 0