如何在WSO2 ESB 6.6.0中使代理服务器的缓存无效?

问题描述 投票:0回答:1

我想知道如何通过调用代理服务器来使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创建的缓存无效?

java caching wso2 wso2esb wso2-am
1个回答
1
投票

缓存的实现在后来的版本中被完全重写了。因此,在EI 6.6.0中,使用javax CacheManager来清除缓存是行不通的。但是仍然有一个MBean实现来使缓存无效。https:/github.comwso2carbonmediationblobmastercomponentsmediatorscacheorg.wso2.carbon.mediator.cachesrcmainjavaorgwso2carbonmediatorcacheMediatorCacheInvalidator.java。

你应该尝试实现调用这个MBean来使缓存无效。

© www.soinside.com 2019 - 2024. All rights reserved.