Domanda

Ecco la mia configurazione: Hibernate 3.3.1.GA, JBoss 5.1.0.GA, JBoss Cache 3.2.0.GA.

Sto eseguendo la configurazione di Hibernate come descritto qui: http://www.jboss.org/community/wiki/ClusteredJPAHibernateSecondLevelCaching >

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

ma ottenere l'errore che specifica la proprietà non è valido:

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]

Quindi, non posso usare " cache.region.factory_class " proprietà ma solo " cacheRegionFactoryClass " (che viene mostrato in eccezione).

Non posso usare altre proprietà come cache.region. * e quindi non posso configurare la cache di secondo livello per il mio ibernazione.

Qualcuno può darmi un link su come configurare JBoss Cache 3.2 con JBoss 5.1? Sono particolarmente interessato a JndiSharedJBossCacheRegionFactory e JndiMultiplexedJBossCacheRegionFactory.

È stato utile?

Soluzione

Rispondere alla mia domanda.

Si è scoperto che non è possibile utilizzare JBoss Cache con Hibernate in JBoss 5.1 se si avvia Hibernate come mbean, ovvero si inserisce il file di configurazione di ibernazione nella cartella di distribuzione del server JBoss.

Ciò accade perché mbean non accetta parametri come " hibernate.cache. * " (e questo è esattamente ciò che riguarda l'eccezione).

Quindi la mia soluzione è inizializzare Hibernate dal codice java e utilizzare 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();

Altri suggerimenti

@Yury Litvinov, quelle proprietà sono nuove proprietà che non sono state mappate per ibernare gli attributi MBean perché l'Hibernate MBean non è più mantenuto. Non consiglierei di distribuire Hibernate come MBean.

Dopo alcune indagini sono riuscito ad avviare Hibernate + JBossCache con questa configurazione.

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

Tuttavia, non riesco ancora a specificare (ottenendo lo stesso errore) i seguenti parametri: " hibernate.cache.region.jbc2.cfg.entity " ;, " hibernate.cache.region.jbc2.cfg.collection " ;, " hibernate.cache.region.jbc2.cfg.query " ;.

Senza specificare questi parametri non posso controllare quale istanza della cache verrà utilizzata per memorizzare nella cache voci, raccolte e query.

Ho dato un'occhiata a questo e sono giunto alla conclusione che il meccanismo JBoss AS per l'analisi e la distribuzione di un file hibernate.cfg.xml è eccessivamente fragile e incline a non essere aggiornato rispetto alle opzioni di configurazione che Hibernate sostiene. Ho aperto https://jira.jboss.org/jira/browse/JBAS- 7411 con un suggerimento su un possibile modo per migliorarlo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top