有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Ehcache在群集/多VM中不工作

我正在尝试为多vm复制缓存,但它不起作用。。。。。 但我在尝试将元素放入缓存时遇到了NPE异常,因为 EhcacheManager EhcacheManager=EhcacheManager。getInstance(); Cache=ehcacheManager。getCache(CacheConstant.SAMPLEDISTRIBUTEDCACHE)

缓存正在提交null

在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用于从缓存获取/读取值

网络。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");

}

}

//缓存常数。爪哇

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

公共枚举缓存常量{

SAMPLEDISTRIBUTEDCACHE("SAMPLEDISTRIBUTEDCACHE");

私有字符串_值; 私有缓存常量(字符串值) { _价值=价值; }

public String getValue()
{
    return _value;
}

}


共 (0) 个答案