首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

ehcache分布式缓存有关问题!求高手赐教~

2012-09-16 
ehcache分布式缓存问题!求高手赐教~。。。!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!现在要做一个ehcache的分布式

ehcache分布式缓存问题!求高手赐教~。。。!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
现在要做一个ehcache的分布式缓存,两台物理机server1 server2 我在server1里put一个对象 在server2中取不到!
server1 的ehcache.xml

XML code
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd">   <diskStore path="C:/ehcache/session"/>   <!--调用ehcache2的RMI-->   <cacheManagerPeerProviderFactory class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"    properties="peerDiscovery=manual,rmiUrls=//192.168.1.2:40002/userIdcache "/><!--RMI监听40001端口-->    <cacheManagerPeerListenerFactory class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"        properties="hostName=192.168.1.1,port=40001,socketTimeoutMillis=2000"/>            <defaultCache maxElementsInMemory="10000" eternal="false" timeToIdleSeconds="120" timeToLiveSeconds="120" overflowToDisk="true" diskSpoolBufferSizeMB="30" maxElementsOnDisk="10000000" diskPersistent="false" diskExpiryThreadIntervalSeconds="120" memoryStoreEvictionPolicy="LRU">    </defaultCache>        <cache name="userIdcache "        maxElementsInMemory="10000" eternal="false" timeToIdleSeconds="1800" timeToLiveSeconds="0"        overflowToDisk="false" diskSpoolBufferSizeMB="30" maxElementsOnDisk="10000000" diskPersistent="true"        diskExpiryThreadIntervalSeconds="120" memoryStoreEvictionPolicy="LRU">       <!--监听配置-->        <cacheEventListenerFactory class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"            properties="replicateAsynchronously=true, replicatePuts=true, replicateUpdates=true,replicateUpdatesViaCopy= false, replicateRemovals= true " />    </cache></ehcache>

server2的ehcache.xml

XML code
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd">   <diskStore path="C:/ehcache/session"/>   <!--调用ehcache1的RMI-->   <cacheManagerPeerProviderFactory class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"    properties="peerDiscovery=manual,rmiUrls=//192.168.1.1:40001/userIdcache "/><!--RMI监听40002端口-->    <cacheManagerPeerListenerFactory class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"        properties="hostName=192.168.1.2,port=40002,socketTimeoutMillis=2000"/>            <defaultCache maxElementsInMemory="10000" eternal="false" timeToIdleSeconds="120" timeToLiveSeconds="120" overflowToDisk="true" diskSpoolBufferSizeMB="30" maxElementsOnDisk="10000000" diskPersistent="false" diskExpiryThreadIntervalSeconds="120" memoryStoreEvictionPolicy="LRU">    </defaultCache>        <cache name="userIdcache "        maxElementsInMemory="10000" eternal="false" timeToIdleSeconds="1800" timeToLiveSeconds="0"        overflowToDisk="false" diskSpoolBufferSizeMB="30" maxElementsOnDisk="10000000" diskPersistent="true"        diskExpiryThreadIntervalSeconds="120" memoryStoreEvictionPolicy="LRU">       <!--监听配置-->        <cacheEventListenerFactory class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"            properties="replicateAsynchronously=true, replicatePuts=true, replicateUpdates=true,replicateUpdatesViaCopy= false, replicateRemovals= true " />    </cache></ehcache> 



下边是java代码


Java code
public class CacheFactory {    private CacheManager manager;    private static  CacheFactory factory= null;    private CacheFactory(){         manager = new CacheManager("src/ehcache.xml");    }    public static CacheFactory getInstance(){        if(factory==null){            factory = new CacheFactory();        }        return factory;    }    public Cache getCache(){        return manager.getCache("userIdcache");    }    public static void main(String[] args) {        System.out.println(CacheFactory.getInstance().getCache());    }}



server1的java代码
Java code
public class TestCache {    public static void main(String[] args) {        Cache cache = CacheFactory.getInstance().getCache();//这里给cache里边放一个key1        Element element = new Element("key1", "value1");        cache.put(element);        System.out.println("server1: put cache :"+element.getValue());           }}


server2的java代码

Java code
public class TestCache {    public static void main(String[] args) {        Cache cache = CacheFactory.getInstance().getCache();//这里Element为空   获取不到key1          Element element = cache.get("key1");        System.out.println("server2:"+element.getValue());                   }}







就是上边获取不到!!!!!!求大神赐教~~~~~~~~

[解决办法]
配置上差不多,看不出来明显错误。
看一下项目有无报错,也可以选用不同版本试试。
也可以试试memcache,对缓存集群支持的比ehcache要好。
[解决办法]
XML配置文件里很多值最后带了空格,这个是粘贴在帖子里出现的吗?

请检查自己的文件
例:

<cacheManagerPeerProviderFactory class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory" 
properties="peerDiscovery=manual,rmiUrls=//192.168.1.1:40001/userIdcache空格"/>

热点排行