1

数日間、コード内の奇妙な envers の動作をデバッグしていて、驚いたことに遭遇しました。これが私の問題に寄与していないことを確認しましたが、とにかく私の仮定を確認する価値があると思いました.

現在の Hibernate セッションを 1 つのスレッドの複数の場所で取得すると (スレッド セッション コンテキストを使用しています)、常に同じセッションを取得するため、同じレベル 1 キャッシュにヒットします。

監査リーダー インスタンスを取得するときに、envers で同様の動作を想定していました。AuditReader reader = AuditReaderFactory.get(session);インスタンスを取得するために使用していAuditReaderます。これが呼び出されるたびに (同じセッション コンテキスト内であっても)、一意の第 1 レベル キャッシュ インスタンスを含む新しい監査リーダー インスタンスが取得されることに気付きました。

これは、せいぜい、複数の重複する可能性のあるキャッシュのパフォーマンス ヒットになるように見えます。

セッション コンテキストの場合、常に同じAuditReaderインスタンスを取得するため、単一の第 1 レベル キャッシュを取得すると想定していました。そうでない理由が思いつきません。

これにより、次の 4 つの可能性が残されます。

  1. セッションコンテキストの監査リーダーを取得するための正しい方法を使用していません
  2. 複数の監査リーダー インスタンスを持つには十分な理由があります
  3. Envers の奥のどこかにバグがあります
  4. 監査リーダー インスタンスを再利用しても意味がありません。

誰かがこれについての洞察を提供してもらえますか。

ありがとう。

4

1 に答える 1