EH缓存RMI复制无法正常工作

时间:2014-05-02 12:56:46

标签: hibernate caching rmi ehcache

我试图在两台tomcat服务器上使用RMI设置EHcache复制。设置如下 -

  1. 两台服务器server1.com& server2.com
  2. 没有阻止连接的防火墙
  3. 在两台服务器上部署的应用程序testApp
  4. 使用hiberate查询统计信息检查缓存中的命中/未命中
  5. 我的ehcache.xml配置如下,适用于server1.com

    <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="ehcache.xsd" updateCheck="true"
    monitoring="autodetect" dynamicConfig="true">
    
    
       <!-- Configure the default behavior of caches defined in this server -->
    <defaultCache maxElementsInMemory="100" eternal="false" timeToIdleSeconds="120" timeToLiveSeconds="200">
    </defaultCache>
    
    <cacheManagerPeerProviderFactory class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
            properties="peerDiscovery=manual,rmiUrls=//server2.com:40001/testCache"/>
    
    <!-- Configure a cache manager peer listener that listens for messages from peers -->
    <cacheManagerPeerListenerFactory class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"
            properties="hostName=solr2.souq.com, port=40001,socketTimeoutMillis=2000"/>
    
    <cache name="testCache" eternal="false" timeToIdleSeconds="100" 
    timeToLiveSeconds="100" overflowToDisk="false">
    <cacheEventListenerFactory class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
    properties="replicateAsynchronously=true, replicatePuts=true, replicateUpdates=true,
    replicateUpdatesViaCopy=false, replicateRemovals=true "/>
    </cache>
    

    对于server2.com,rmiUrl是唯一的修改

    <cacheManagerPeerProviderFactory    class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
            properties="peerDiscovery=manual,rmiUrls=//server2.com:40001/testCache"/>
    

    测试这种安排,

    1. 我在server1.com上查询实体(缓存未命中)
    2. 在server1.com上再次查询相同的实体会给缓存命中。
    3. 在server2.com上查询此实体会再次出现缓存错误(如果发生复制,它应该会触发缓存)
    4. 请告诉我这里出了什么问题?

1 个答案:

答案 0 :(得分:1)

找到解决方案..发布在这里以防任何人在同一个冰山上挣扎 -

我需要指示实体使用我创建的testCache区域。默认情况下,除非hbm.xml文件中的“cache-region”标记明确提到,否则所有实体都使用默认缓存区域