2012-02-11 6 views
2

Ehcache Cache Serverを使用してblockingCacheを使用して設定することはできますか? ehcache.xmlファイルでこれを設定する方法を見つけるのは難しいです...プログラム的にしかできません。Ehcacheキャッシュサーバー+ BlockingCache?

答えて

1

あなたはプログラムで装飾されたキャッシュを宣言するだけでなく、コンフィギュレーションでは、見ることができます: http://ehcache.org/documentation/apis/cache-decorators#by-configuration

あなたは何が必要ありませんnet.sf.ehcache.constructs.CacheDecoratorFactory実装を追加する必要があると思います。 net.sf.ehcache.constructs.CacheDecoratorFactory#createDecoratedEhcacheに渡されたEhcacheインスタンスに対してパターンマッチングを行い、nullまたはBlockingCacheで装飾されたキャッシュインスタンスを返すケースがあると思います。

ミス時には、常にをキャッシュに戻す(そうでない場合も)ことを確認してください。それ以外の場合、そのキー/セグメントの書き込みロックは解除されません。

public class DefaultCacheDecoratorFactory extends CacheDecoratorFactory { 
    @Override 
    public Ehcache createDecoratedEhcache(Ehcache cache, Properties properties) { 
     return new BlockingCache(cache); 
    } 

    @Override 
    public Ehcache createDefaultDecoratedEhcache(Ehcache cache, Properties properties) { 
     return new BlockingCache(cache); 
    } 
} 

は、このように、あなたのキャッシュ定義の一部としてそれを設定:

6

はehcache.xmlを経由して、あなたのキャッシュのデフォルトのデコレータとしてBlockingCacheを使用するには、まずあなた自身のCacheDecoratorFactoryを実装する必要があり、それはDefaultCacheDecoratorFactoryだと言います:

<cache name="CACHE_NAME" more values here.../> 
    <cacheDecoratorFactory class="whatsoever.DefaultCacheDecoratorFactory"/> 
</cache> 

そして、それは、あなたの装飾されたキャッシュの場合はnullを返しますので、cacheManager.getCache()以外のキャッシュにアクセスするためにcacheManager.getEhCache()を使用。