代码之家  ›  专栏  ›  技术社区  ›  MikeHoss

添加JMS信息会破坏EhCache

  •  5
  • MikeHoss  · 技术社区  · 17 年前

    on EhCache's site

    我正在使用:

    • ehcache-1.6.0-beta3
    • ehcache-jm应用-0.3

    我的Spring配置如下:

    <bean id="cacheManager"
          class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
    </bean>  
    <bean id="cacheProvider"
          class="org.springmodules.cache.provider.ehcache.EhCacheFacade">
      <property name="cacheManager" ref="cacheManager" />
    </bean>    
    <ehcache:proxy id="pocDaoCache" refId="pocDao">
        <ehcache:caching methodName="fetch" cacheName="pocCache" />
    </ehcache:proxy>
    

     <diskStore path="c:/projects/cache/demo" />
    
      <defaultCache maxElementsInMemory="50" eternal="false"
      timeToIdleSeconds="120" timeToLiveSeconds="120" overflowToDisk="true" />
    
    
     <cache name="pocCache"
            maxElementsInMemory="10000"
            maxElementsOnDisk="1000"
            eternal="false"
            overflowToDisk="true"
            diskSpoolBufferSizeMB="20"
            timeToIdleSeconds="300"
            timeToLiveSeconds="600"
            memoryStoreEvictionPolicy="LFU"
            / >
    

     <cacheManagerPeerProviderFactory
                 class="net.sf.ehcache.distribution.jms.JMSCacheManagerPeerProviderFactory"
                 properties="initialContextFactoryName=JmsInitialContextFactory,
          userName=myuser,password=mypass,
                     providerURL=tcp://jmsdev1-jndi,tcp://jmsdev2-jndi
                     topicConnectionFactoryBindingName=TCF-00,
                     topicBindingName=MyTopiceName"
                 propertySeparator=","
                 />
    

       org.springframework.beans.factory.BeanCreationException:  
    org.springframework.beans.factory.BeanCreationException: Error creating bean 
    with name 'cacheManager' defined in class path resource [cache-context.xml]: 
    Invocation of init method failed; nested exception is java.lang.NullPointerException
             at org.springframework.beans.factory.support.AbstractAutowireCapableBean
     Factory.initializeBean(AbstractAutowireCapableBeanFactory.java:1336)
             at org.springframework.beans.factory.support.AbstractAutowireCapableBean
     Factory.doCreateBean(AbstractAutowireCapableBeanFactory.java:471)
             at org.springframework.beans.factory.support.AbstractAutowireCapableBean
     Factory$1.run(AbstractAutowireCapableBeanFactory.java:409)
             at java.security.AccessController.doPrivileged(Native Method)
             at org.springframework.beans.factory.support.AbstractAutowireCapableBean
     Factory.createBean(AbstractAutowireCapableBeanFactory.java:380)
             at org.springframework.beans.factory.support.AbstractBeanFactory$1.getOb
     ject(AbstractBeanFactory.java:264)
             at org.springframework.beans.factory.support.DefaultSingletonBeanRegistr
     y.getSingleton(DefaultSingletonBeanRegistry.java:217)
      [snip]
    

    2 回复  |  直到 17 年前
        1
  •  9
  •   MikeHoss    17 年前

     <cacheManagerPeerProviderFactory
            class="net.sf.ehcache.distribution.jms.JMSCacheManagerPeerProviderFactory"
            properties="initialContextFactoryName=com.InitialContextFactory;
    
        userName=uname;password=passwd;
                replicationTopicConnectionFactoryBindingName=TCF;
                replicationTopicBindingName=CACHE;
        providerURL=tcp://server1:7222,tcp://server2:7222;
        getQueueConnectionFactoryBindingName=QCF;
        getQueueBindingName=CACHE_LOAD
        "
        propertySeparator=";"
        />
    

    另一件让我困惑的事情很简单,一旦我意识到这一点——你必须实现自己的密钥生成器,以确保Ehcache在每个JVM上保存具有相同密钥的对象。当你仔细想想,这是完全有道理的。

       <cacheLoaderFactory
            class="net.sf.ehcache.distribution.jms.JMSCacheLoaderFactory"
       properties="initialContextFactoryName=com.InitialContextFactory;
    
        userName=uname;password=passwd;
                replicationTopicConnectionFactoryBindingName=TCF;
                replicationTopicBindingName=CACHE;
        providerURL=tcp://server1:7222,tcp://server2:7222;
        getQueueConnectionFactoryBindingName=QCF;
        getQueueBindingName=CACHE_LOAD
        "
        propertySeparator=";"
        />
    
        2
  •  0
  •   Antony Stubbs    16 年前

    关于密钥生成问题,这实际上是一个已知的问题- MOD-255 。我们将把它修补到 Spring Modules Fork 很快。

    推荐文章