Mai 11th, 2006

Caching von EJB3 EntityBeans

Posted by frank in Java, J2EE

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.

No Responses to ' Caching von EJB3 EntityBeans '

Subscribe to comments with RSS or TrackBack to ' Caching von EJB3 EntityBeans '.

Leave a reply

:mrgreen: :neutral: :twisted: :shock: :smile: :???: :cool: :evil: :grin: :oops: :razz: :roll: :wink: :cry: :eek: :lol: :mad: :sad: