|
What this is
Other links
The source code/* * $Header: /cvsroot/mvnforum/mvnforum/src/com/mvnforum/db/ForumCache.java,v 1.6 2005/01/18 11:52:18 minhnn Exp $ * $Author: minhnn $ * $Revision: 1.6 $ * $Date: 2005/01/18 11:52:18 $ * * ==================================================================== * * Copyright (C) 2002-2005 by MyVietnam.net * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or any later version. * * All copyright notices regarding mvnForum MUST remain intact * in the scripts and in the outputted HTML. * The "powered by" text/logo with a link back to * http://www.mvnForum.com and http://www.MyVietnam.net in the * footer of the pages MUST remain visible when the pages * are viewed on the internet or intranet. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * Support can be obtained from support forums at: * http://www.mvnForum.com/mvnforum/index * * Correspondence and Marketing Questions can be sent to: * info@MyVietnam.net * * @author: Minh Nguyen minhnn@MyVietnam.net * @author: Mai Nguyen mai.nh@MyVietnam.net */ package com.mvnforum.db; import java.util.*; import com.mvnforum.db.jdbc.ForumDAOImplJDBC; import net.myvietnam.mvncore.exception.DatabaseException; import net.myvietnam.mvncore.exception.ObjectNotFoundException; public final class ForumCache { // static singleton variable static private ForumCache instance = new ForumCache(); // instance variable private List beanArray = null; /** * A private constructor since this is a Singleton */ private ForumCache() { } /** * Returns the single instance * @return ForumCache : the singleton instance. * * NOTE: if use normal singleton pattern, this method should be synchronized */ static public ForumCache getInstance() { return instance; } /** * This is a private method, and a util method * If a method call ensureNewData(), then it MUST be synchronized */ private synchronized void ensureNewData() throws DatabaseException { if ( ForumDAOImplJDBC.isDirty() || (beanArray == null) ) { ForumDAOImplJDBC.setDirty(false); beanArray = (List)DAOFactory.getForumDAO().getForums(); } } /** * IMPORTANT NOTE: The caller must not alter the returned * collection. Any attempt to modify it will throw an * <code>UnsupportedOperationException. */ public List getBeans() throws DatabaseException { ensureNewData(); return Collections.unmodifiableList(beanArray); } public ForumBean getBean(int forumID) throws DatabaseException, ObjectNotFoundException { ensureNewData(); List beans = beanArray; // We do not want the list to change in the process. int size = beans.size(); for (int i = 0; i < size; i++) { ForumBean bean = (ForumBean)beans.get(i); if (bean.getForumID() == forumID) { return bean; } } //@todo : localize me throw new ObjectNotFoundException("Cannot find the row in table Forum where primary key = (" + forumID + ")."); } public ForumBean getBean(String forumName) throws DatabaseException, ObjectNotFoundException { ensureNewData(); List beans = beanArray; // We do not want the list to change in the process. for (Iterator it = beans.iterator(); it.hasNext();) { ForumBean bean = (ForumBean) it.next(); if (bean.getForumName().equals(forumName)) { return bean; } } //@todo : localize me throw new ObjectNotFoundException("Cannot find a forum with the given name: " + forumName); } public int getNumberOfBeans(int categoryID) throws DatabaseException { ensureNewData(); List beans = beanArray; // We do not want the list to change in the process. int forumsInCategory = 0; int size = beans.size(); for (int i = 0; i < size; i++) { ForumBean bean = (ForumBean)beans.get(i); if (bean.getCategoryID() == categoryID) { forumsInCategory++; } } return forumsInCategory; } /** * Reload to get the lastest info * Normally, this class will detect all the modifications in the table. * However, call this method to force a reload * Auto call reload after some time (say 1 hour) is also a good idea */ public synchronized void reload() throws DatabaseException { ForumDAOImplJDBC.setDirty(true); ensureNewData(); } } |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.