Hibernate è una popolare soluzione open source di mapping relazionale a oggetti per Java. Allo scopo di aumentare le prestazioni, Hibernate fornisce anche la funzione di memorizzazione nella cache. Hibernate fornisce due tipi di memorizzazione nella cache, cache di primo livello e cache di secondo livello.
La cache di primo livello è integrata e utilizzata come predefinita, ma è limitata nell'uso, non accessibile ed è solo una cache in-process. La cache di secondo livello fornisce un'architettura collegabile, il che significa che una cache di terze parti può essere utilizzata come cache di secondo livello per Hibernate.
NCache fornisce il provider Hibernate Second Level Cache che può essere configurato senza alcuna modifica al codice. In questo modo accedi al ricco set di funzionalità di memorizzazione nella cache distribuita fornite da NCache.
Impostare NCache poiché la cache di secondo livello per Hibernate è abbastanza semplice. Non sono richieste modifiche al codice effettivo. È necessario modificare solo i file di configurazione.
Ora per aggiungere NCache come cache di secondo livello per Hibernate, hibernate.cfg.xml deve essere modificato nel modo seguente:
Ecco un esempio delle modifiche apportate al ibernare.cfg.xml file:
<hibernate-configuration>
<session-factory>
<property name="hibernate.cache.use_second_level_cache">true</property>
<property name="hibernate.cache.region.factory_class">JCacheRegionFactory</property>
...
</session-factory>
</hibernate-configuration>
Hibernate fa uso di regioni della cache per riporre oggetti. NCache consente la configurazione di queste regioni della cache con proprietà diverse. Il NCacheIl file Hibernate.xml viene utilizzato per questo scopo. Questo file contiene tutte le impostazioni e le opzioni di configurazione per le regioni e le relative configurazioni utilizzate da NCache.
Di seguito è riportato un esempio NCacheFile di configurazione Hibernate.xml in cui sono configurate le regioni:
<configuration>
<application-config application-id="myapp" enable-cache-exception="true" default-region-name="DefaultRegion" key-case-sensitivity="false">
<cache-regions>
<region name="hibernator.BLL.Customer:Customer" cache-name="myPartitionedcache" priority="BelowNormal" expiration-type="Absolute" expiration-period="8"/>
<region name="DefaultRegion" cache-name="myPartitionedcache" priority="default" expiration-type="none" expiration-period="0" />
</cache-regions>
...
</application-config>
</configuration>
NCache è una cache distribuita versatile, efficiente ed efficace per .NET Framework, .NET Coree Java. Viene fornito con un'ampia serie di caratteristiche e funzionalità. Una di queste funzionalità è la sincronizzazione del database tramite Dipendenza SQL. È qui che la cache controlla il database per eventuali modifiche e ricarica o rimuove gli elementi che risultano obsoleti o ridondanti.
Hai la possibilità di configurare NCache come provider di cache di secondo livello per Hibernate per utilizzare la funzionalità di sincronizzazione del database. Dovrai applicare le seguenti modifiche al NCacheHibernate.xml file:
<configuration>
<application-config application-id="myapp" enable-cache-exception="true" default-region-name="DefaultRegion" key-case-sensitivity="false">
...
<database-dependencies>
<dependency entity-name="hibernator.BLL.Customer" type="oracle" sql-statement="select ContactName from Customer where CustomerID ='?'" cache-key-format="hibernator.BLL.Customer#[pk]" connection-string="Your Connection String"/>
</database-dependencies>
</application-config>
</configuration>
Ibernazione fornisce una funzionalità di memorizzazione nella cache delle query. Qui i risultati delle query vengono memorizzati nella cache di secondo livello. NCache consente di memorizzare nella cache tali query utilizzando questa funzione. Questa funzione può essere abilitata modificando il file ibernare.cfg.xml file nel modo seguente:
<hibernate-configuration>
<session-factory>
...
<property name="hibernate.cache.use_query_cache">true</property>
</session-factory>
</hibernate-configuration>
L'abilitazione della cache delle query non memorizza nella cache ogni query per impostazione predefinita. Invece le query che devono essere memorizzate nella cache devono essere impostate come memorizzabili nella cache nel codice. Per impostare una query memorizzabile nella cache, chiamare la funzione setCacheable(true) della query durante la creazione della query. Il codice seguente è un esempio che mostra una query memorizzabile nella cache:
List customerEnumerator = session.createQuery("from Customer c").setCacheable(true).list();
I seguenti sono i motivi principali per cui NCache è un'opzione adatta da utilizzare come cache di secondo livello per Hibernate quando l'applicazione è in esecuzione in un ambiente multi-server.