Я отлаживал в своем коде какое-то странное поведение envers в течение нескольких дней и наткнулся на что-то, что меня удивило. Я подтвердил, что это не усугубляет мою проблему, но я подумал, что в любом случае стоит проверить свои предположения.
Если я получаю текущий сеанс Hibernate в нескольких местах в одном потоке (я использую контекст сеанса потока), я всегда буду получать один и тот же сеанс, и поэтому я попаду на тот же уровень кеша первого уровня.
Я предполагал аналогичное поведение с envers при получении экземпляра читателя аудита. Я использую AuditReader reader = AuditReaderFactory.get(session);
для получения AuditReader
экземпляров. Я заметил, что каждый раз, когда это вызывается (даже в рамках одного и того же контекста сеанса), я получаю новый экземпляр читателя аудита, содержащий уникальный экземпляр кеша первого уровня.
Похоже, это в лучшем случае приведет к снижению производительности нескольких, возможно, перекрывающихся кешей.
Я предполагал, что для контекста сеанса я всегда буду получать один и тот же экземпляр AuditReader
и, следовательно, единственный кеш первого уровня. Я не могу придумать причину, по которой этого не произошло бы.
Это оставляет мне четыре возможности:
- Я не использую правильный метод для получения читателя аудита контекста сеанса
- Есть веская причина для наличия нескольких экземпляров программы чтения аудита
- Где-то в недрах энверса есть баг
- Повторное использование экземпляров программы чтения аудита не имеет смысла.
Может кто-нибудь дать некоторое представление об этом.
Спасибо.
SessionFactory
, и я используюfinal Session session = sessionFactory.getCurrentSession()
для получения текущего сеанса контекста Hibernate. - person subie   schedule 23.09.2013hibernate.current_session_context_class
значениеthread
- person subie   schedule 23.09.2013