2

これが私の設定です:Hibernate 3.3.1.GA、JBoss 5.1.0.GA、JBossCache3.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。*のような他のプロパティを使用できないため、休止状態の2番目のレベルのキャッシュを構成できません。

誰かがJBoss5.1でJBossCache3.2を設定する方法のリンクを教えてもらえますか?特にJndiSharedJBossCacheRegionFactoryとJndiMultiplexedJBossCacheRegionFactoryに興味があります。

4

4 に答える 4

3

私自身の質問に答えます。

Hibernateをmbeanとして起動した場合、つまりHibernate構成ファイルをJBossサーバーのデプロイフォルダーに配置した場合、JBoss5.1でHibernateでJBossCacheを使用できないことが判明しました。

これは、mbeanが「hibernate.cache。*」のようなパラメーターを受け入れないために発生します(これがまさに例外です)。

したがって、私の解決策は、JavaコードからHibernateを初期化し、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();
于 2009-09-26T18:26:11.923 に答える
2

@Yury Litvinov、これらのプロパティは、Hibernate MBeanが維持されなくなったため、休止状態のMBean属性にマップされていない新しいプロパティです。HibernateをMBeanとしてデプロイすることはお勧めしません。

于 2009-10-26T16:19:27.830 に答える
0

調査の結果、この構成で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」。

このパラメーターを指定しないと、エントリ、コレクション、およびクエリのキャッシュに使用されるキャッシュインスタンスを制御できません。

于 2009-09-18T11:32:23.847 に答える
0

私はこれを見て、hibernate.cfg.xmlファイルを解析およびデプロイするためのJBoss ASメカニズムは非常に壊れやすく、Hibernateがサポートする設定オプションに関して古くなる傾向があるという結論に達しました。https://jira.jboss.org/jira/browse/JBAS-7411を開いて、これを改善するための可能な方法を提案しました。

于 2009-10-29T02:41:09.080 に答える