我有一個非常基本的設置:Struts2 web-app,添加到它Ehcache-Web並試圖使其工作。Ehcache web CacheManager.replaceCacheWithDecoratedCache拋出NPE
這裏是我的ehcache.xml
:
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"
updateCheck="false"
dynamicConfig="false"
>
<diskStore path="java.io.tmpdir"/>
<defaultCache
maxElementsInMemory="100"
maxElementsOnDisk="1000"
eternal="false"
overflowToDisk="true"
diskPersistent="false"
memoryStoreEvictionPolicy="LRU"
timeToIdleSeconds="120000"
timeToLiveSeconds="120000"
/>
<cache name="searchDspCache"
maxElementsInMemory="100"
maxElementsOnDisk="1000"
eternal="false"
overflowToDisk="true"
diskPersistent="false"
memoryStoreEvictionPolicy="LRU"
timeToIdleSeconds="120000"
timeToLiveSeconds="120000"
/>
</ehcache>
下面是如何配置的Ehcache Web過濾器
<filter>
<filter-name>searchDspCachingFilter</filter-name>
<filter-class>net.sf.ehcache.constructs.web.filter.SimplePageCachingFilter</filter-class>
<init-param>
<param-name>suppressStackTrace</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>cacheName</param-name>
<param-value>searchDspCache</param-value>
</init-param>
</filter>
當應用程序部署在任一碼頭或Glassfish的,我得到這個錯誤正確前期:
20111118T115824,294 [sales-web] FATAL [Timer-1] (net.sf.ehcache.constructs.web.filter.Filter:201) - Could not initialise servlet filter.
java.lang.NullPointerException
at net.sf.ehcache.CacheManager.replaceCacheWithDecoratedCache(CacheManager.java:950)
at net.sf.ehcache.constructs.web.filter.CachingFilter.doInit(CachingFilter.java:92)
按照以下來自Ehcache網站的說明:
http://ehcache.org/documentation/modules/web-caching
手動下載從他們的回購正確eccache的Web和ehcache的核心來源:
net.sf.ehcache.constructs.web.filter.CachingFilter.doInit(CachingFilter.java:92)
:
https://oss.sonatype.org/content/groups/sourceforge/net/sf/ehcache/
,並檢查代碼的日誌中報告的行是:
/**
* The cache name can be set through init parameters. If it is set it is
* stored here.
*/ <---- this is line 92
protected String cacheName;
at net.sf.ehcache.CacheManager.replaceCacheWithDecoratedCache(CacheManager.java:950)
是:
// NPE guard
if (cacheName == null || cacheName.length() == 0) {
return;
} <-- this is line 950
我知道我狠狠失去了一些東西,但我不知道是什麼。是否有人已經這樣做告訴我我做錯了什麼,或者我錯過了什麼。我只想做一些簡單的HTML內容緩存。 Thankx!
我會試試這個,看起來很有希望,你在正確的軌道上使用正確的源代碼。關於緩存名稱我不知道......該文檔在他們自己的網站上清楚地表明,您的過濾器接受一個cacheName參數,並且您可以放入任何您想要的值,只要您確保您使用相同的值來命名您的ehcache.xml中的緩存...我會在星期日嘗試它並告訴您發生了什麼。感謝名單! –
@AndreiBodnarescu:代碼清楚地表明'SimplePageCachingFilter.getCacheName()'總是返回'「SimplePageCachingFilter」'--) – jeha
是的,先生,是的,你是對的。在我看來,爲了找到正確的代碼,我還沒有更多地解決這個問題。但另一方面,在他們的網站上:http://ehcache.org/documentation/modules/web-caching,如果你滾動到大約一半的文章,你會看到一個SimplePageCachingFilter的例子,它配置了一個名爲cache的「CachePage1CachingFilter」。 –