たとえば、キャッシュを次のように構成します。
public IgniteCache<String, Object> getOrCreateCache(String cacheName) {
Ignite ignite = Ignition.ignite();
CacheConfiguration<String, Object> cacheCfg = new CacheConfiguration<String, Object>(cacheName);
cacheCfg.setExpiryPolicyFactory(CreatedExpiryPolicy.factoryOf(new Duration(TimeUnit.SECONDS, 30)));
IgniteCache<String, Object> igniteCache = ignite.getOrCreateCache(cacheCfg);
return igniteCache;
}
後で、返された igniteCache から有効期限ポリシーの期間を調べたいとしたらどうでしょう。私は次のハッキーな方法でそれを行うことができますが、それは醜く、正しい方法ではありません:
import javax.cache.configuration.Factory;
import javax.cache.expiry.CreatedExpiryPolicy;
import javax.cache.expiry.Duration;
import org.apache.ignite.IgniteCache;
import org.apache.ignite.configuration.CacheConfiguration;
public class IgniteCacheManager {
private IgniteCache<String, Object> igniteCache;
public IgniteCacheManager(IgniteCache<String, Object> igniteCache) {
this.igniteCache = igniteCache;
}
public long getTimeToLive() {
long timeToLive = 0;
CacheConfiguration configuration = igniteCache.getConfiguration(CacheConfiguration.class);
Factory factory = configuration.getExpiryPolicyFactory();
Object obj = factory.create();
if (obj instanceof CreatedExpiryPolicy) {
CreatedExpiryPolicy cep = (CreatedExpiryPolicy)obj;
Duration dur = cep.getExpiryForCreation();
timeToLive = dur.getDurationAmount();
}
return timeToLive;
}
}
私が取り組んでいる Apache Ignite のバージョンは 1.5.0.final です
ちなみに、Ehcache では、次の方法で簡単に構成を取得できます。
import net.sf.ehcache.Cache;
import net.sf.ehcache.config.CacheConfiguration;
public class EhcacheCacheManager {
private Cache cache;
public EhcacheCacheManager(Cache cache) {
this.cache = cache;
}
public long getTimeToLive() {
long timeToLive = 0;
CacheConfiguration config = cache.getCacheConfiguration();
timeToLive = config.getTimeToLiveSeconds();
return timeToLive;
}
}