1 41 package com.mvnforum.db; 42 43 import java.util.Collection ; 44 45 import com.mvnforum.MVNForumConfig; 46 import com.whirlycott.cache.*; 47 import net.myvietnam.mvncore.exception.AssertionException; 48 import net.myvietnam.mvncore.exception.DatabaseException; 49 import net.myvietnam.mvncore.util.DateUtil; 50 import org.apache.commons.logging.Log; 51 import org.apache.commons.logging.LogFactory; 52 53 public class ThreadCache { 54 55 public static final long TIME_OUT = DateUtil.MINUTE * 10; 56 57 private static Log log = LogFactory.getLog(ThreadCache.class); 58 59 static private ThreadCache instance = new ThreadCache(); 61 62 private Cache cache; 64 65 public ThreadCache() { 66 try { 68 if (MVNForumConfig.getEnableCacheThread()) { 69 cache = CacheManager.getInstance().getCache("thread"); 70 } 71 } catch (CacheException ex) { 72 log.error("Cannot get the WhirlyCache. Thread caching is disabled.", ex); 73 } catch (LinkageError e) { 74 log.error("Cannot get the WhirlyCache caused by Package Conflict. Thread caching is disabled.", e); 76 } 77 } 78 79 85 static public ThreadCache getInstance() { 86 return instance; 87 } 88 89 public String getEfficiencyReport() { 90 String result = "No report"; 91 if (cache == null) { 92 if (MVNForumConfig.getEnableCacheThread() == false) { 93 result = "Cache is disabled."; 94 } else { 95 result = "Cache cannot be inited"; 96 } 97 } else if (cache instanceof CacheDecorator) { 98 result = ((CacheDecorator)cache).getEfficiencyReport(); 99 } 100 return result; 101 } 102 103 public void clear() { 104 if (cache != null) { 105 cache.clear(); 106 } 107 } 108 109 public int getPreviousEnableThread(int forumID, int threadID) 110 throws DatabaseException, AssertionException { 111 112 Integer previousThreadID = null; 113 if (cache != null) { 114 StringBuffer buffer = new StringBuffer (128); 115 buffer.append("getPreviousEnableThread").append("_").append(forumID).append("_").append(threadID); 116 String key = buffer.toString(); 117 previousThreadID = (Integer )cache.retrieve(key); 118 if (previousThreadID == null) { 119 int previousTopic = DAOFactory.getThreadDAO().getPreviousEnableThread(forumID, threadID); previousThreadID = new Integer (previousTopic); 121 122 cache.store(key, previousThreadID, TIME_OUT); 123 } 124 } else { 125 int previousTopic = DAOFactory.getThreadDAO().getPreviousEnableThread(forumID, threadID); previousThreadID = new Integer (previousTopic); 127 } 128 129 return previousThreadID.intValue(); 130 } 131 132 public int getNextEnableThread(int forumID, int threadID) 133 throws DatabaseException, AssertionException { 134 135 Integer nextThreadID = null; 136 if (cache != null) { 137 StringBuffer buffer = new StringBuffer (128); 138 buffer.append("getNextEnableThread").append("_").append(forumID).append("_").append(threadID); 139 String key = buffer.toString(); 140 nextThreadID = (Integer )cache.retrieve(key); 141 if (nextThreadID == null) { 142 int previousTopic = DAOFactory.getThreadDAO().getNextEnableThread(forumID, threadID); nextThreadID = new Integer (previousTopic); 144 145 cache.store(key, nextThreadID, TIME_OUT); 146 } 147 } else { 148 int previousTopic = DAOFactory.getThreadDAO().getNextEnableThread(forumID, threadID); nextThreadID = new Integer (previousTopic); 150 } 151 152 return nextThreadID.intValue(); 153 } 154 155 public Collection getEnableGlobalAnnouncements() 156 throws DatabaseException { 157 158 Collection result = null; 159 if (cache != null) { 160 StringBuffer buffer = new StringBuffer (128); 161 buffer.append("getEnableGlobalAnnouncements"); 162 String key = buffer.toString(); 163 result = (Collection )cache.retrieve(key); 164 if (result == null) { 165 result = DAOFactory.getThreadDAO().getEnableGlobalAnnouncements(); 166 167 cache.store(key, result, TIME_OUT); 168 } 169 } else { 170 result = DAOFactory.getThreadDAO().getEnableGlobalAnnouncements(); 171 } 172 173 return result; 174 } 175 176 public Collection getEnableForumAnnouncements_inForum(int forumID) 177 throws DatabaseException { 178 179 Collection result = null; 180 if (cache != null) { 181 StringBuffer buffer = new StringBuffer (128); 182 buffer.append("getEnableForumAnnouncements_inForum").append(forumID); 183 String key = buffer.toString(); 184 result = (Collection )cache.retrieve(key); 185 if (result == null) { 186 result = DAOFactory.getThreadDAO().getEnableForumAnnouncements_inForum(forumID); 187 188 cache.store(key, result, TIME_OUT); 189 } 190 } else { 191 result = DAOFactory.getThreadDAO().getEnableForumAnnouncements_inForum(forumID); 192 } 193 194 return result; 195 } 196 197 public Collection getEnableStickies_inForum(int forumID) 198 throws DatabaseException { 199 200 Collection result = null; 201 if (cache != null) { 202 StringBuffer buffer = new StringBuffer (128); 203 buffer.append("getEnableStickies_inForum").append(forumID); 204 String key = buffer.toString(); 205 result = (Collection )cache.retrieve(key); 206 if (result == null) { 207 result = DAOFactory.getThreadDAO().getEnableStickies_inForum(forumID); 208 209 cache.store(key, result, TIME_OUT); 210 } 211 } else { 212 result = DAOFactory.getThreadDAO().getEnableStickies_inForum(forumID); 213 } 214 215 return result; 216 } 217 218 public Collection getNormalEnableThreads_inForum_withSortSupport_limit(int forumID, int offset, int rowsToReturn, String sort, String order) 219 throws DatabaseException { 220 221 Collection result = null; 222 if (cache != null) { 223 StringBuffer buffer = new StringBuffer (128); 224 buffer.append("getNormalEnableThreads_inForum_withSortSupport_limit"); 225 buffer.append(forumID).append("_"); 226 buffer.append(offset).append("_"); 227 buffer.append(rowsToReturn).append("_"); 228 buffer.append(sort).append("_"); 229 buffer.append(order).append("_"); 230 String key = buffer.toString(); 231 result = (Collection )cache.retrieve(key); 232 if (result == null) { 233 result = DAOFactory.getThreadDAO().getNormalEnableThreads_inForum_withSortSupport_limit(forumID, offset, rowsToReturn, sort, order); 234 235 cache.store(key, result, TIME_OUT); 236 } 237 } else { 238 result = DAOFactory.getThreadDAO().getNormalEnableThreads_inForum_withSortSupport_limit(forumID, offset, rowsToReturn, sort, order); 239 } 240 241 return result; 242 } 243 244 public int getNumberOfEnableThreads_inForum(int forumID) 245 throws DatabaseException, AssertionException { 246 247 Integer result = null; 248 if (cache != null) { 249 StringBuffer buffer = new StringBuffer (128); 250 buffer.append("getNumberOfEnableThreads_inForum").append("_").append(forumID); 251 String key = buffer.toString(); 252 result = (Integer )cache.retrieve(key); 253 if (result == null) { 254 int i = DAOFactory.getThreadDAO().getNumberOfEnableThreads_inForum(forumID); 255 result = new Integer (i); 256 257 cache.store(key, result, TIME_OUT); 258 } 259 } else { 260 int i = DAOFactory.getThreadDAO().getNumberOfEnableThreads_inForum(forumID); 261 result = new Integer (i); 262 } 263 264 return result.intValue(); 265 } 266 267 public int getNumberOfNormalEnableThreads_inForum(int forumID) 268 throws DatabaseException, AssertionException { 269 270 Integer result = null; 271 if (cache != null) { 272 StringBuffer buffer = new StringBuffer (128); 273 buffer.append("getNumberOfNormalEnableThreads_inForum").append("_").append(forumID); 274 String key = buffer.toString(); 275 result = (Integer )cache.retrieve(key); 276 if (result == null) { 277 int i = DAOFactory.getThreadDAO().getNumberOfNormalEnableThreads_inForum(forumID); 278 result = new Integer (i); 279 280 cache.store(key, result, TIME_OUT); 281 } 282 } else { 283 int i = DAOFactory.getThreadDAO().getNumberOfNormalEnableThreads_inForum(forumID); 284 result = new Integer (i); 285 } 286 287 return result.intValue(); 288 } 289 290 } 291 | Popular Tags |