You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by fr...@apache.org on 2002/01/20 13:13:38 UTC
cvs commit: jakarta-commons-sandbox/simplestore/src/java/org/apache/commons/simplestore SynchronizedStore.java Store.java SoftRefMemoryStore.java MRUMemoryStore.java JispFilesystemStore.java
froehlich 02/01/20 04:13:38
Modified: simplestore/src/java/org/apache/commons/simplestore
SynchronizedStore.java Store.java
SoftRefMemoryStore.java MRUMemoryStore.java
JispFilesystemStore.java
Log:
Changed the Store interface. It's now extended by the java.util.Map interface.
Revision Changes Path
1.2 +69 -41 jakarta-commons-sandbox/simplestore/src/java/org/apache/commons/simplestore/SynchronizedStore.java
Index: SynchronizedStore.java
===================================================================
RCS file: /home/cvs/jakarta-commons-sandbox/simplestore/src/java/org/apache/commons/simplestore/SynchronizedStore.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- SynchronizedStore.java 15 Jan 2002 20:30:49 -0000 1.1
+++ SynchronizedStore.java 20 Jan 2002 12:13:37 -0000 1.2
@@ -8,13 +8,18 @@
package org.apache.commons.simplestore;
+import java.util.Set;
+import java.util.Collection;
+import java.util.Map;
import java.io.IOException;
/**
*
* @author Juozas Baliuka <a href="mailto:baliuka@mwm.lt">
* baliuka@mwm.lt</a>
- * @version $Revision: 1.1 $
+ * @author Gerhard Froehlich <a href="mailto:g-froehlich@gmx.de">
+ * g-froehlich@gmx.de</a>
+ * @version $Revision: 1.2 $
*/
final class SynchronizedStore
implements Store {
@@ -30,22 +35,13 @@
}
/**
- * Returns the list of used keys as an Enumeration of Objects.
- */
- public java.util.Enumeration keys() {
- synchronized(store){ // not very meaningful here
- return store.keys();
- }
- }
-
- /**
* Remove the object associated to the given key.
*
* @param key the Key Object
*/
- public void remove(Object key) {
- synchronized(store){
- store.remove(key);
+ public Object remove(Object key) {
+ synchronized(store) {
+ return store.remove(key);
}
}
@@ -55,7 +51,7 @@
* @param key the Key Object
*/
public boolean containsKey(Object key) {
- synchronized(store){
+ synchronized(store) {
return store.containsKey(key);
}
}
@@ -64,36 +60,14 @@
* Frees some object out of the Store.
*/
public void free() {
- synchronized(store){
+ synchronized(store) {
store.free();
}
}
- /**
- * Store the given object in a persistent state. It is up to the
- * caller to ensure that the key has a persistent state across
- * different JVM executions.
- *
- * @param key the Key Object
- * @param value the Value Object
- */
- public void store(Object key, Object value) throws IOException {
- synchronized(store){
- store.store(key,value);
- }
- }
-
- /**
- * Holds the given object in a volatile state. This means
- * the object store will discard held objects if the
- * virtual machine is restarted or some error happens.
- *
- * @param key the Key Object
- * @param value the Value Object
- */
- public void hold(Object key, Object value) throws IOException {
- synchronized(store){
- store.hold(key,value);
+ public Object put(Object key, Object value) {
+ synchronized(store) {
+ return store.put(key,value);
}
}
@@ -103,8 +77,62 @@
* @param key the Key Object
*/
public Object get(Object key) {
- synchronized(store){
+ synchronized(store) {
return store.get(key);
}
+ }
+
+ public Set keySet() {
+ synchronized(store) {
+ return store.keySet();
+ }
+ }
+
+ public boolean containsValue(Object value) {
+ synchronized(store) {
+ return store.containsValue(value);
+ }
+ }
+
+ public boolean isEmpty() {
+ synchronized(store) {
+ return store.isEmpty();
+ }
+ }
+
+ public int size() {
+ synchronized(store) {
+ return store.size();
+ }
+ }
+
+ public void putAll(Map t) {
+ synchronized(store) {
+ store.putAll(t);
+ }
+ }
+
+ public void clear() {
+ synchronized(store) {
+ store.clear();
+ }
+ }
+
+ public Collection values() {
+ synchronized(store) {
+ return store.values();
+ }
+ }
+
+ public Set entrySet() {
+ synchronized(store) {
+ return store.entrySet();
+ }
+ }
+
+ public Store getNextStore() {
+ synchronized(store) {
+ return store.getNextStore();
+ }
}
}
1.8 +10 -48 jakarta-commons-sandbox/simplestore/src/java/org/apache/commons/simplestore/Store.java
Index: Store.java
===================================================================
RCS file: /home/cvs/jakarta-commons-sandbox/simplestore/src/java/org/apache/commons/simplestore/Store.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- Store.java 15 Jan 2002 19:54:24 -0000 1.7
+++ Store.java 20 Jan 2002 12:13:37 -0000 1.8
@@ -8,8 +8,7 @@
package org.apache.commons.simplestore;
-import java.io.IOException;
-import java.util.Enumeration;
+import java.util.Map;
/**
* Interface for the Store implementations
@@ -17,56 +16,19 @@
* @author Gerhard Froehlich <a href="mailto:g-froehlich@gmx.de">
* g-froehlich@gmx.de</a>
*/
-public interface Store {
-
+public interface Store extends Map {
+
/**
- * Get the object associated to the given unique key.
+ * Returns the next Store in the tree
*
- * @param key the Key Object
+ * @return next Store in the tree
*/
- Object get(Object key);
-
+ Store getNextStore();
+
/**
- * Store the given object in a persistent state. It is up to the
- * caller to ensure that the key has a persistent state across
- * different JVM executions.
- *
- * @param key the Key Object
- * @param value the Value Object
- */
- void store(Object key, Object value) throws IOException;
-
- /**
- * Holds the given object in a volatile state. This means
- * the object store will discard held objects if the
- * virtual machine is restarted or some error happens.
- *
- * @param key the Key Object
- * @param value the Value Object
- */
- void hold(Object key, Object value) throws IOException;
-
- /**
- * Frees some object out of the Store.
+ * Frees some object out of the cache. Depends on the implemented
+ * algorithm.
*/
void free();
-
- /**
- * Remove the object associated to the given key.
- *
- * @param key the Key Object
- */
- void remove(Object key);
-
- /**
- * Indicates if the given key is associated to a contained object.
- *
- * @param key the Key Object
- */
- boolean containsKey(Object key);
-
- /**
- * Returns the list of used keys as an Enumeration of Objects.
- */
- Enumeration keys();
}
+
1.2 +47 -78 jakarta-commons-sandbox/simplestore/src/java/org/apache/commons/simplestore/SoftRefMemoryStore.java
Index: SoftRefMemoryStore.java
===================================================================
RCS file: /home/cvs/jakarta-commons-sandbox/simplestore/src/java/org/apache/commons/simplestore/SoftRefMemoryStore.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- SoftRefMemoryStore.java 15 Jan 2002 20:30:49 -0000 1.1
+++ SoftRefMemoryStore.java 20 Jan 2002 12:13:37 -0000 1.2
@@ -9,15 +9,20 @@
package org.apache.commons.simplestore;
import java.io.IOException;
+import java.util.Collection;
+import java.util.Map;
import java.util.Enumeration;
+import java.util.Set;
/**
*
* @author Juozas Baliuka <a href="mailto:baliuka@mwm.lt">
* baliuka@mwm.lt</a>
- * @version $Revision: 1.1 $
+ * @author Gerhard Froehlich <a href="mailto:g-froehlich@gmx.de">
+ * g-froehlich@gmx.de</a>
+ * @version $Revision: 1.2 $
*/
-public class SoftRefMemoryStore
+public class SoftRefMemoryStore
implements Store {
private static boolean DEBUG = false;
@@ -27,56 +32,7 @@
private int current = 0;
private java.util.Map map = new java.util.HashMap();
private java.lang.ref.ReferenceQueue queue = new java.lang.ref.ReferenceQueue();
-
- /** main for testing */
- public static void main(String args[])throws Exception{
- final int OBJECT_SIZE = 0xFFFF;
- final int MAX_STRONG_REF = 20;
- final int ITERATIONS = MAX_STRONG_REF*2;
-
- DEBUG = true;
- SoftRefMemoryStore mStore = new SoftRefMemoryStore(
- new Store() {
- public void free(){}
- public Enumeration keys(){ return null; }
- public boolean containsKey(Object key){ return false;}
- public void remove(Object obj){}
- public void store(Object key,Object object){}
- public void hold(Object key,Object object){}
- public Object get(Object key) {
- return new int[OBJECT_SIZE];
- }
- }
- ,MAX_STRONG_REF);
-
- System.out.println("operations ... ");
- Object obj = mStore.get(new Integer(-1));//strong ref
- for(int i = 0; i < ITERATIONS ; i++ ) {
- Object key = new Integer(i);
- Object o = mStore.get(key);// soft ref after iteration;
- mStore.get(new Integer(0));//MFU and MRU
- }
-
- System.gc();
- mStore.get(new Integer(0));//remove unused objects, private iterator can't do it.
- System.out.println("iterating cache ");
- System.out.println("must contain key -1");
- System.out.println("must contain 0 if MAX_STRONG_REF > 0 ... ");
-
- if( ! mStore.map.containsKey(new Integer(-1)) ||
- !( mStore.map.containsKey(new Integer(0)) && MAX_STRONG_REF > 0 )
- )
-
- System.out.println("failed");
- System.out.println("cache size is " + mStore.map.size()
- + " it depends on GC possible MAX_STRONG_REF < SIZE" );
-
- java.util.Iterator i = mStore.map.keySet().iterator();
- while(i.hasNext()) {
- System.out.println(i.next());
- }
- }
-
+
static class SoftRef extends java.lang.ref.SoftReference{
Object key;
private SoftRef(Object key,Object object,java.lang.ref.ReferenceQueue queue) {
@@ -131,8 +87,8 @@
/**
* Returns the list of used keys as an Enumeration of Objects.
*/
- public Enumeration keys() {
- return store.keys();
+ public Set keySet() {
+ return map.keySet();
}
/**
@@ -140,9 +96,10 @@
*
* @param key the Key Object
*/
- public void remove(Object key) {
+ public Object remove(Object key) {
removeSoftRef();
map.remove(key);
+ return null;
}
/**
@@ -152,8 +109,7 @@
*/
public boolean containsKey(Object key) {
removeSoftRef();
- if(map.containsKey(key))return true;
- return store.containsKey(key);
+ return map.containsKey(key);
}
/**
@@ -171,23 +127,10 @@
* @param key the Key Object
* @param value the Value Object
*/
- public void store(Object key, Object object) throws IOException {
+ public Object put(Object key, Object object) {
removeSoftRef();
- store.store(key,object);
internalStoreObject(key,object);
-
- }
-
- /**
- * Holds the given object in a volatile state. This means
- * the object store will discard held objects if the
- * virtual machine is restarted or some error happens.
- *
- * @param key the Key Object
- * @param value the Value Object
- */
- public void hold(Object key, Object value) throws IOException {
- store(key,value);
+ return null;
}
/**
@@ -203,13 +146,39 @@
if(ref != null) {
object = ref.get();
}
-
- if(object == null) {
- object = store.get(key);
- }
-
internalStoreObject(key,object);
return object;
}
+
+ public boolean containsValue(Object value) {
+ return map.containsValue(value);
+ }
+
+ public boolean isEmpty() {
+ return map.isEmpty();
+ }
+
+ public int size() {
+ return map.size();
+ }
+
+ public void putAll(Map t) {
+ map.putAll(t);
+ }
+
+ public void clear() {
+ map.clear();
+ }
+
+ public Collection values() {
+ return map.values();
+ }
+
+ public Set entrySet() {
+ return map.entrySet();
+ }
+
+ public Store getNextStore() {
+ throw new UnsupportedOperationException("method not implemented yet");
+ }
}
-
1.9 +67 -28 jakarta-commons-sandbox/simplestore/src/java/org/apache/commons/simplestore/MRUMemoryStore.java
Index: MRUMemoryStore.java
===================================================================
RCS file: /home/cvs/jakarta-commons-sandbox/simplestore/src/java/org/apache/commons/simplestore/MRUMemoryStore.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- MRUMemoryStore.java 19 Jan 2002 14:49:59 -0000 1.8
+++ MRUMemoryStore.java 20 Jan 2002 12:13:37 -0000 1.9
@@ -10,9 +10,11 @@
import org.apache.commons.simplestore.cleanup.StoreJanitor;
-import java.util.Enumeration;
+import java.util.Set;
+import java.util.Collection;
import java.util.Hashtable;
import java.util.LinkedList;
+import java.util.Map;
/**
* This class provides a MRU cache algorithm. It combines a HashMap
@@ -60,10 +62,11 @@
}
/**
- * Get the object associated to the given unique key.
+ * Returns the value to which this map maps the specified key.
*
- * @param key the Key Object
- * @return the Object associated with Key Object
+ * @param key whose associated value is to be returned
+ * @return the value to which this map maps the specified key,
+ * or null if the map contains no mapping for this key
*/
public Object get(Object key) {
Object tmpobject = this.mCache.get(key);
@@ -74,35 +77,23 @@
}
return null;
}
-
-
- /**
- * Store the given object in a persistent state. It is up to the caller to
- * ensure that the key has a persistent state across different JVM
- * executions.
- *
- * @param key the Key Object
- * @param value the Value Object
- */
- public void store(Object key, Object value) {
- this.hold(key,value);
- }
-
+
/**
- * This method holds the requested object in a HashMap combined with a
- * LinkedList to create the MRU. It also stores objects onto the filesystem
- * if configured.
+ * Associates the specified value with the specified key in this map
+ * (optional operation). If the map previously contained a mapping for
+ * this key, the old value is replaced.
*
- * @param key the Key Object
- * @param value the Value Object
+ * @param key with which the specified value is to be associated.
+ * @param value to be associated with the specified key.
*/
- public void hold(Object key, Object value) {
+ public Object put(Object key, Object value) {
while (this.mMRUList.size() >= this.mMaxObjects) {
this.free();
}
this.mCache.put(key, value);
this.mMRUList.remove(key);
this.mMRUList.addFirst(key);
+ return null;
}
/**
@@ -110,9 +101,9 @@
*
* @param key the Key object
*/
- public void remove(Object key) {
- this.mCache.remove(key);
+ public Object remove(Object key) {
this.mMRUList.remove(key);
+ return this.mCache.remove(key);
}
/**
@@ -130,8 +121,8 @@
*
* @return the enumeration of the cache
*/
- public Enumeration keys() {
- return this.mCache.keys();
+ public Set keySet() {
+ return this.mCache.keySet();
}
/**
@@ -147,5 +138,53 @@
} catch (Exception e) {
e.printStackTrace();
}
+ }
+
+ /**
+ * Returns the number of elements in this collection.
+ *
+ * return the number of elements in this collection
+ */
+ public int size() {
+ return mCache.size();
+ }
+
+ /**
+ * Returns true if this collection contains no elements
+ *
+ * @return true if this collection contains no elements
+ */
+ public boolean isEmpty() {
+ return mCache.isEmpty();
+ }
+
+ /**
+ * Returns true if this map maps one or more keys to the specified value.
+ *
+ * @param value value whose presence in this map is to be tested
+ * @return true if this map maps one or more keys to the specified value
+ */
+ public boolean containsValue(Object value) {
+ return mCache.containsValue(value);
+ }
+
+ public void putAll(Map t) {
+ throw new UnsupportedOperationException("method not implemented yet");
+ }
+
+ public void clear() {
+ throw new UnsupportedOperationException("method not implemented yet");
+ }
+
+ public Collection values() {
+ return mCache.values();
+ }
+
+ public Set entrySet() {
+ return mCache.entrySet();
+ }
+
+ public Store getNextStore() {
+ throw new UnsupportedOperationException("method not implemented yet");
}
}
1.10 +45 -28 jakarta-commons-sandbox/simplestore/src/java/org/apache/commons/simplestore/JispFilesystemStore.java
Index: JispFilesystemStore.java
===================================================================
RCS file: /home/cvs/jakarta-commons-sandbox/simplestore/src/java/org/apache/commons/simplestore/JispFilesystemStore.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- JispFilesystemStore.java 15 Jan 2002 19:54:24 -0000 1.9
+++ JispFilesystemStore.java 20 Jan 2002 12:13:37 -0000 1.10
@@ -16,7 +16,10 @@
import java.io.File;
import java.io.IOException;
import java.io.Serializable;
+import java.util.Collection;
import java.util.Enumeration;
+import java.util.Map;
+import java.util.Set;
/**
* This store is based on the Jisp library
@@ -45,7 +48,6 @@
private IndexedObjectDatabase mDatabase;
private BTreeIndex mIndex;
-
/**
* This method sets the name of the data file. Default
* is default.dat.
@@ -201,8 +203,7 @@
* @param value the Value Object
* @exception IOException
*/
- public void store(Object key, Object value)
- throws IOException {
+ public Object put(Object key, Object value) {
if (value instanceof Serializable) {
try {
KeyObject[] keyArray = new KeyObject[1];
@@ -212,20 +213,9 @@
e.printStackTrace();
}
} else {
- throw new IOException("Object not Serializable");
+ throw new IllegalArgumentException("Object not Serializable");
}
- }
-
- /**
- * Holds the given Object in the indexed data file.
- *
- * @param key the Key Object
- * @param value the Value Object
- * @exception IOException
- */
- public void hold(Object key, Object value)
- throws IOException {
- this.store(key, value);
+ return null;
}
/**
@@ -233,7 +223,7 @@
* not implemented, yet.
*/
public void free() {
- //TODO: implementation
+ throw new UnsupportedOperationException("method not implemented yet");
}
/**
@@ -241,7 +231,7 @@
*
* @param key the Key Object
*/
- public void remove(Object key) {
+ public Object remove(Object key) {
try {
KeyObject[] keyArray = new KeyObject[1];
keyArray[0] = this.wrapKeyObject(key);
@@ -250,6 +240,7 @@
} catch (Exception e) {
e.printStackTrace();
}
+ return null;
}
/**
@@ -276,16 +267,6 @@
}
/**
- * Returns a Enumeration of all Keys in the indexed file
- *
- * @return Enumeration Object with all existing keys
- */
- public Enumeration keys() {
- //TODO: Implementation
- return null;
- }
-
- /**
* This method wraps around the key Object a Jisp KeyObject.
*
* @param key the key Object
@@ -299,6 +280,42 @@
//TODO: Implementation of Integer and Long keys
return null;
}
+ }
+
+ public Set keySet() {
+ throw new UnsupportedOperationException("method not implemented yet");
+ }
+
+ public boolean containsValue(Object value) {
+ throw new UnsupportedOperationException("method not implemented yet");
+ }
+
+ public boolean isEmpty() {
+ throw new UnsupportedOperationException("method not implemented yet");
+ }
+
+ public int size() {
+ throw new UnsupportedOperationException("method not implemented yet");
+ }
+
+ public void putAll(Map t) {
+ throw new UnsupportedOperationException("method not implemented yet");
+ }
+
+ public void clear() {
+ throw new UnsupportedOperationException("method not implemented yet");
+ }
+
+ public Collection values() {
+ throw new UnsupportedOperationException("method not implemented yet");
+ }
+
+ public Set entrySet() {
+ throw new UnsupportedOperationException("method not implemented yet");
+ }
+
+ public Store getNextStore() {
+ throw new UnsupportedOperationException("method not implemented yet");
}
}
--
To unsubscribe, e-mail: <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>