Author: vgritsenko
Date: Mon Nov 12 09:22:17 2007
New Revision: 594219
URL: http://svn.apache.org/viewvc?rev=594219&view=rev
Log:
Refactoring document cache to be more generic entry cache
Modified:
xml/xindice/trunk/java/src/org/apache/xindice/core/Collection.java
xml/xindice/trunk/java/src/org/apache/xindice/core/cache/DocumentCache.java
xml/xindice/trunk/java/src/org/apache/xindice/core/cache/DocumentCacheImpl.java
xml/xindice/trunk/java/src/org/apache/xindice/core/data/Entry.java
Modified: xml/xindice/trunk/java/src/org/apache/xindice/core/Collection.java
URL: http://svn.apache.org/viewvc/xml/xindice/trunk/java/src/org/apache/xindice/core/Collection.java?rev=594219&r1=594218&r2=594219&view=diff
==============================================================================
--- xml/xindice/trunk/java/src/org/apache/xindice/core/Collection.java (original)
+++ xml/xindice/trunk/java/src/org/apache/xindice/core/Collection.java Mon Nov 12 09:22:17 2007
@@ -719,7 +719,7 @@
* Document and byte[].
*/
if (documentCache != null) {
- Entry entry = documentCache.getDocument(this, key);
+ Entry entry = documentCache.getEntry(this, key);
if (entry != null) {
if (log.isTraceEnabled()) {
log.trace(localDebugHeader + "Returning cached: " + entry.getValue());
@@ -764,7 +764,7 @@
}
if (documentCache != null) {
- documentCache.putDocument(this, key, value.getData(), entryMeta);
+ documentCache.putDocumentEntry(this, key, value.getData(), entryMeta);
}
} else {
String documentChars = value.toString();
@@ -772,12 +772,12 @@
log.trace(localDebugHeader + "Pre parseDocument(): value=<" + documentChars + ">");
}
- // FIXME These should be no reason here to re-compress the document & flush symbols table?
+ // FIXME There should be no reason here to re-compress the document & flush symbols table?
document = parseDocument(key, documentChars);
flushSymbolTable();
if (documentCache != null) {
- documentCache.putDocument(this, key, documentChars, entryMeta);
+ documentCache.putDocumentEntry(this, key, documentChars, entryMeta);
}
}
@@ -819,7 +819,7 @@
* and save a disk access.
*/
if (documentCache != null) {
- Entry entry = documentCache.getDocumentMeta(this, key);
+ Entry entry = documentCache.getEntryMeta(this, key);
if (entry != null) {
return entry;
}
@@ -1198,7 +1198,7 @@
if (entry != null && entry.getEntryType() == Entry.DOCUMENT) {
// binary resources aren't stored in cache or indexes
if (documentCache != null) {
- documentCache.removeDocument(this, key);
+ documentCache.removeEntry(this, key);
}
indexManager.removeDocument(key, (Document) entry.getValue());
}
@@ -1339,9 +1339,9 @@
// Cache Stuff
if (documentCache != null) {
if (compressed) {
- documentCache.putDocument(this, key, documentBytes, Entry.createMetaMap(record));
+ documentCache.putDocumentEntry(this, key, documentBytes, Entry.createMetaMap(record));
} else {
- documentCache.putDocument(this, key, documentChars, Entry.createMetaMap(record));
+ documentCache.putDocumentEntry(this, key, documentChars, Entry.createMetaMap(record));
}
}
@@ -1437,7 +1437,7 @@
}
if (documentCache != null) {
- documentCache.removeDocument(this, objKey);
+ documentCache.removeEntry(this, objKey);
}
if (!filer.deleteRecord(objKey)) {
Modified: xml/xindice/trunk/java/src/org/apache/xindice/core/cache/DocumentCache.java
URL: http://svn.apache.org/viewvc/xml/xindice/trunk/java/src/org/apache/xindice/core/cache/DocumentCache.java?rev=594219&r1=594218&r2=594219&view=diff
==============================================================================
--- xml/xindice/trunk/java/src/org/apache/xindice/core/cache/DocumentCache.java (original)
+++ xml/xindice/trunk/java/src/org/apache/xindice/core/cache/DocumentCache.java Mon Nov 12 09:22:17 2007
@@ -26,7 +26,7 @@
import java.util.Map;
/**
- * DocumentCache implements a simple Document caching system for
+ * DocumentCache implements a simple database Entry caching system for
* Collections.
*
* @version $Revision$, $Date$
@@ -34,53 +34,7 @@
public interface DocumentCache {
/**
- * Obtains document from cache
- *
- * @param col document collection
- * @param key document key
- * @return document from the cache or null if not present
- */
- Entry getDocument(Collection col, Key key);
-
- /**
- * Obtains entry metadata from cache.
- *
- * @param col document collection
- * @param key document key
- * @return document from the cache or null if not present
- */
- Entry getDocumentMeta(Collection col, Key key);
-
- /**
- * Stores compressed document's bytes in the cache
- *
- * @param col document collection
- * @param key document key
- * @param bytes compressed document
- * @param meta document meta attributes map
- */
- void putDocument(Collection col, Key key, byte[] bytes, Map meta);
-
- /**
- * Stores serialized document's text in the cache
- *
- * @param col document collection
- * @param key document key
- * @param chars uncompressed document
- * @param meta document meta attributes map
- */
- void putDocument(Collection col, Key key, String chars, Map meta);
-
- /**
- * Remove document from the cache
- *
- * @param col document collection
- * @param key document key
- */
- void removeDocument(Collection col, Key key);
-
- /**
- * Cache key consists of collection and document key
+ * Cache key consists of collection and entry key
*/
class CacheKey {
private final Collection col;
@@ -109,7 +63,13 @@
}
public boolean equals(Object o) {
- return (o instanceof DocumentCacheImpl.CacheKey) && col == ((DocumentCacheImpl.CacheKey) o).col && key.equals(((DocumentCacheImpl.CacheKey) o).key);
+ if (o instanceof DocumentCache.CacheKey) {
+ CacheKey k = (CacheKey) o;
+
+ return col == k.col && key.equals(k.key);
+ }
+
+ return false;
}
public String toString() {
@@ -118,28 +78,58 @@
}
/**
- * Cache value holds document object and meta data
+ * Obtains entry from the cache
+ *
+ * @param col entry collection
+ * @param key entry key
+ * @return entry from the cache or null if not present
*/
- class CacheValue {
- private Object value;
- private Map meta;
+ Entry getEntry(Collection col, Key key);
- public CacheValue(byte[] value, Map meta) {
- this.value = value;
- this.meta = meta;
- }
+ /**
+ * Obtains entry metadata from cache.
+ *
+ * @param col entry collection
+ * @param key entry key
+ * @return entry meta data from the cache or null if not present
+ */
+ Entry getEntryMeta(Collection col, Key key);
- public CacheValue(String value, Map meta) {
- this.value = value;
- this.meta = meta;
- }
+ /**
+ * Stores compressed document's bytes in the cache
+ *
+ * @param col document entry collection
+ * @param key document entry key
+ * @param bytes compressed document bytes
+ * @param meta document meta attributes map
+ */
+ void putDocumentEntry(Collection col, Key key, byte[] bytes, Map meta);
- public Object getValue() {
- return value;
- }
+ /**
+ * Stores serialized document's text in the cache
+ *
+ * @param col document entry collection
+ * @param key document entry key
+ * @param chars uncompressed document text
+ * @param meta document meta attributes map
+ */
+ void putDocumentEntry(Collection col, Key key, String chars, Map meta);
- public Map getMeta() {
- return meta;
- }
- }
+ /**
+ * Stores binary data bytes in the cache
+ *
+ * @param col binary entry collection
+ * @param key binary entry key
+ * @param bytes binary entry data
+ * @param meta entry meta attributes map
+ */
+ void putBinaryEntry(Collection col, Key key, byte[] bytes, Map meta);
+
+ /**
+ * Remove entry from the cache
+ *
+ * @param col entry collection
+ * @param key entry key
+ */
+ void removeEntry(Collection col, Key key);
}
Modified: xml/xindice/trunk/java/src/org/apache/xindice/core/cache/DocumentCacheImpl.java
URL: http://svn.apache.org/viewvc/xml/xindice/trunk/java/src/org/apache/xindice/core/cache/DocumentCacheImpl.java?rev=594219&r1=594218&r2=594219&view=diff
==============================================================================
--- xml/xindice/trunk/java/src/org/apache/xindice/core/cache/DocumentCacheImpl.java (original)
+++ xml/xindice/trunk/java/src/org/apache/xindice/core/cache/DocumentCacheImpl.java Mon Nov 12 09:22:17 2007
@@ -31,8 +31,6 @@
import org.apache.xindice.xml.dom.DocumentImpl;
import org.w3c.dom.Document;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
import java.util.Map;
import java.util.WeakHashMap;
@@ -52,95 +50,73 @@
private static final Log log = LogFactory.getLog(DocumentCacheImpl.class);
- private Map table = new WeakHashMap();
-
/**
- * Obtains document from cache
- *
- * @param col document collection
- * @param key document key
- * @return document from the cache or null if not present
+ * CacheKey to Entry mapping
*/
- public Entry getDocument(Collection col, Key key) {
- CacheValue v = (CacheValue) table.get(new CacheKey(col, key));
+ private Map table = new WeakHashMap();
+
+ public Entry getEntry(Collection col, Key key) {
+ Entry v = (Entry) table.get(new CacheKey(col, key));
if (v == null) {
return null;
+ }
- } else if (v.getValue() instanceof Document) {
- return new Entry(key, (Document) v.getValue(), v.getMeta());
-
- } else if (v.getValue() instanceof String) {
- try {
- Document doc = DOMParser.toDocument((String) v.getValue());
- ((DBDocument) doc).setSource(new NodeSource(col, key));
- return new Entry(key, doc, v.getMeta());
- } catch (Exception e) {
- if (log.isWarnEnabled()) {
- log.warn("ignored exception", e);
+ switch (v.getEntryType()) {
+ case Entry.DOCUMENT:
+ if (v.getValue() instanceof String) {
+ try {
+ Document doc = DOMParser.toDocument((String) v.getValue());
+ ((DBDocument) doc).setSource(new NodeSource(col, key));
+ return new Entry(key, doc, v.getMeta());
+ } catch (Exception e) {
+ if (log.isWarnEnabled()) {
+ log.warn("ignored exception", e);
+ }
+ }
+
+ } else if (v.getValue() instanceof byte[]) {
+ SymbolTable s = col.getSymbols();
+ NodeSource ns = new NodeSource(col, key);
+ Document doc = new DocumentImpl((byte[]) v.getValue(), s, ns);
+ return new Entry(key, doc, v.getMeta());
+ } else {
+ throw new IllegalStateException("Unexpected object: <" + v.getValue() + ">.");
}
- }
- } else if (v.getValue() instanceof byte[]) {
- SymbolTable s = col.getSymbols();
- NodeSource ns = new NodeSource(col, key);
- Document doc = new DocumentImpl((byte[]) v.getValue(), s, ns);
- return new Entry(key, doc, v.getMeta());
- }
+ case Entry.BINARY:
+ return new Entry(Entry.BINARY, key, v.getValue(), v.getMeta());
- return null;
+ default:
+ return null;
+ }
}
- /**
- * Obtains entry metadata from cache.
- *
- * @param col document collection
- * @param key document key
- * @return document from the cache or null if not present
- */
- public Entry getDocumentMeta(Collection col, Key key) {
- DocumentCache.CacheValue v = (DocumentCache.CacheValue) table.get(new DocumentCache.CacheKey(col, key));
-
- if (v != null) {
- return new Entry(key, v.getMeta());
+ public Entry getEntryMeta(Collection col, Key key) {
+ Entry e = (Entry) table.get(new DocumentCache.CacheKey(col, key));
+ if (e != null) {
+ return new Entry(key, e.getMeta());
}
return null;
}
- /**
- * Stores compressed document's bytes in the cache
- *
- * @param col document collection
- * @param key document key
- * @param bytes compressed document
- * @param meta document meta attributes map
- */
- public void putDocument(Collection col, Key key, byte[] bytes, Map meta) {
+ public void putDocumentEntry(Collection col, Key key, byte[] bytes, Map meta) {
DocumentCache.CacheKey ckey = new DocumentCache.CacheKey(col, key);
- table.put(ckey, new CacheValue(bytes, meta));
+ table.put(ckey, new Entry(Entry.DOCUMENT, key, bytes, meta));
}
- /**
- * Stores serialized document's text in the cache
- *
- * @param col document collection
- * @param key document key
- * @param chars uncompressed document
- * @param meta document meta attributes map
- */
- public void putDocument(Collection col, Key key, String chars, Map meta) {
+ public void putDocumentEntry(Collection col, Key key, String chars, Map meta) {
DocumentCache.CacheKey ckey = new DocumentCache.CacheKey(col, key);
- table.put(ckey, new CacheValue(chars, meta));
+ table.put(ckey, new Entry(Entry.DOCUMENT, key, chars, meta));
}
- /**
- * Remove document from the cache
- *
- * @param col document collection
- * @param key document key
- */
- public void removeDocument(Collection col, Key key) {
+ public void putBinaryEntry(Collection col, Key key, byte[] bytes, Map meta) {
+ DocumentCache.CacheKey ckey = new DocumentCache.CacheKey(col, key);
+ table.put(ckey, new Entry(Entry.BINARY, key, bytes, meta));
+ }
+
+ public void removeEntry(Collection col, Key key) {
table.remove(new DocumentCache.CacheKey(col, key));
}
@@ -148,7 +124,6 @@
* Obtains value of the cache control processing instruction in this document
* @param doc document to inspect for cache control processing instruction
* @return cache control value
- */
public static int getCacheControl(Document doc) {
String cache = DBDocument.CACHE;
NodeList childNodes = doc.getChildNodes();
@@ -173,5 +148,5 @@
return -1;
}
-
+ */
}
Modified: xml/xindice/trunk/java/src/org/apache/xindice/core/data/Entry.java
URL: http://svn.apache.org/viewvc/xml/xindice/trunk/java/src/org/apache/xindice/core/data/Entry.java?rev=594219&r1=594218&r2=594219&view=diff
==============================================================================
--- xml/xindice/trunk/java/src/org/apache/xindice/core/data/Entry.java (original)
+++ xml/xindice/trunk/java/src/org/apache/xindice/core/data/Entry.java Mon Nov 12 09:22:17 2007
@@ -28,7 +28,7 @@
/**
* Entry is a high-level representation of a database record, that includes
- * its internal meta information
+ * its internal meta information.
*
* @version $Revision$, $Date$
*/
@@ -42,38 +42,38 @@
public static final String CREATED = "created";
public static final String MODIFIED = "modified";
+ private final byte type;
private final Key key;
private final Object value;
private final Map meta;
- private final byte type;
- public Entry(Key key, Document value, Map meta) {
+ public Entry(byte type, Key key, Object value, Map meta) {
+ this.type = type;
this.key = key;
this.value = value;
this.meta = meta;
- type = DOCUMENT;
+ }
+
+ public Entry(Key key, Document value, Map meta) {
+ this(DOCUMENT, key, value, meta);
}
public Entry(Key key, byte[] value, Map meta) {
- this.key = key;
- this.value = value;
- this.meta = meta;
- type = BINARY;
+ this(BINARY, key, value, meta);
}
public Entry(Key key, XMLSerializable value, Map meta) {
- this.key = key;
- this.value = value;
- this.meta = meta;
- type = OBJECT;
+ this(OBJECT, key, value, meta);
}
public Entry(Key key, Map meta) {
- this.key = key;
- this.value = null;
- this.meta = meta;
- type = UNKNOWN;
+ this(UNKNOWN, key, null, meta);
+ }
+
+
+ public byte getEntryType() {
+ return type;
}
public Key getKey() {
@@ -96,10 +96,6 @@
public long getModificationTime() {
Long date = (Long) meta.get(MODIFIED);
return date != null ? date.longValue() : 0;
- }
-
- public byte getEntryType() {
- return type;
}
public static Map createMetaMap(Record record) {
lmpx.com only provides a reader for public news (NNTP) servers. It is not
affiliated with the servers or forums shown here and is not responsible for
the content of articles, which is written by their respective authors.