0

Google App Engine v1.7.0 で EHCache 2.6.0 をプログラム (ehcache.xml なし) で使用しています。

以下を使用して CacheManager をインスタンス化する場合:

CacheManager cacheManager = CacheManager.create();

エラーが発生しました:

Caused by: java.lang.RuntimeException: java.security.AccessControlException: access denied (java.lang.RuntimePermission accessDeclaredMembers)
    at java.util.concurrent.atomic.AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl.<init>(AtomicReferenceFieldUpdater.java:217)
    at java.util.concurrent.atomic.AtomicRefe...(length 9029)

私は試した:

CacheManager cacheManager = new CacheManager();

監視をオフにすると:

Configuration configuration = new Configuration();
configuration.setMonitoring(Configuration.Monitoring.OFF.name());
configuration.setUpdateCheck(false);
CacheManager cacheManager = new CacheManager(configuration);

両方について、次のエラーが発生しました。

Caused by: java.lang.NoClassDefFoundError: Could not initialize class net.sf.ehcache.util.lang.VicariousThreadLocal
    at net.sf.ehcache.TransactionController.<init>(TransactionController.java:43)
    at net.sf.ehcache.CacheManager.doInit(CacheManager.java:433)
    at net.sf.ehcache.CacheManager.init(CacheManager.java:374)

これを解決するには?

4

2 に答える 2

3

Ehcachev2.6は現在のAppEngineと互換性がないようです。実行するには、以前のバージョンのehcacheに切り替える必要がありました。長い試行錯誤の末、バージョン2.4.7は安定しているようです。「明らかに」ehcacheによって提供される構成は機能しません。これが私がそれを設定しなければならなかった方法です:

<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="ehcache.xsd" >
    <cacheManagerEventListenerFactory class="" properties=""/>
    <defaultCache
       maxElementsInMemory="10000"
       eternal="false"
       overflowToDisk="false"
       timeToIdleSeconds="120"
       timeToLiveSeconds="120"
       memoryStoreEvictionPolicy="LRU">
    </defaultCache>
<!--Example sample cache-->
    <cache name="sid"
      maxElementsInMemory="100"
      eternal="false"
      timeToIdleSeconds="300"
      timeToLiveSeconds="300"
      memoryStoreEvictionPolicy="LFU"
       />
</ehcache>
于 2012-09-16T16:32:47.967 に答える
1

AppEngine は分散システムであり、リクエストは複数のフロントエンド インスタンスによって自動的に処理されます。このようなセットアップでは、フロントエンド インスタンスでキャッシュ実装 (EHCache) を使用することはできません。これは、EHCache の複数のインスタンスが実行され、1 つの EHCache への書き込みが他の EHCache に反映されないためです。

代わりに、AppEngine 独自のmemcache サービスを使用する必要があります。

于 2012-09-07T08:14:58.490 に答える