这是我的配置: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。*,因此无法为我的hibernate配置二级缓存。
有人能给我一个如何用JBoss 5.1配置JBoss Cache 3.2的链接吗?我对JndiSharedJBossCacheRegionFactory和JndiMultiplexedJBossCacheRegionFactory特别感兴趣。
答案 0 :(得分:3)
回答我自己的问题。
事实证明,如果你把Hibernate作为mbean启动,你就不能在JBoss 5.1中使用JBoss Cache和Hibernate,即把hibernate配置文件放到JBoss服务器的deploy文件夹中。
这是因为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();
答案 1 :(得分:2)
@Yury Litvinov,这些属性是尚未映射到hibernate MBean属性的新属性,因为不再维护Hibernate MBean。我不建议您将Hibernate部署为MBean。
答案 2 :(得分: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”。
如果不指定此参数,我无法控制将用于缓存条目,集合和查询的缓存实例。
答案 3 :(得分:0)
我已经看过这个并得出结论,用于解析和部署hibernate.cfg.xml文件的JBoss AS机制过于脆弱,并且容易因Hibernate的配置选项而过时支持。我已经打开了https://jira.jboss.org/jira/browse/JBAS-7411,并提出了改善这种情况的可能方法。