JBossCache как кэш второго уровня для Hibernate в JBoss 5 - PullRequest
2 голосов
/ 18 сентября 2009

Вот моя конфигурация: Hibernate 3.3.1.GA, JBoss 5.1.0.GA, JBoss Cache 3.2.0.GA.

Я делаю настройку Hibernate, как описано здесь: http://www.jboss.org/community/wiki/ClusteredJPAHibernateSecondLevelCachinginJBossAS5

<hibernate-configuration>

    <session-factory>

         <property name="cache.use_second_level_cache">true</property>
         <property name="cache.use_query_cache">true</property>
         <property name="cache.region.factory_class">org.hibernate.cache.jbc2.JndiMultiplexedJBossCacheRegionFactoryctory</property>
         <property name="cache.region.jbc2.cachefactory>java:CacheManager</property>
         <property name="cache.region.jbc2.cfg.entity">mvcc-entity</property>
         <property name="cache.region.jbc2.cfg.query">local-query</property>
         <property name="cache.region_prefix">tempdb</property>

         ... other non-caching related configuration

    </session-factory>

</hibernate-configuration>

но получаю ошибку, что указанное свойство недействительно:

Caused by: java.lang.IllegalArgumentException: No such property cache for bean org.jboss.hibernate.jmx.Hibernate available [statisticsServiceName, beanName, defaultSchema, defaultCatalog, sessionFactoryName, querySubstitutions, secondLevelCacheEnabled, password, version, statGenerationEnabled, maxFetchDepth, username, useStructuredCacheEntriesEnabled, datasourceName, dirty, streamsForBinaryEnabled, getGeneratedKeysEnabled, hbm2ddlAuto, minimalPutsEnabled, instance, jdbcBatchSize, jdbcScrollableResultSetEnabled, cacheRegionFactoryClass, dialect, scanForMappingsEnabled, runningSince, cacheRegionPrefix, class, cacheProviderClass, sessionFactoryRunning, batchVersionedDataEnabled, harUrl, queryCacheEnabled, sessionFactoryInterceptor, deployedCacheManagerJndiName, showSqlEnabled, reflectionOptimizationEnabled, jdbcFetchSize, listenerInjector, sqlCommentsEnabled, deployedCacheJndiName, controller]

Таким образом, я не могу использовать свойство «cache.region.factory_class», а только «cacheRegionFactoryClass» (который показан в исключении).

Я не могу использовать какие-либо другие свойства, такие как cache.region. * И, следовательно, не могу настроить кэш второго уровня для моего спящего режима.

Может кто-нибудь дать мне ссылку, как настроить JBoss Cache 3.2 с JBoss 5.1? Меня особенно интересуют JndiSharedJBossCacheRegionFactory и JndiMultiplexedJBossCacheRegionFactory.

Ответы [ 4 ]

3 голосов
/ 26 сентября 2009

Отвечая на мой вопрос.

Оказалось, что вы не можете использовать 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();
2 голосов
/ 26 октября 2009

@ Юрий Литвинов, эти свойства являются новыми свойствами, которые не были сопоставлены с атрибутами спящего MBean, потому что спящий Hibernate больше не поддерживается Я бы не рекомендовал вам развертывать Hibernate как MBean.

0 голосов
/ 29 октября 2009

Я посмотрел на это и пришел к выводу, что механизм JBoss AS для анализа и развертывания файла hibernate.cfg.xml слишком хрупок и склонен к устареванию в отношении параметров конфигурации, которые Hibernate поддерживает. Я открыл https://jira.jboss.org/jira/browse/JBAS-7411 с предложением возможного способа улучшить это.

0 голосов
/ 18 сентября 2009

После некоторого исследования мне удалось запустить 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".

Без указания этих параметров я не могу контролировать, какой экземпляр кэша будет использоваться для кэширования записей, коллекций и запросов.

...