При использовании Hibernate 3.5.6-FINAL в качестве нашего поставщика JPA и infinispan 4.2.0.ALPHA1 в качестве поставщика кэша запросов уровня 2 я беспокоюсь о том, что, в отличие от документации по Hibernate, результаты базы данных сохраняются несколько разв разных местах памяти (для разных наборов результатов запросов HQL, которые возвращают одни и те же записи) в пределах бесконечной области с именем Cache, "local-query".Поскольку многие из наших часто выпускаемых запросов имеют большое пересечение в своих наборах результатов, это может быстро исчерпать память и сделать кэш запросов бесполезным.
Я подозреваю, что неправильно настраиваю либо бесконечность, либо спящий режим, либо оба, как могуПохоже, что кеш запроса сущности 2-го уровня не работает в качестве основы для кеша запросов.Я хотел бы видеть пример infinispan в качестве кэша запросов hibernate-as-JPA level-2, результаты которого сами поддерживаются infinispan как hibernate-as-JPA level-2 сущность кеш.
Подробности:
Документация по Hibernate 3.5 (http://docs.jboss.org/hibernate/core/3.5/reference/en/html/performance.html#performance-querycache-enable) утверждает:
Кэш запросов не кэширует состояние реальных объектов в кэше;он кэширует только значения идентификатора и результаты типа значения.По этой причине [sic] кэш запросов всегда должен использоваться вместе с кешем второго уровня для тех объектов, которые, как ожидается, будут кешироваться как часть кеша результатов запроса
Однако, включение спящего режимаКэш запросов уровня 2, использующий infinispan (для http://community.jboss.org/wiki/usinginfinispanasjpahibernatesecondlevelcacheprovider), как в нашем файле persistence.xml:
<property name="hibernate.cache.use_second_level_cache" value="true"/>
<property name="hibernate.cache.use_query_cache" value="true"/>
<property name="hibernate.cache.region.factory_class" value="org.hibernate.cache.infinispan.InfinispanRegionFactory"/>
<property name="hibernate.cache.infinispan.statistics" value="true"/>
, а проверка атрибутов CacheManager infinispan JMX показывает только один из шести namedCaches, определенных в infinispan-Создается файл configs.xml (из GAV org.hibernate / hibernate-infinispan / 3.5.6-FINAL, который зависит от GAV org.infinispan / infinispan-core / 4.2.0.ALPHA1) вместе с тем, который там не определен:
org.hibernate.cache.UpdateTimestampsCache(created)
timestamps(not created)
entity-repeatable(not created)
entity(not created)
local-query(created)
replicated-query(not created)
replicated-entity(not created)
Я подозреваю, что упомянутая выше вики-статья jboss, в которой обсуждается кэш сущностей, ссылается на "entity" namedCache, однако я не могу найти, как создать этот кеш.Я также беспокоюсь о том, что локальный запрос infinispan-configs.xml создан, а отметки времени infinispan-configs.xml - нет, вместо этого мы получаем UpdateTimestampsCболь, которая должна быть определена где-либо еще в hibernate.) Указание
<property name="javax.persistence.sharedCache.mode" value="ENABLE_SELECTIVE"/>
в нашем файле persistence.xml и затем аннотирование соответствующих сущностей @ javax.persistence.Cacheable делает (согласно атрибутам JMX infinispan CacheManager) получение созданных кэшей сущностей(именуется как имя класса объекта с указанием пакета), но они кажутся неиспользованными, даже когда статистика JMX показывает высокий коэффициент попадания для локального запроса (и действительно, впечатляющую производительность для таких запросов попадания в кэш).
Является ли мой страх необоснованным, и под прикрытием бесконечность хранит информацию об объекте только один раз, даже если она возвращается в наборах результатов нескольких запросов HQL?Если нет, то как правильно получить namedCache в файле infinispan-configs.xml, «сущности», используемые для избежания дублирования хранилища данных сущностей?Наконец, как можно использовать namedCache, «timestamps» в infinispan-configs.xml, а не «org.hibernate.cache.UpdateTimestampsCache», в качестве кеша временных отметок уровня 2 hibernate?