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 _______________________________________________ jboss-user mailing list jboss-user@lists.jboss.org https://lists.jboss.org/mailman/listinfo/jboss-user