Grails的。 ehcache在启动期间抛出`cache foo已经存在'

时间:2013-01-06 10:47:50

标签: grails apache-camel ehcache terracotta

具有ehcache配置:

<ehcache>                                                                                                                                                                                                                                      

  <terracottaConfig url="192.168.1.4:9510"/>                                                                                                                                                                                                           

  <defaultCache                                                                                                                                                                                                                                
      maxElementsInMemory="50"                                                                                                                                                                                                                 
      eternal="false"                                                                                                                                                                                                                          
      timeToIdleSeconds="20"                                                                                                                                                                                                                   
      timeToLiveSeconds="20"                                                                                                                                                                                                                   
      overflowToDisk="false"                                                                                                                                                                                                                   
      diskPersistent="false"                                                                                                                                                                                                                   
      memoryStoreEvictionPolicy="LRU"                                                                                                                                                                                                          
      />                                                                                                                                                                                                                                       

  <cache name="foo"                                                                                                                                                                                                              
         maxElementsInMemory="50000"                                                                                                                                                                                                           
         eternal="true">                                                                                                                                                                                                                       
    <terracotta />                                                                                                                                                                                                                             
  </cache>                                                                                                                                                                                                                                     

</ehcache> 

它不起作用,应用程序只是没有连接到terracotta服务器,但是在启动时会抛出这样的异常:

 net.sf.ehcache.ObjectExistsException: Cache foo already exists. 

当我启用ehcache调试日志时,我没有看到我的ehcache.xml被加载到某个地方(通过另一个ehcache.xml,它位于加载某个jar文件的类路径中)。可能有什么问题?

我的grails版本为2.1.1ehcache.xml位于grails-app/conf目录。

更新1 还有一个解释。名为foo的缓存在ehcache.xml中使用,在代码中用作referece(实际上在Apache Camel路由中使用('cache:// foo')。当我在代码中重命名foobar(例如,路径现在看起来像('cache:// bar')它会抛出Cache bar already exists的异常。所以,异常不是来自ehcache.xml配置文件,而是来自代码引用按名称缓存。任何建议都将受到高度赞赏。

更新2 似乎引发了异常,因为在引用cache://foo的camel路由中有2个位置。当达到第二个引用时,它会抛出该异常。所以主要的问题是,为什么应用程序在启动时看不到ehcache.xml?它应该热身并准备cache://foo以备将来使用。

更新3 它显然在grails 1.3.7之前有效。现在它不适用于grails 2.1.1

1 个答案:

答案 0 :(得分:0)

当我使用-noreloading选项运行grails时,它运行良好。必须是一些类路径问题。