/*
- * Copyright (C) 2001, 2002 The Mir-coders group
+ * Copyright (C) 2001-2006 The Mir-coders group
*
* This file is part of Mir.
*
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* In addition, as a special exception, The Mir-coders gives permission to link
- * the code of this program with the com.oreilly.servlet library, any library
- * licensed under the Apache Software License, The Sun (tm) Java Advanced
- * Imaging library (JAI), The Sun JIMI library (or with modified versions of
- * the above that use the same license as the above), and distribute linked
- * combinations including the two. You must obey the GNU General Public
- * License in all respects for all of the code used other than the above
- * mentioned libraries. If you modify this file, you may extend this exception
- * to your version of the file, but you are not obligated to do so. If you do
- * not wish to do so, delete this exception statement from your version.
+ * the code of this program with any library licensed under the Apache Software License,
+ * and distribute linked combinations including the two. You must obey the
+ * GNU General Public License in all respects for all of the code used other than
+ * the above mentioned libraries. If you modify this file, you may extend this
+ * exception to your version of the file, but you are not obligated to do so.
+ * If you do not wish to do so, delete this exception statement from your version.
*/
-
package mir.storage.store;
/**
* @version 1.0
*/
-import java.util.LinkedList;
-import java.util.ListIterator;
+import mir.log.LoggerWrapper;
+import mir.misc.StringUtil;
import javax.servlet.http.HttpServletRequest;
-
-import mir.misc.Logfile;
-import mir.misc.StringUtil;
+import java.util.LinkedList;
+import java.util.ListIterator;
public class StoreContainer {
+ private final static int DEFAULT_SIZE = 10;
+ private static int uniqueCounter = 10000;
- private final static int DEFAULT_SIZE=10;
- private static Logfile storeLog;
- private static int uniqueCounter=10000;
+ private LinkedList container;
+ private StoreContainerType stocType;
+ private int maxSize = DEFAULT_SIZE, uniqueId;
+ private int addCount = 0, removeCount = 0, storeOutCount;
+ private int hitCount = 0, missCount = 0;
+ private static ObjectStore o_store = ObjectStore.getInstance();
- private LinkedList container;
- private StoreContainerType stocType;
- private int maxSize=DEFAULT_SIZE, uniqueId;
- private int addCount=0,removeCount=0,storeOutCount;
- private int hitCount=0,missCount=0;
- private static ObjectStore o_store = ObjectStore.getInstance();
+ protected LoggerWrapper logger = new LoggerWrapper("Database.ObjectStore");
- // avoid construction without parameters
- private StoreContainer() {};
+ // avoid construction without parameters
+ private StoreContainer() {}
- public StoreContainer(StoreContainerType stoc_type) {
- this.uniqueId=++uniqueCounter;
- this.stocType=stoc_type;
- this.container=new LinkedList();
+
+ public StoreContainer(StoreContainerType stoc_type) {
+ this.uniqueId = ++uniqueCounter;
+ this.stocType = stoc_type;
+ this.container = new LinkedList();
int defaultSize = stoc_type.getDefaultSize();
- String confProperty = stoc_type.getConfPrefix()+".DefaultSize";
+ String confProperty = stoc_type.getConfPrefix() + ".DefaultSize";
String confedSize = o_store.getConfProperty(confProperty);
- if ( confedSize!=null ) {
- this.maxSize = StringUtil.parseInt (confedSize, defaultSize);
+ if (confedSize != null) {
+ this.maxSize = StringUtil.parseInt(confedSize, defaultSize);
}
- }
-
- public StoreContainer(StoreContainerType stoc_type, int maxSize) {
- this();
- this.maxSize=maxSize;
- }
-
+ }
+ public StoreContainer(StoreContainerType stoc_type, int maxSize) {
+ this();
+ this.maxSize = maxSize;
+ }
- public synchronized StorableObject use(StoreIdentifier sid) {
+ public synchronized StorableObject use(StoreIdentifier sid) {
int hit = container.indexOf(sid);
- if (hit>=0) {
- StoreIdentifier hitSid = (StoreIdentifier)container.get(hit);
- if ( hitSid!=null ) {
- hitCount++;
- return hitSid.use();
- }
+ if (hit >= 0) {
+ StoreIdentifier hitSid = (StoreIdentifier) container.get(hit);
+ if (hitSid != null) {
+ hitCount++;
+ return hitSid.use();
+ }
}
missCount++;
return null;
- }
-
- public boolean has(StoreIdentifier sid) {
- return container.contains(sid);
- }
-
- public void add(StoreIdentifier sid) {
- if ( sid != null && sid.hasReference() ) {
- if ( has(sid) ) {
- moveToHead(sid);
- System.err.println("OBJECTStore: tried to add sid " + sid.toString() +
- " that was already in store.");
+ }
+
+ public boolean has(StoreIdentifier sid) {
+ return container.contains(sid);
+ }
+
+ public void add(StoreIdentifier sid) {
+ if (sid != null && sid.hasReference()) {
+ if (has(sid)) {
+ moveToHead(sid);
+ logger.debug("OBJECTStore: tried to add sid " + sid.toString() + " that was already in store.");
}
- else {
- container.addFirst(sid);
+ else {
+ container.addFirst(sid);
shrinkIfNecessary();
addCount++;
- }
- }
- }
-
- /**
- * Method: invalidate(StorableObject sto)
- * Description: finds @see StorableObject, propagates invalidation to
- * @see StoreIdentifier and removes StoreIdentifier from
- * list.
- */
- public synchronized void invalidate(StoreIdentifier search_sid) {
- if (search_sid!=null) {
+ }
+ }
+ }
+
+ /**
+ * Method: invalidate(StorableObject sto)
+ * Description: finds @see StorableObject, propagates invalidation to
+ * @see StoreIdentifier and removes StoreIdentifier from
+ * list.
+ */
+ public synchronized void invalidate(StoreIdentifier search_sid) {
+ if (search_sid != null) {
int hit = container.indexOf(search_sid);
- if (hit >0 ) {
- StoreIdentifier sid = (StoreIdentifier)container.get(hit);
+ if (hit >= 0) {
+ StoreIdentifier sid = (StoreIdentifier) container.get(hit);
container.remove(sid);
sid.invalidate();
removeCount++;
}
}
- }
+ }
public synchronized void invalidate() {
StoreIdentifier sid;
while (container.size() > 0) {
- sid=(StoreIdentifier)container.getLast();
+ sid = (StoreIdentifier) container.getLast();
container.removeLast();
sid.invalidate();
}
}
- /**
- * Method: setSize
- * Description: readjusts StoreContainer size to value.
- *
- */
- public void setSize(int size) {
- if (size <0) return;
+ /**
+ * Method: setSize
+ * Description: readjusts StoreContainer size to value.
+ *
+ */
+ public void setSize(int size) {
+ if (size < 0)
+ return;
shrinkToSize(size);
- this.maxSize=size;
- }
+ this.maxSize = size;
+ }
- private void shrinkIfNecessary() { shrinkToSize(maxSize); }
+ private void shrinkIfNecessary() {
+ shrinkToSize(maxSize);
+ }
private void shrinkToSize(int size) {
- if ( size < container.size() ) {
- // shrink
- while (size < container.size() ) {
- StoreIdentifier sid = (StoreIdentifier)container.getLast();
- container.remove(sid);
+ if (size < container.size()) {
+ // shrink
+ while (size < container.size()) {
+ StoreIdentifier sid = (StoreIdentifier) container.getLast();
+ container.remove(sid);
sid.release();
storeOutCount++;
- }
- }
+ }
+ }
}
private synchronized void moveToHead(StoreIdentifier sid) {
- if ( sid!=null ) {
+ if (sid != null) {
container.remove(sid);
container.addFirst(sid);
}
}
- /**
- * Method: toString()
- * Description: gives out statistical Information, viewable via
- * @see ServletStoreInfo.
- *
- * @return String
- */
- public String toString() {
+ /**
+ * Method: toString()
+ * Description: gives out statistical Information, viewable via
+ * @see ServletStoreInfo
+ *
+ * @return String
+ */
+ public String toString() {
return toHtml(null);
- }
+ }
public String toHtml(HttpServletRequest req) {
- boolean showingContent=false;
- float hitRatio=0;
- long divisor=hitCount+missCount;
- if (divisor>0) hitRatio=(float)hitCount/(float)divisor;
- hitRatio*=100;
-
- StringBuffer sb = new StringBuffer("StoreContainer id: ");
- sb.append(uniqueId).append(" for ");
- sb.append(stocType.toString());
- if ( req!=null ) {
+ boolean showingContent = false;
+ float hitRatio = 0;
+ long divisor = hitCount + missCount;
+ if (divisor > 0)
+ hitRatio = (float) hitCount / (float) divisor;
+ hitRatio *= 100;
+
+ StringBuffer sb = new StringBuffer("StoreContainer id: ");
+ sb.append(uniqueId).append(" for ");
+ sb.append(stocType.toString());
+ if (req != null) {
String show = req.getParameter("stoc_show");
- if ( show!=null && show.equals(""+uniqueId) ) {
+ if (show != null && show.equals("" + uniqueId)) {
// show all entries in container
sb.append(" [<b>showing</b>]");
- showingContent=true;
+ showingContent = true;
}
else
- sb.append(" [<a href=\"?stoc_show="+uniqueId+"\">show</a>]");
+ sb.append(" [<a href=\"?stoc_show=" + uniqueId + "\">show</a>]");
}
sb.append("\n [current/maximum size: ");
- sb.append(container.size()).append("/").append(maxSize);
- sb.append("]\n [added/stored out/removed: ").append(addCount).append("/");
- sb.append(storeOutCount).append("/").append(removeCount).append("]\n [hit/miss/ratio: ");
+ sb.append(container.size()).append("/").append(maxSize);
+ sb.append("]\n [added/stored out/removed: ").append(addCount).append("/");
+ sb.append(storeOutCount).append("/").append(removeCount).append(
+ "]\n [hit/miss/ratio: ");
sb.append(hitCount).append("/").append(missCount).append("/");
sb.append(hitRatio).append("%]\n");
if (showingContent) {
sb.append(" <b>Container contains following references:</b>\n ");
ListIterator it = container.listIterator();
- while ( it.hasNext() ) {
- StoreIdentifier sid = (StoreIdentifier)it.next();
+ while (it.hasNext()) {
+ StoreIdentifier sid = (StoreIdentifier) it.next();
sb.append(sid.toString()).append("\n ");
}
sb.append("<b>End of List</b>\n\n");
}
- return sb.toString();
- }
+ return sb.toString();
+ }
}
\ No newline at end of file