KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > mvnforum > db > RankCache


1 /*
2  * $Header: /cvsroot/mvnforum/mvnforum/src/com/mvnforum/db/RankCache.java,v 1.8 2006/04/14 17:05:26 minhnn Exp $
3  * $Author: minhnn $
4  * $Revision: 1.8 $
5  * $Date: 2006/04/14 17:05:26 $
6  *
7  * ====================================================================
8  *
9  * Copyright (C) 2002-2006 by MyVietnam.net
10  *
11  * All copyright notices regarding mvnForum MUST remain
12  * intact in the scripts and in the outputted HTML.
13  * The "powered by" text/logo with a link back to
14  * http://www.mvnForum.com and http://www.MyVietnam.net in
15  * the footer of the pages MUST remain visible when the pages
16  * are viewed on the internet or intranet.
17  *
18  * This program is free software; you can redistribute it and/or modify
19  * it under the terms of the GNU General Public License as published by
20  * the Free Software Foundation; either version 2 of the License, or
21  * any later version.
22  *
23  * This program is distributed in the hope that it will be useful,
24  * but WITHOUT ANY WARRANTY; without even the implied warranty of
25  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
26  * GNU General Public License for more details.
27  *
28  * You should have received a copy of the GNU General Public License
29  * along with this program; if not, write to the Free Software
30  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
31  *
32  * Support can be obtained from support forums at:
33  * http://www.mvnForum.com/mvnforum/index
34  *
35  * Correspondence and Marketing Questions can be sent to:
36  * info at MyVietnam net
37  *
38  * @author: Minh Nguyen
39  * @author: Mai Nguyen
40  */

41 package com.mvnforum.db;
42
43 import java.util.ArrayList JavaDoc;
44
45 import com.mvnforum.db.jdbc.RankDAOImplJDBC;
46 import net.myvietnam.mvncore.exception.DatabaseException;
47 import net.myvietnam.mvncore.exception.ObjectNotFoundException;
48
49 public final class RankCache {
50
51     // static singleton variable
52
static private RankCache instance = new RankCache();
53
54     // instance variable
55
private ArrayList JavaDoc beanArray = null;
56
57     /**
58      * A private constructor since this is a Singleton
59      */

60     private RankCache() {
61     }
62
63     /**
64      * Returns the single instance
65      * @return RankCache : the singleton instance.
66      *
67      * NOTE: if use normal singleton pattern, this method should be synchronized
68      */

69     static public RankCache getInstance() {
70         return instance;
71     }
72
73     /**
74      * This is a private method, and a util method
75      * If a method call ensureNewData(), then it MUST be synchronized
76      */

77     private void ensureNewData() throws DatabaseException {
78         if ( RankDAOImplJDBC.isDirty() || (beanArray == null) ) {
79             RankDAOImplJDBC.setDirty(false);
80             beanArray = (ArrayList JavaDoc)DAOFactory.getRankDAO().getRanks();
81         }
82     }
83
84     /**
85      * IMPORTANT NOTE: The caller must not alter the returned collection
86      * Note: since the return value can be accessed in many threads,
87      * we must be sure that this collection is intact. Now we can only
88      * be sure that each object in the collection is intact (default set methods) ,
89      * but we can not prevent the collection from being changed
90      * #@todo Find a way to make the collection immutable
91      */

92     public synchronized ArrayList JavaDoc getBeans() throws DatabaseException {
93         ensureNewData();
94         return beanArray;
95     }
96
97     public synchronized RankBean getBean(int rankID)
98         throws DatabaseException, ObjectNotFoundException {
99
100         ensureNewData();
101         int size = beanArray.size();
102         for (int i = 0; i < size; i++) {
103             RankBean bean = (RankBean)beanArray.get(i);
104             if (bean.getRankID() == rankID) {
105                 return bean;
106             }
107         }
108         //@todo : localize me
109
throw new ObjectNotFoundException("Cannot find the row in table Rank where primary key = (" + rankID + ").");
110     }
111
112     /**
113      * Reload to get the lastest info
114      * Normally, this class will detect all the modifications in the table.
115      * However, call this method to force a reload
116      * Auto call reload after some time (say 1 hour) is also a good idea
117      */

118     public synchronized void reload() throws DatabaseException {
119         RankDAOImplJDBC.setDirty(false);
120         beanArray = (ArrayList JavaDoc)DAOFactory.getRankDAO().getRanks();
121     }
122 }
123
Popular Tags