Pregunta

Aquí está mi configuración: Hibernate 3.3.1.GA, JBoss 5.1.0.GA, JBoss Cache 3.2.0.GA.

Estoy haciendo la configuración de Hibernate como se describe aquí: 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>

pero obteniendo el error de que la propiedad especificada no es válida:

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]

Entonces, no puedo usar '' cache.region.factory_class '' propiedad pero solo " cacheRegionFactoryClass " (que se muestra en excepción).

No puedo usar ninguna otra propiedad como cache.region. * y, por lo tanto, no puedo configurar el caché de segundo nivel para mi hibernación.

¿Alguien puede darme un enlace sobre cómo configurar JBoss Cache 3.2 con JBoss 5.1? Estoy especialmente interesado en JndiSharedJBossCacheRegionFactory y JndiMultiplexedJBossCacheRegionFactory.

¿Fue útil?

Solución

Respondiendo a mi propia pregunta.

Resultó que no puede usar JBoss Cache con Hibernate en JBoss 5.1 si inicia Hibernate como mbean, es decir, coloca el archivo de configuración de hibernación en la carpeta de implementación del servidor JBoss.

Esto sucede porque mbean no acepta parámetros como " hibernate.cache. * " (y de eso se trata exactamente la excepción).

Entonces, mi solución es inicializar Hibernate a partir del código de Java y obtener 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();

Otros consejos

@Yury Litvinov, esas propiedades son propiedades nuevas que no se han asignado para hibernar atributos MBean porque el Hibernate MBean ya no se mantiene. No recomendaría que implemente Hibernate como MBean.

Después de investigar un poco, logré iniciar Hibernate + JBossCache con esta configuración.

<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>

Sin embargo, todavía no puedo especificar (obteniendo el mismo error) los siguientes parámetros: " hibernate.cache.region.jbc2.cfg.entity " ;, " hibernate.cache.region.jbc2.cfg.collection " ;, " hibernate.cache.region.jbc2.cfg.query " ;.

Sin especificar estos parámetros, no puedo controlar qué instancia de caché se utilizará para almacenar en caché las entradas, colecciones y consultas.

He echado un vistazo a esto y he llegado a la conclusión de que el mecanismo JBoss AS para analizar y desplegar un archivo hibernate.cfg.xml es demasiado frágil y propenso a desactualizarse con respecto a las opciones de configuración que Hibernate Soportes. Abrí https://jira.jboss.org/jira/browse/JBAS- 7411 con una sugerencia de una posible forma de mejorar esto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top