JCache Infinspan在条目更新时创建了不朽的东西

时间:2018-02-15 09:33:50

标签: java-ee jboss wildfly-10 infinispan jcache

在Wildfly 10.1上使用JCache(Infinispan)时,我偶然发现了以下问题。我创建了一个新的缓存(test-cache),其中我使用了CreatedExpiryPolicy,持续时间为5分钟。

在使用缓存后,我注意到如果我将相同的密钥放两次,缓存条目将转换为ImmortalCacheEntry,因此该条目将永远保留在缓存中。我知道我可以通过使用删除和更新来解决这个问题,但对我来说这听起来像是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问题。

0 个答案:

没有答案