문제

내 구성은 다음과 같습니다. Hibernate 3.3.1.ga, Jboss 5.1.0.ga, Jboss Cache 3.2.0.ga.

여기에 설명 된대로 최대 절전 모드 구성을하고 있습니다.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 5.1로 Jboss Cache 3.2를 구성하는 방법을 링크 할 수 있습니까? 나는 특히 jndisharedjbosscacheregionfactory 및 jndimultiplexedjbosscacheregionfactory에 관심이 있습니다.

도움이 되었습니까?

해결책

내 질문에 대답합니다.

Jboss 5.1에서 최대 절전 모드와 함께 JBoss Cache를 사용할 수 없다는 것이 밝혀졌습니다. MBEAN으로 최대 절전 모드를 시작하면 Hibernate 구성 파일을 JBoss 서버의 배포 폴더에 넣습니다.

Mbean은 "Hibernate.cache.*"와 같은 매개 변수를 허용하지 않기 때문에 발생합니다 (그리고 정확히 예외입니다).

따라서 내 해결책은 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, 이러한 속성은 최대 절전 모드 MBean이 더 이상 유지되지 않기 때문에 MBEAN 속성에 동면하지 않은 새로운 속성입니다. 최대 절전 모드를 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.jbc2.cfg.collection", "hibernate.cache" .region.jbc2.cfg.query ".

이 매개 변수를 지정하지 않으면 항목, 컬렉션 및 쿼리 캐싱에 어떤 캐시 인스턴스가 사용되는지 제어 할 수 없습니다.

나는 이것을 살펴보고 hibernate.cfg.xml 파일을 구문 분석하고 배포하기위한 메커니즘으로서 JBoss가 지원하는 구성 옵션과 관련하여 과도하게 취약하고 현재는 떨어지지 않을 것이라는 결론을 내 렸습니다. 나는 열었다 https://jira.jboss.org/jira/browse/jbas-7411 이를 개선 할 수있는 가능한 방법을 제안합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top