Hazelcast als Second Level Cache in Hibernate JPA-Provider

Hazelcast stellt als verteiltes In-Memory-Grid eine interessante Möglichkeit dar, einen Distributed Second Level Cache in Hibernate zu realisieren und kann somit als Alternative zu EHCache oder Infinispan verwendet werden.

Die Verwendung ist hierbei so einfach, wie man es auch bereits von der Hazelcast-API gewöhnt ist. Die Binary Distribution liefert zwei jar’s mit deren Hilfen Hazelcast in Hibernate eingebunden werden kann. Welche dieser Jar’s zu verwenden ist, hängt von der jeweiligen Hibernate Version ab.

Hazelcast-hibernate3-xxx.jar stellte einen Cache-Provider für Hibernate Versionen kleiner 3.3 zur Verfügung. Hazelcast-hibernate4-xxx.jar entsprechend eine Cache-Region-Factory für aktuelle Hibernate Versionen. Die entsprechende Bibliothek muss sich neben der eigentlichen Hazelcast Implementierung im classpath befinden.

Es werden je nach Hibernate Konfiguration wie gewohnt sowohl Entities, Collections als auch Queries gecached.

Zum Aktivieren muss über die Hibernate Properties lediglich der Secound Level Cache aktiviert werden und die Cache-Region-Factory von Hazelcast angeben werden.
Dies erfolgt bei Verwendung als JPA-Provider zum Beispiel in der persistence.xml

<property 
   name="hibernate.cache.use_second_level_cache" 
   value="true"
   />
<property 
   name="hibernate.cache.region.factory_class" 
   value="com.hazelcast.hibernate.HazelcastCacheRegionFactory" 
   />

Für ältere Hibernate Versionen muss anstelle der Factory ein Cache-Provider mitgegeben werde.

<property 
   name="hibernate.cache.provider_class" 
   value="com.hazelcast.hibernate.provider.HazelcastCacheProvider"
   />

Die Hibernate Option use_minimal_puts reduziert die Anzahl der put Operationen in den Cache. Bevor ein Objekt abgelegt wird, wird hierbei zuerst geprüft ob das Objekt bereits vorhanden ist. Dies minimiert die Schreibzugriff in den Cache, die Lesezugriffe (get) erhöhen sich jedoch. Bei einem distributed Cache wie in unserem Fall kann diese Option Performance-Vorteile gegenüber der Variante use_minimal_gets erreichen.

<property 
   name="hibernate.cache.use_minimal_puts" 
   value="true" 
   />

Für jede Hibernate Cache Region wird von Hazelcast eine distributed map angelegt. Die Regionen können somit individuell über eine hazelcast.xml Datei im Classpath oder eine anzugsgebende Konfigurationdatei den eigenen Bedürfnissen angepasst werden.

Hier können Eviction-Policies eingestellt werden, aber auch die Backup Strategy welche die Replikation der Daten auf eine bestimmte Anzahl von Knoten erlaubt. Dies ermöglicht es transparent bei Ausfall eines Knoten auf andere noch aktive Knoten zu wechseln.

Short URL for this post: http://wp.me/p4nxik-259
This entry was posted in Java EE, Java Persistence and tagged , , , . Bookmark the permalink.

Leave a Reply