Caching von EJB3 EntityBeans
JBoss bietet von Haus aus die Möglichkeit EntityBeans zu cachen. Dazu muss man lediglich Hibernate und seine EntityBeans entsprechend konfigurieren. Vor allem bei sich selten ändernden Beans, wie z.B. Kategorien in einem Shop oder Länder / Sprachen, bietet sich das Caching durchaus an.
In der persistence.xml muss dazu lediglich der CacheProvider für Hibernate entsprechend konfiguriert werden:
<entity-manager> <name>mystore</name> <jta-data-source>java:/MyStoreDS</jta-data-source> <properties> <property name=“hibernate.hbm2ddl.auto“ value=“none“/> <property name=“hibernate.dialect“ value=“org.hibernate.dialect.MySQLDialect“ /> <property name=“hibernate.cache.provider_class“ value=“org.jboss.ejb3.entity.TreeCacheProviderHook“/> <property name=“hibernate.treecache.mbean.object_name“ value=“jboss.cache:service=EJB3EntityTreeCache“/> </properties> </entity-manager>
Im Property “hibernate.treecache.mbean.object_name” wird entsprechend der dahinter liegende TreeCache definiert.
Damit ein EntityBean auch wirklich in den Cache wandert, muss das Bean noch entsprechend zum Cachen markiert werden.
package com.itblogger.beans; @Entity @Cache(usage=CacheConcurrencyStrategy.READ_ONLY) public class Category implements Serializable { int category; String categoryName; }
Weitere Informationen dazu können der Dokumentation zu @Cache und CacheConcurrencyStrategy entnommen werden.
Der Cache selbst kann in der Datei ejb3-entity-cache-service.xml (unter server/default/deploy) oder bei einem eigenen TreeCache genau in dessen XML-Datei gepflegt werden.
<server> <mbean code=“org.jboss.cache.TreeCache“ name=“jboss.cache:service=EJB3EntityTreeCache“> <depends>jboss:service=Naming</depends> <depends>jboss:service=TransactionManager</depends> … <attribute name=“EvictionPolicyConfig“> <config> <attribute name=“wakeUpIntervalSeconds“>5</attribute> <region name=“/_default_“> <attribute name=“maxNodes“>5000</attribute> <attribute name=“timeToLiveSeconds“>1000</attribute> </region> <region name=“/com/itblogger/beans/Category“> <attribute name=“maxNodes“>10</attribute> <attribute name=“timeToLiveSeconds“>5000</attribute> </region> </config> </attribute> … </mbean> </server>
Für jedes Bean können hier zusätzliche Cacheparameter eingestellt werden.