簡體   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