⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 newsfeedcache.java

📁 这个weblogging 设计得比较精巧
💻 JAVA
字号:
package org.roller.presentation.newsfeeds;import java.io.InputStreamReader;import java.net.URL;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.roller.util.LRUCache2;import com.sun.syndication.feed.synd.SyndFeed;import com.sun.syndication.io.SyndFeedInput;import org.roller.config.RollerConfig;/** * Returns parsed RSS feed by pulling one from a cache or by retrieving and * parging the specified feed using the Flock RSS parser. * <br /> * TODO: use PlanetRoller to implement NewsfeedCache instead. * <br /> * @author Lance Lavandowska * @author Dave Johnson */public class NewsfeedCache{    private static Log mLogger = LogFactory.getFactory().getInstance(            NewsfeedCache.class);    /** Static singleton * */    private static NewsfeedCache mInstance = null;    /** Instance vars * */    private boolean aggregator_enabled = true;    private boolean aggregator_cache_enabled = true;    private int aggregator_cache_timeout = 14400;    /** LRU cache */    LRUCache2 mCache = null;    /** Constructor */    private NewsfeedCache()    {        // lookup the props we need        String enabled = RollerConfig.getProperty("aggregator.enabled");        String usecache = RollerConfig.getProperty("aggregator.cache.enabled");        String cachetime = RollerConfig.getProperty("aggregator.cache.timeout");                if("true".equalsIgnoreCase(enabled))            this.aggregator_enabled = true;                if("true".equalsIgnoreCase(usecache))            this.aggregator_cache_enabled = true;                try {            this.aggregator_cache_timeout = Integer.parseInt(cachetime);        } catch(Exception e) { mLogger.warn(e); }                // finally ... create the cache        this.mCache = new LRUCache2(100, 1000 * this.aggregator_cache_timeout);    }    /** static singleton retriever */    public static NewsfeedCache getInstance()    {        synchronized (NewsfeedCache.class)        {            if (mInstance == null)            {                if (mLogger.isDebugEnabled())                {                    mLogger.debug("Instantiating new NewsfeedCache");                }                mInstance = new NewsfeedCache();            }        }        return mInstance;    }    /**     * Returns a Channel object for the supplied RSS newsfeed URL.     *      * @param feedUrl     *            RSS newsfeed URL.     * @return FlockFeedI for specified RSS newsfeed URL.     */    public SyndFeed getChannel(String feedUrl)    {        SyndFeed feed = null;        try        {            // If aggregator has been disable return null            if (!aggregator_enabled)            {                return null;            }            if (aggregator_cache_enabled)            {                if (mLogger.isDebugEnabled())                {                    mLogger.debug("Newsfeed: use Cache for " + feedUrl);                }                // Get pre-parsed feed from the cache                feed = (SyndFeed) mCache.get(feedUrl);                if (mLogger.isDebugEnabled())                {                    mLogger.debug("Newsfeed: got from Cache");                }                if (feed == null)                {                    try                    {                        // Parse the feed                        SyndFeedInput feedInput = new SyndFeedInput();                        feed = feedInput.build(new InputStreamReader(                                new URL(feedUrl).openStream()));                    }                    catch (Exception e1)                    {                        mLogger.info("Error parsing RSS: " + feedUrl);                    }                }                // Store parsed feed in the cache                mCache.put(feedUrl, feed);                mLogger.debug("Newsfeed: not in Cache");            }            else            {                if (mLogger.isDebugEnabled())                {                    mLogger.debug("Newsfeed: not using Cache for " + feedUrl);                }                try                {                    // Parse the feed                    SyndFeedInput feedInput = new SyndFeedInput();                    feed = feedInput.build(new InputStreamReader(                            new URL(feedUrl).openStream()));                }                catch (Exception e1)                {                    mLogger.info("Error parsing RSS: " + feedUrl);                }            }        }        catch (Exception ioe)        {            if (mLogger.isDebugEnabled())            {                mLogger.debug("Newsfeed: Unexpected exception", ioe);            }        }        return feed;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -