繁体   English   中英

如何在 WSO2 ESB 6.6.0 中使代理内的缓存无效

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM