[英]How to invalidate cache inside a proxy in WSO2 ESB 6.6.0
我想知道如何仅通过调用代理来使缓存调解器创建的缓存无效。
根据文档,我们可以通过使用 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 项目,我尝试使用一些常量,但似乎一切正常。
缓存实现在以后的版本中被完全重写。 因此使用 javax CacheManager 清除缓存在 EI 6.6.0 中不起作用。 但是仍然有一个 MBean 实现使缓存无效。 https://github.com/wso2/carbon-mediation/blob/master/components/mediators/cache/org.wso2.carbon.mediator.cache/src/main/java/org/wso2/carbon/mediator/cache/ MediatorCacheInvalidator.java
您应该尝试一个实现来调用此 MBean 以使缓存无效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.