📄 newsfeedcache.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 + -