[jboss-user] [JBoss Cache: Core Edition] - distributed entity cache (invalidation based)
josey
do-not-reply at jboss.com
Mon Jun 8 16:24:04 EDT 2009
I am trying to deploy distributed caching for a single entity. I am running JBoss AS 5.1.0 with jdk 1.5. I have two nodes running on two separate servers in a single partition.
I see the caching work fine on each single node but the cache does not replicate/invalidate between the two nodes (I'd like to use invalidation).
Test case:
1. Ran a JUnit test that loaded the entity on node1 and node2 so it was in the cache on each node in the partition.
2. Ran a JUnit test that changed the entity on node1.
3. Ran a JUnit test that loaded the entity on node1 and node2.
>From looking at logging in both of the servers I can tell that node2 has the stale version (grabbed the entity from its cache instead of reloading it). I also have looked at the database log to verify that node2 did not try to load the entity when I requested it after it was changed by node1.
I added this to my entity class:
| import org.hibernate.annotations.Cache;
| import org.hibernate.annotations.CacheConcurrencyStrategy;
|
| @Cache (usage=CacheConcurrencyStrategy.TRANSACTIONAL)
|
I added this to my persistence unit.
| <property name="hibernate.cache.use_second_level_cache" value="true"/>
| <property name="hibernate.cache.use_query_cache" value="true"/>
| <property name="hibernate.cache.region.factory_class" value="org.hibernate.cache.jbc2.JndiMultiplexedJBossCacheRegionFactory"/>
| <property name="hibernate.cache.region.jbc2.cachefactory" value="java:CacheManager"/>
| <property name="hibernate.cache.region.jbc2.cfg.entity" value="mvcc-entity"/>
| <!-- Removing this had no effect
| <property name="hibernate.cache.region.jbc2.cfg.query" value="timestamps-cache"/>
| -->
|
Is there some other attribute that must be set in order to have a node notify the other nodes in the partition when a cached entity has changed? mvcc-entity has the property cacheMode set to INVALIDATION_SYNC. I figured that would do it. I also tried using pessimistic-entity but had no luck.
The only change that I have made to jboss-cache-manager-jboss-beans.xml is to set the multiplexer property to ${jboss.default.jgroups.stack:tcp} (did not want to use udp). I did this for each cache entry in this file.
For example,
| <!-- A config appropriate for entity/collection caching that uses MVCC locking -->
| <entry><key>mvcc-entity</key>
| <value>
| <bean name="MVCCEntityCache" class="org.jboss.cache.config.Configuration">
|
| <!-- Node locking scheme -->
| <property name="nodeLockingScheme">MVCC</property>
| <!-- READ_COMMITTED is as strong as necessary for most
| 2nd Level Cache use cases. -->
| <property name="isolationLevel">READ_COMMITTED</property>
| <property name="useLockStriping">false</property>
|
| <!-- Mode of communication with peer caches.
| INVALIDATION_SYNC is highly recommended as the mode for use
| with entity and collection caches. -->
| <property name="cacheMode">INVALIDATION_SYNC</property>
|
| <!-- Name of cluster. Needs to be the same for all members -->
| <property name="clusterName">${jboss.partition.name:DefaultPartition}-mvcc-entity</property>
| <!-- Use a UDP (multicast) based stack. A udp-sync stack might be
| slightly better (no JGroups FC) but we stick with udp to
| help ensure this cache and others like timestamps-cache
| that require FC can use the same underlying JGroups resources.
| <property name="multiplexerStack">${jboss.default.jgroups.stack:udp}</property>
| -->
|
| <!-- Use TCP -->
| <property name="multiplexerStack">${jboss.default.jgroups.stack:tcp}</property>
|
| <!-- Whether or not to fetch state on joining a cluster. -->
| <property name="fetchInMemoryState">false</property>
|
| <!-- The max amount of time (in milliseconds) we wait until the
| state (ie. the contents of the cache) are retrieved from
| existing members at startup. Ignored if FetchInMemoryState=false. -->
| <property name="stateRetrievalTimeout">60000</property>
|
| <!-- Number of milliseconds to wait until all responses for a
| synchronous call have been received. -->
| <property name="syncReplTimeout">17500</property>
|
| <!-- Max number of milliseconds to wait for a lock acquisition -->
| <property name="lockAcquisitionTimeout">15000</property>
|
| <!-- Hibernate 2LC can replicate custom types, so we use marshalling -->
| <property name="useRegionBasedMarshalling">true</property>
| <!-- Must match the value of "useRegionBasedMarshalling" -->
| <property name="inactiveOnStartup">true</property>
|
| <!-- Disable asynchronous RPC marshalling/sending -->
| <property name="serializationExecutorPoolSize">0</property>
| <!-- We have no asynchronous notification listeners -->
| <property name="listenerAsyncPoolSize">0</property>
|
| <property name="evictionConfig">
| <bean class="org.jboss.cache.config.EvictionConfig">
| <property name="wakeupInterval">5000</property>
| <!-- Overall default -->
| <property name="defaultEvictionRegionConfig">
| <bean class="org.jboss.cache.config.EvictionRegionConfig">
| <property name="regionName">/</property>
| <property name="evictionAlgorithmConfig">
| <bean class="org.jboss.cache.eviction.LRUAlgorithmConfig">
| <!-- Evict LRU node once we have more than this number of nodes -->
| <property name="maxNodes">10000</property>
| <!-- And, evict any node that hasn't been accessed in this many seconds -->
| <property name="timeToLiveSeconds">1000</property>
| <!-- Don't evict a node that's been accessed within this many seconds.
| Set this to a value greater than your max expected transaction length. -->
| <property name="minTimeToLiveSeconds">120</property>
| </bean>
| </property>
| </bean>
| </property>
| <property name="evictionRegionConfigs">
| <list>
| <!-- Don't ever evict modification timestamps -->
| <bean class="org.jboss.cache.config.EvictionRegionConfig">
| <property name="regionName">/TS</property>
| <property name="evictionAlgorithmConfig">
| <bean class="org.jboss.cache.eviction.NullEvictionAlgorithmConfig"/>
| </property>
| </bean>
| </list>
| </property>
| </bean>
| </property>
| </bean>
| </value>
| </entry>
|
Thanks.
View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=4236185#4236185
Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=4236185
More information about the jboss-user
mailing list