NHibernate second level cache e AppFabric provider

Quando utilizziamo NHibernate la cache di primo livello viene automaticamente attivata e utilizzata in modo trasparente allo sviluppatore, utilizzando l'oggetto session.

Il ciclo di vita della cache di primo livello segue esattamente il ciclo di vita dell’oggetto session corrente. L’utilizzo di questo oggetto all’interno di NH, consente di risparmiare preziosi “roundtrip” da e verso in nostro caro RDBMS.

La durata della cache di secondo livello invece, è legata alla session factory e non a una singola session. Quando una entity viene caricata tramite il suo ID univoco nella cache di secondo livello diventa disponibile per tutte le altre sessioni. La conseguenza è che l’entity caricata nella cache di secondo livello non sarà più caricata dal database fino a quando non viene rimossa dalla cache.

L’utilizzo della cache di secondo livello consente di incrementare in modo notevole le performance delle applicazioni che utilizzano questa caratteristica.

Per utilizzare la cache di secondo livello, dobbiamo modificare il nostro file di configurazione definendo il cache provider che vogliamo utilizzare.

Esistono diverse implementazioni per la cache di secondo livello, in questo caso specifico ci concentreremo sul provider per AppFabric, stupendo prodotto MS  per la gestione di cache distribuita e non solo,  e qui iniziano i dolori. Triste

Purtroppo il provider disponibile qui  è implementato su di una vecchia versione in beta del suddetto prodotto code name: Velocity, quindi con AppFabric non funziona. Triste

A questo punto per poter utilizzare questa caratteristica di NH con AppFabric è necessario:

  • Scaricare il sorgente del progetto NH contrib che comprende i cache provider:
    https://nhcontrib.svn.sourceforge.net/svnroot/nhcontrib nhcontrib
  • Aprire la soluzione NHibernate.Caches.Everything.sln nel percorso ..\nhcontrib\src\NHibernate.Caches  dell’intera soluzione
  • Effettueremo le modifiche solo nel progetto NHibernate.Caches.Velocity
  • Rimuoviamo i riferimenti ai vecchi assembly di Velocity e aggiungiamo i riferimenti ai nuovi assembly Appfabric:
     
    Microsoft.ApplicationServer.Caching.Core.dll
    Microsoft.ApplicationServer.Caching.Client.dll

  • rimpiazziamo il contenuto della classe VelocityClient.cs con questa

ora possiamo ricompilare il tutto, recuperiamo l’assembly NHibernate.Caches.Velocity.dll rigenerato e le dipendenze, che avevamo aggiunto in precedenza, e le referenziamo nel nostro progetto di destinazione.

Infine aggiungiamo al nostro file .config le seguenti istruzioni:

<configSections>
   <section name="hibernate-configuration" type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate"/>
   <section name="dataCacheClient" type="Microsoft.ApplicationServer.Caching.DataCacheClientSection, Microsoft.ApplicationServer.Caching.Core" allowLocation="true" allowDefinition="Everywhere"/>
</configSections>

 

<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
    <session-factory>
    <!- NB. Configurazione Nhibernate omessa ma necessaria ->

   <!-- NH Appfabric 2^ level cache configuration -->
      <property name="cache.use_second_level_cache">true</property> 
        <property name="cache.provider_class">

                       NHibernate.Caches.Velocity.VelocityProvider,NHibernate.Caches.Velocity

      </property>

  </session-factory>
  </hibernate-configuration>

<!-- Appfabric config –>

<dataCacheClient>
    <!-- cache host(s) -->
    <hosts>
      <host name="localhost" cachePort="22233"/>
    </hosts>
</dataCacheClient>

Occhio che la configurazione di AppFabric, può variare a seconda delle impostazioni iniziali che avete fatto in fase d’installazione dello stesso. 

Come per magia NH utilizzerà AppFabric per gestire la cache di secondo livello.

Enjoy A bocca aperta

Published Tuesday, December 13, 2011 12:02 AM by leo.alario
Filed under: , ,
Powered by Community Server (Commercial Edition), by Telligent Systems