我想知道如何通过调用代理服务器来使Cache Mediator创建的缓存失效。根据 文档 我们可以通过使用JMX监控工具来实现。但是我们不想做这样的事情。
所以我做了一个自定义的调解器
import javax.cache.CacheException;
import javax.cache.Caching;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.synapse.MessageContext;
import org.apache.synapse.mediators.AbstractMediator;
public class CacheInvalidateMediator extends AbstractMediator
{
private static final Log log = LogFactory.getLog(CacheInvalidateMediator.class);
public boolean mediate(MessageContext synCtx)
{
try
{
Caching.getCacheManager("cacheManager").getCache("mediatorCache").removeAll();
log.info("Total mediator cache has been invalidated.");
}
catch(CacheException cacheException)
{
throw new CacheException("Error occurred while invalidating mediator cache. " + cacheException);
}
return true;
}
}
它在EI 6.2.0中可以使用,但现在在EI 6.6.0中已经废弃了,我现在不知道如何做同样的事情。你有什么想法吗?
请注意。
编辑
我试着对getCaches()进行迭代。似乎我对缓存管理器的名称不正确。
public class CacheInvalidateMediator extends AbstractMediator {
private static final Log log = LogFactory.getLog(CacheInvalidateMediator.class);
public boolean mediate(MessageContext context) {
try {
log.info("JAVA REMOVING CACHE...");
log.info(Caching.getCacheManager("cacheManager"));
log.info(Caching.getCacheManager("cache"));
Iterable<Cache<?, ?>> iterable1 = Caching.getCacheManagerFactory().getCacheManager("__default__").getCaches();
log.info("iterate :");
for(Cache<?, ?> cache : iterable1) {
log.info("cache : "+cache.getName());
cache.removeAll();
}
Iterable<Cache<?, ?>> iterable2 = Caching.getCacheManagerFactory().getCacheManager("cache").getCaches();
log.info("iterate :");
for(Cache<?, ?> cache : iterable2) {
log.info("cache : "+cache.getName());
cache.removeAll();
}
log.info("Total mediator cache has been invalidated.");
log.info("JAVA CACHE INVALIDATE");
} catch (Exception e) {
log.info(e.toString());
}
return true;
}
}
基于 github项目我试着使用一些常量,但似乎什么都能用,我想知道怎样才能使Cache Mediator创建的缓存无效?
缓存的实现在后来的版本中被完全重写了。因此,在EI 6.6.0中,使用javax CacheManager来清除缓存是行不通的。但是仍然有一个MBean实现来使缓存无效。https:/github.comwso2carbonmediationblobmastercomponentsmediatorscacheorg.wso2.carbon.mediator.cachesrcmainjavaorgwso2carbonmediatorcacheMediatorCacheInvalidator.java。
你应该尝试实现调用这个MBean来使缓存无效。