Ehcache不支持cluster / multi-vm

时间:2017-07-27 06:48:33

标签: java java-ee jboss ehcache jgroups

我正在尝试为多个vm复制缓存,但它无法运行..... 但是我在尝试将元素放入缓存时遇到了NPE异常      EhcacheManager ehcacheManager = EhcacheManager.getInstance();         缓存缓存= ehcacheManager.getCache(CacheConstant.SAMPLEDISTRIBUTEDCACHE);

缓存为空

在pom.xm中,我使用的是以下版本。

// Pom.xml

        <dependency>
            <groupId>net.sf.ehcache</groupId>
            <artifactId>ehcache-core</artifactId>
            <version>2.6.9</version>
        </dependency>
        <dependency>
           <groupId>net.sf.ehcache</groupId>
           <artifactId>ehcache-jgroupsreplication</artifactId>
           <version>1.7</version>
        </dependency>
        <dependency>
            <groupId>org.jgroups</groupId>
            <artifactId>jgroups</artifactId>
            <version>3.5.0.Final</version>
        </dependency>

我创建了两个servlet来放置并从缓存中获取一个元素。 CacheProducerServlet用于将值放入缓存中,而Consumer用于从缓存中获取/读取值。

web.xml更改

    <servlet>
    <display-name>CacheConsumerServlet</display-name>
    <servlet-name>CacheConsumerServlet</servlet-name>
    <servlet-class>com.ericsson.fdp.prepaid.rs.servlet.CacheConsumerServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>CacheConsumerServlet</servlet-name>
    <url-pattern>/CacheConsumerServlet</url-pattern>
</servlet-mapping>

<servlet>
    <display-name>CacheProducerServlet</display-name>
    <servlet-name>CacheProducerServlet</servlet-name>
    <servlet-class>com.ericsson.fdp.prepaid.rs.servlet.CacheProducerServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>CacheProducerServlet</servlet-name>
    <url-pattern>/CacheProducerServlet</url-pattern>
</servlet-mapping>

我的ehcache.xml更改

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:noNamespaceSchemaLocation="ehcache.xsd" updateCheck="true" monitoring="autodetect" dynamicConfig="true">




    <!--
        Sets the path to the directory where cache .data files are created. If
        the path is a Java System Property it is replaced by its value in the
        running VM. The following properties are translated: user.home -
        User's home directory user.dir - User's current working directory
        java.io.tmpdir - Default temp file path
    -->
    <diskStore path="${cgw.home}/cache/${cgw.instance.name}/cgw.cache" />


<cacheManagerPeerProviderFactory  class="net.sf.ehcache.distribution.jgroups.JGroupsCacheManagerPeerProviderFactory"
properties="connect=UDP(mcast_addr=127.0.0.1;mcast_port=45566;ip_ttl=32;
    mcast_send_buf_size=150000;mcast_recv_buf_size=80000):
    PING(timeout=2000;num_initial_members=6):
    MERGE2(min_interval=5000;max_interval=10000):
    FD_SOCK:VERIFY_SUSPECT(timeout=1500):
    pbcast.NAKACK(gc_lag=10;retransmit_timeout=3000):
    UNICAST(timeout=5000):
    pbcast.STABLE(desired_avg_gossip=20000):
    FRAG:
    pbcast.GMS(join_timeout=5000;join_retry_timeout=2000;
    shun=false;print_local_addr=true)"
    propertySeparator=":"
  />
<cache 
           name="SAMPLEDISTRIBUTEDCACHE"
           maxElementsInMemory="500"
                    eternal="false"
                    timeToIdleSeconds="120"
           timeToLiveSeconds="120"
           overflowToDisk="true"
           maxElementsOnDisk="500"
           diskPersistent="false"
           diskExpiryThreadIntervalSeconds="120"
           memoryStoreEvictionPolicy="LRU"
           statistics="true"
  >


  <cacheEventListenerFactory
                   class="net.sf.ehcache.distribution.jgroups.JGroupsCacheReplicatorFactory"
                   properties="replicateAsynchronously=true, replicatePuts=false,
                   replicateUpdates=true, replicateUpdatesViaCopy=false,
                   replicateRemovals=false" />
  </cache> 

</ehcache>

// CacheProducerServlet.java:用于将值放入缓存

public class CacheProducerServlet extends HttpServlet {

private static Logger loggerManager = Logger.getLogger(CGWContextListener.class);

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
    loggerManager.info( "CacheProducerServlet Start Here");
    PrintWriter out = null;
    String strKey =req.getParameter("key");
    loggerManager.info( "CacheProducerServlet Request Key "+strKey);

    EhcacheManager ehcacheManager = EhcacheManager.getInstance();
    Cache cache = ehcacheManager.getCache(CacheConstant.SAMPLEDISTRIBUTEDCACHE);
    loggerManager.info("CacheProducerServlet Cacke  "+cache);
    loggerManager.info(
            "Putting element in cache with key :" + CacheConstant.SAMPLEDISTRIBUTEDCACHE.getValue() + strKey + " And Value is :" + strKey);
    ehcacheManager.put(cache, CacheConstant.SAMPLEDISTRIBUTEDCACHE.getValue() + strKey, strKey);
    loggerManager.info( "CacheProducerServlet End Here");
    resp.setContentType("text/xml");
    out = resp.getWriter();

    out.println("CacheConsumerServlet Success");

}

}

// CacheConsumerServlet.java:用于从缓存中获取值

public class CacheConsumerServlet extends HttpServlet {

private static Logger loggerManager = Logger.getLogger(CGWContextListener.class);

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {

    loggerManager.info( "CacheConsumerServlet Start Here");
    PrintWriter out = null;
    String strKey = req.getParameter("key");
    loggerManager.info( "CacheConsumerServlet Request Key "+strKey);
    EhcacheManager ehcacheManager = EhcacheManager.getInstance();
    Cache cache = ehcacheManager.getCache(CacheConstant.SAMPLEDISTRIBUTEDCACHE);
    loggerManager.info("CacheConsumerServlet Cacke  "+cache);
    Element element = ehcacheManager.get(cache, CacheConstant.SAMPLEDISTRIBUTEDCACHE.getValue() + strKey);
    loggerManager.info("CacheConsumerServlet Element ->"+element.getValue().toString());
    loggerManager.info("CacheConsumerServlet Element value ->"+element.getValue().toString());
    loggerManager.info("CacheConsumerServlet End Here");

    resp.setContentType("text/xml");
    out = resp.getWriter();
    out.println("CacheConsumerServlet Success");

}

}

// CacheConstant.java

package com.ericsson.fdp.prepaid.core.constants;

public enum CacheConstant {

SAMPLEDISTRIBUTEDCACHE("SAMPLEDISTRIBUTEDCACHE");

private String _value;     private CacheConstant(String value)     {         _value =值;     }

public String getValue()
{
    return _value;
}

}

0 个答案:

没有答案