JBossCache как кэш второго уровня для Hibernate в JBoss 5
-
22-07-2019 - |
Решение
Отвечая на мой собственный вопрос.
Оказалось, что вы не можете использовать JBoss Cache с Hibernate в JBoss 5.1, если вы запускаете Hibernate от имени mbean, то есть помещаете файл конфигурации hibernate в папку развертывания сервера JBoss.
Это происходит потому, что mbean не принимает такие параметры, как " hibernate.cache. * " (и это именно то, о чем идет речь).
Итак, мое решение - инициализировать Hibernate из кода Java и использовать hibernate.xml.
Configuration configuration = new Configuration();
Properties properties = configuration.getProperties();
properties.put("hibernate.connection.datasource", "java:/MSSQLDMDS");
properties.put("hibernate.dialect", "org.hibernate.dialect.SQLServerDialect");
properties.put("hibernate.transaction.factory_class", "org.hibernate.transaction.JTATransactionFactory");
properties.put("hibernate.current_session_context_class", "org.hibernate.context.JTASessionContext");
properties.put("hibernate.transaction.manager_lookup_class", "org.hibernate.transaction.JBossTransactionManagerLookup");
properties.put("hibernate.cache.use_second_level_cache", "true");
properties.put("hibernate.cache.use_query_cache", "false");
properties.put("hibernate.cache.region.factory_class", "org.hibernate.cache.jbc2.JndiMultiplexedJBossCacheRegionFactory");
properties.put("hibernate.cache.region.jbc2.cachefactory", "java:CacheManager");
properties.put("hibernate.cache.region.jbc2.cfg.entity", "mvcc-entity");
File mappings = getHibernateMappingDir();
configuration.addDirectory(mappings);
sessionFactory = configuration.buildSessionFactory();
Другие советы
@Yury Litvinov, эти свойства являются новыми свойствами, которые не были сопоставлены с hibernate MBean-атрибутами, поскольку Hibernate MBean больше не поддерживается. Я бы не рекомендовал вам развертывать Hibernate как MBean. Р>
После некоторых исследований мне удалось запустить Hibernate + JBossCache с этой конфигурацией.
<hibernate-configuration xmlns="urn:jboss:hibernate-deployer:1.0">
<session-factory name="java:/hibernate/SessionFactory" bean="jboss.har:service=Hibernate">
<property name="datasourceName">java:/MSSQLDMDS</property>
<property name="dialect">org.hibernate.dialect.SQLServerDialect</property>
<property name="hbm2ddlAuto">create</property>
<property name="secondLevelCacheEnabled">true</property>
<property name="queryCacheEnabled">false</property>
<property name="cacheProviderClass">org.hibernate.cache.jbc2.JndiMultiplexedJBossCacheRegionFactory</property>
<property name="deployedCacheManagerJndiName">java:CacheManager</property>
<depends>jboss.cache:service=CacheManager</depends>
<depends>jboss:service=Naming</depends>
<depends>jboss:service=TransactionManager</depends>
</session-factory>
</hibernate-configuration>
Однако я до сих пор не могу указать (получаю ту же ошибку) следующие параметры: " hibernate.cache.region.jbc2.cfg.entity " ;, " hibernate.cache.region.jbc2.cfg.collection " ;, " hibernate.cache.region.jbc2.cfg.query " ;. Р>
Без указания этих параметров я не могу контролировать, какой экземпляр кэша будет использоваться для кэширования записей, коллекций и запросов.
Я посмотрел на это и пришел к выводу, что механизм JBoss AS для анализа и развертывания файла hibernate.cfg.xml чрезмерно хрупок и склонен к устареванию в отношении параметров конфигурации, которые Hibernate поддерживает. Я открыл https://jira.jboss.org/jira/browse/JBAS- 7411 с предложением возможного пути улучшения этого.