下面是我的配置:休眠3.3.1.GA时,JBoss 5.1.0.GA,JBoss缓存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。*,因此不能configurate第二级高速缓存为我的休眠。

谁能给我一个链接如何configurate JBoss缓存3.2与JBoss 5.1?我在JndiSharedJBossCacheRegionFactory和JndiMultiplexedJBossCacheRegionFactory特别感兴趣。

有帮助吗?

解决方案

回答我自己的问题。

原来,可以在JBoss的5.1如果启动Hibernate作为的mbean,即把休眠配置文件保存到JBoss服务器的部署文件夹不使用JBoss缓存与休眠。

这是因为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();

其他提示

@Yury李维诺夫,这些属性是未被映射到冬眠MBean特性因为休眠的MBean不再维持新的属性。我不建议你Hibernate部署为一个MBean。

在一些调查我设法启动休眠+ 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”。

不指定此参数I不能控制缓存实例将被用于高速缓存条目,集合和查询。

我看了一下这一点,并已得出的结论是,JBoss应用服务器机制,分析和部署hibernate.cfg.xml文件过于脆弱,容易相对于闹翻日期来配置选项休眠支持。我已经打开 https://jira.jboss.org/jira/browse/JBAS- 7411 ,提供的一种可能的方式的建议,以改善这一点。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top