1 18 19 package org.apache.roller.ui.rendering.util.cache; 20 21 import java.util.HashMap ; 22 import java.util.Iterator ; 23 import java.util.List ; 24 import java.util.Map ; 25 import org.apache.commons.logging.Log; 26 import org.apache.commons.logging.LogFactory; 27 import org.apache.roller.RollerException; 28 import org.apache.roller.business.runnable.Job; 29 import org.apache.roller.config.RollerConfig; 30 import org.apache.roller.model.RollerFactory; 31 import org.apache.roller.model.UserManager; 32 import org.apache.roller.pojos.StaticTemplate; 33 import org.apache.roller.pojos.Template; 34 import org.apache.roller.pojos.WebsiteData; 35 import org.apache.roller.ui.rendering.Renderer; 36 import org.apache.roller.ui.rendering.RendererManager; 37 import org.apache.roller.ui.rendering.model.ModelLoader; 38 import org.apache.roller.ui.rendering.util.WeblogFeedCache; 39 import org.apache.roller.ui.rendering.util.WeblogFeedRequest; 40 import org.apache.roller.util.cache.CachedContent; 41 42 43 52 public class WeblogCacheWarmupJob implements Job { 53 54 private static Log log = LogFactory.getLog(WeblogCacheWarmupJob.class); 55 56 private Map inputs = null; 58 59 60 public void execute() { 61 62 log.debug("starting"); 63 64 if(inputs != null) { 66 67 List weblogs = (List ) inputs.get("weblogs"); 69 if(weblogs == null) { 70 return; 71 } 72 73 if("true".equals((String ) inputs.get("feed-entries-rss"))) { 75 this.warmupFeedCache(weblogs, "entries", "rss"); 76 } 77 78 if("true".equals((String ) inputs.get("feed-entries-atom"))) { 80 this.warmupFeedCache(weblogs, "entries", "atom"); 81 } 82 } 83 84 log.debug("finished"); 85 } 86 87 88 public Map output() { 89 return null; 90 } 91 92 93 public void input(Map input) { 94 this.inputs = input; 95 } 96 97 98 private void warmupFeedCache(List weblogs, String type, String format) { 99 100 if(weblogs == null) { 101 return; 102 } 103 104 WeblogFeedCache feedCache = WeblogFeedCache.getInstance(); 106 107 long start = System.currentTimeMillis(); 108 109 Iterator allWeblogs = weblogs.iterator(); 110 String weblogHandle = null; 111 while(allWeblogs.hasNext()) { 112 weblogHandle = (String ) allWeblogs.next(); 113 log.debug("doing weblog "+weblogHandle); 114 115 try { 116 WeblogFeedRequest feedRequest = new WeblogFeedRequest(); 118 feedRequest.setWeblogHandle(weblogHandle); 119 feedRequest.setType(type); 120 feedRequest.setFormat(format); 121 122 123 HashMap model = new HashMap (); 125 Map initData = new HashMap (); 126 initData.put("request", null); 127 initData.put("feedRequest", feedRequest); 128 initData.put("weblogRequest", feedRequest); 129 130 String feedModels = RollerConfig.getProperty("rendering.feedModels"); 132 ModelLoader.loadModels(feedModels, model, initData, true); 133 134 138 139 Renderer renderer = null; 141 Template template = new StaticTemplate("templates/feeds/weblog-"+type+"-"+format+".vm", null, "velocity"); 142 renderer = RendererManager.getRenderer(template); 143 144 145 CachedContent rendererOutput = new CachedContent(24567); 147 renderer.render(model, rendererOutput.getCachedWriter()); 148 149 150 rendererOutput.flush(); 152 rendererOutput.close(); 153 154 String key = feedCache.generateKey(feedRequest); 156 feedCache.put(key, rendererOutput); 157 158 } catch(Exception e) { 159 log.error("Error rendering for weblog "+weblogHandle, e); 161 } 162 } 163 164 long end = System.currentTimeMillis(); 165 long time = (end-start)*1000; 166 167 log.info("Completed warmup for "+type+"/"+format+" in "+time+" secs."); 168 169 } 170 171 } 172 | Popular Tags |