2

WebLogic 9.1 インスタンスで実行されている Web アプリケーションで EHCache 1.5.0 を使用しています。キャッシュから要素を取得するとき、またはアイテムがキャッシュに存在するかどうかを確認するときに、次のエラーが発生することがあります。他の誰かがこの問題を見たことがありますか? これを修正する方法についての提案は素晴らしいでしょう。

この問題を引き起こすコード:

getMyCache().isKeyInCache(cacheKey)

ehcache 構成:

maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
overflowToDisk="true"
diskPersistent="true"

Spring を使用して CacheManager のインスタンスを取得しています。これが私の Bean 定義です。

   <bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
        <property name="configLocation"><value>classpath:ehcache.xml</value></property>
    </bean>

エラーは次のとおりです。

java.lang.NullPointerException 
                at net.sf.ehcache.Cache.isElementInMemory(Cache.java:1962) 
                at net.sf.ehcache.Cache.isKeyInCache(Cache.java:2075) 
                at com.test.services.impl.ContentServicesImpl.getContentItemFromCache(ContentServicesImpl.java:260) ......

ログには、キャッシュ内のキーを検索する際の NullPointerException の原因を示すものは他にありません。

これを修正する方法についての指針、提案は大歓迎です。これは一貫して発生するわけではなく、1 つの環境でランダムに発生するようです。

4

1 に答える 1

0

スタックトレースを考えると、呼び出し元のスレッドはnullのMemoryStoreを持つキャッシュを認識しているようです(これは不可能なはずです)。これは、CacheManager作成コード(ダブルチェックロック)またはキャッシュ自体のいずれかでメモリの可視性の問題である可能性があると私はひそかに疑っています。Ehcache 1.7.1のフィールドの可視性に関する問題の多くを強化しました(まだリリースされていませんが、数週間以内に)。

それは明確な修正を与えるのを難しくしますが、1つのくだらない考えは、起動の早い段階で1つのスレッドだけがCacheManagerを構築することを保証するいくつかの春の初期化を追加することです。それで問題が解決した場合、それは上記の理論にいくらかの信憑性を与えるでしょう。

于 2009-11-06T19:41:52.847 に答える