Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在WSO2 ESB 6.6.0中使代理内的缓存无效_Java_Caching_Wso2_Wso2esb_Wso2 Am - Fatal编程技术网

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

Java 如何在WSO2 ESB 6.6.0中使代理内的缓存无效,java,caching,wso2,wso2esb,wso2-am,Java,Caching,Wso2,Wso2esb,Wso2 Am,我想知道如何通过调用代理使缓存中介器创建的缓存无效。 根据本文,我们可以通过使用JMX监控工具来实现这一点。但我们不想做这样的事情 所以我做了一个定制的调解人 import javax.cache.CacheException; import javax.cache.Caching; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.syn

我想知道如何通过调用代理使缓存中介器创建的缓存无效。 根据本文,我们可以通过使用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;
    }
}


基于,我尝试使用一些常量,但似乎一切正常。

缓存实现在以后的版本中被完全重写。因此,使用javaxcachemanager清除缓存在ei6.6.0中不起作用。但是仍然有一个MBean实现使缓存无效


您应该尝试使用一个实现来调用此MBean以使缓存无效。

我同意使用此方法实现MBean,但我不知道MBean如何使用其中的每个数据创建其CacheManager对象。这对tenantDomain或tenantId来说不是问题,如果我能得到它们,这很酷,但在我的中介声明中有一个解决方法或messageContext