Wildfly 10.1 で JCache (Infinispan) を使用しているときに、次の問題に遭遇しました。5 分間の CreatedExpiryPolicy を使用した新しいキャッシュ (テストキャッシュ) を作成しました。
キャッシュをいじってみると、同じキーを 2 回入力すると、キャッシュ エントリが ImmortalCacheEntry に変換されるため、エントリが永久にキャッシュに残ることに気付きました。remove と put for updates を使用してこの問題を回避できることはわかっていますが、これは Infinspan のバグのように思えます。
CreatedExpiryPolicy の JavaDoc は、更新が現在の有効期限に影響を与えないことを明確に示しています。
CachingProvider cachingProvider = Caching.getCachingProvider();
CacheManager cacheManager = cachingProvider.getCacheManager();
MutableConfiguration<Object, Object> config = new MutableConfiguration<>()
.setTypes(Object.class, Object.class)
.setStoreByValue(true)
.setStatisticsEnabled(true)
.setManagementEnabled(true)
.setExpiryPolicyFactory(CreatedExpiryPolicy.factoryOf(new Duration(TimeUnit.MINUTES, 5)));
Cache<Object, Object> cache = cacheManager.createCache("test-cache", config);
cache.put("key", "value"); // MortalCacheEntry{key=key, value=value}}
cache.put("key", "value"); // ImmortalCacheEntry{key=key, value=value}}
javax.cache.expiry.CreatedExpiryPolicy からの抜粋
/**
* {@inheritDoc}
*/
@Override
public Duration getExpiryForUpdate() {
//updating a cache entry has no affect on the current expiry duration
return null;
}
これがバグなのか、それとも間違って使用しているのかを明確にするのを手伝ってくれる人はいますか? バグの場合は、新しい JIRA の問題を作成します。