You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by st...@apache.org on 2012/02/01 18:49:54 UTC
svn commit: r1239234 - in
/jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk:
Repository.java store/MongoPersistenceManager.java
Author: stefan
Date: Wed Feb 1 17:49:54 2012
New Revision: 1239234
URL: http://svn.apache.org/viewvc?rev=1239234&view=rev
Log:
refactoring serialization code
Modified:
jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/Repository.java
jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/store/MongoPersistenceManager.java
Modified: jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/Repository.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/Repository.java?rev=1239234&r1=1239233&r2=1239234&view=diff
==============================================================================
--- jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/Repository.java (original)
+++ jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/Repository.java Wed Feb 1 17:49:54 2012
@@ -51,9 +51,9 @@ public class Repository {
}
this.homeDir = home.getCanonicalPath();
- pm = new H2PersistenceManager();
+ //pm = new H2PersistenceManager();
//pm = new InMemPersistenceManager();
- //pm = new MongoPersistenceManager();
+ pm = new MongoPersistenceManager();
//pm = new BDbPersistenceManager();
//pm = new FSPersistenceManager();
Modified: jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/store/MongoPersistenceManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/store/MongoPersistenceManager.java?rev=1239234&r1=1239233&r2=1239234&view=diff
==============================================================================
--- jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/store/MongoPersistenceManager.java (original)
+++ jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/store/MongoPersistenceManager.java Wed Feb 1 17:49:54 2012
@@ -130,31 +130,14 @@ public class MongoPersistenceManager ext
} else {
key.put(ID_FIELD, id);
}
- final DBObject nodeObject = nodes.findOne(key);
+ final BasicDBObject nodeObject = (BasicDBObject) nodes.findOne(key);
if (nodeObject != null) {
// todo support partitioned child node lists
if (BINARY_FORMAT) {
byte[] bytes = (byte[]) nodeObject.get(DATA_FIELD);
return StoredNode.deserialize(id, new BinaryBinding(new ByteArrayInputStream(bytes)));
} else {
- final Iterator<String> it = nodeObject.keySet().iterator();
- final BasicDBObject children = (BasicDBObject) nodeObject.get(CHILDREN_OBJECT);
- Iterator<ChildNodeEntry> cneIt = new Iterator<ChildNodeEntry>() {
- public boolean hasNext() {
- return it.hasNext();
- }
-
- public ChildNodeEntry next() {
- String name = it.next();
- return new ChildNodeEntry(decodeName(name), (String) children.get(name));
- }
-
- public void remove() {
- throw new UnsupportedOperationException();
- }
- };
- return new StoredNode(id,
- decodeKeys(((BasicDBObject) nodeObject.get(PROPERTIES_OBJECT)).toMap()), cneIt);
+ return StoredNode.deserialize(id, new DBObjectBinding(nodeObject));
}
} else {
throw new NotFoundException(id);
@@ -174,15 +157,8 @@ public class MongoPersistenceManager ext
if (BINARY_FORMAT) {
nodeObject = new BasicDBObject(ID_FIELD, key).append(DATA_FIELD, bytes);
} else {
- Iterator<ChildNodeEntry> it = node.getChildNodeEntries(0, -1);
- BasicDBObject children = new BasicDBObject();
- while (it.hasNext()) {
- ChildNodeEntry cne = it.next();
- children.put(encodeName(cne.getName()), cne.getId());
- }
- nodeObject = new BasicDBObject(ID_FIELD, id)
- .append(PROPERTIES_OBJECT, new BasicDBObject(encodeKeys(node.getProperties())))
- .append(CHILDREN_OBJECT, children);
+ nodeObject = new BasicDBObject(ID_FIELD, id);
+ node.serialize(new DBObjectBinding(nodeObject));
}
try {
nodes.insert(nodeObject);
@@ -201,17 +177,13 @@ public class MongoPersistenceManager ext
} else {
key.put(ID_FIELD, id);
}
- DBObject commitObject = commits.findOne(key);
+ BasicDBObject commitObject = (BasicDBObject) commits.findOne(key);
if (commitObject != null) {
if (BINARY_FORMAT) {
byte[] bytes = (byte[]) commitObject.get(DATA_FIELD);
return StoredCommit.deserialize(id, new BinaryBinding(new ByteArrayInputStream(bytes)));
} else {
- return new StoredCommit(id,
- (String) commitObject.get("parentId"),
- (Long) commitObject.get("ts"),
- (String) commitObject.get("rootNodeId"),
- (String) commitObject.get("msg"));
+ return StoredCommit.deserialize(id, new DBObjectBinding(commitObject));
}
} else {
throw new NotFoundException(id);
@@ -230,12 +202,8 @@ public class MongoPersistenceManager ext
if (BINARY_FORMAT) {
commitObject = new BasicDBObject(ID_FIELD, key).append(DATA_FIELD, bytes);
} else {
- commitObject = new BasicDBObject(ID_FIELD, id)
- .append(ID_FIELD, id)
- .append("rootNodeId", commit.getRootNodeId())
- .append("ts", commit.getCommitTS())
- .append("parentId", commit.getParentId())
- .append("msg", commit.getMsg());
+ commitObject = new BasicDBObject(ID_FIELD, id);
+ commit.serialize(new DBObjectBinding(commitObject));
}
try {
commits.insert(commitObject);
@@ -289,19 +257,13 @@ public class MongoPersistenceManager ext
} else {
key.put(ID_FIELD, id);
}
- DBObject bucketObject = buckets.findOne(key);
+ BasicDBObject bucketObject = (BasicDBObject) buckets.findOne(key);
if (bucketObject != null) {
if (BINARY_FORMAT) {
byte[] bytes = (byte[]) bucketObject.get(DATA_FIELD);
return ChildNodeEntriesBucket.deserialize(id, new BinaryBinding(new ByteArrayInputStream(bytes)));
} else {
- ChildNodeEntriesBucket bucket = new ChildNodeEntriesBucket();
- for (String name : bucketObject.keySet()) {
- if (!name.equals(ID_FIELD)) {
- bucket.add(new ChildNodeEntry(decodeName(name), (String) bucketObject.get(name)));
- }
- }
- return bucket;
+ return ChildNodeEntriesBucket.deserialize(id, new DBObjectBinding(bucketObject));
}
} else {
throw new NotFoundException(id);
@@ -321,11 +283,7 @@ public class MongoPersistenceManager ext
bucketObject = new BasicDBObject(ID_FIELD, key).append(DATA_FIELD, bytes);
} else {
bucketObject = new BasicDBObject(ID_FIELD, id);
- Iterator<ChildNodeEntry> it = bucket.getEntries(0, -1);
- while (it.hasNext()) {
- ChildNodeEntry cne = it.next();
- bucketObject.append(encodeName(cne.getName()), cne.getId());
- }
+ bucket.serialize(new DBObjectBinding(bucketObject));
}
try {
buckets.insert(bucketObject);
@@ -448,4 +406,79 @@ public class MongoPersistenceManager ext
return name;
}
}
+
+ //--------------------------------------------------------< inner classes >
+
+ protected class DBObjectBinding implements Binding {
+
+ BasicDBObject obj;
+
+ protected DBObjectBinding(BasicDBObject obj) {
+ this.obj = obj;
+ }
+
+ @Override
+ public void write(String key, String value) throws Exception {
+ obj.append(encodeName(key), value);
+ }
+
+ @Override
+ public void write(String key, long value) throws Exception {
+ obj.append(encodeName(key), value);
+ }
+
+ @Override
+ public void write(String key, int value) throws Exception {
+ obj.append(encodeName(key), value);
+ }
+
+ @Override
+ public void write(String key, int count, Iterator<KeyValuePair> iterator) throws Exception {
+ BasicDBObject childObj = new BasicDBObject();
+ while (iterator.hasNext()) {
+ KeyValuePair kvp = iterator.next();
+ childObj.append(encodeName(kvp.getKey()), kvp.getValue());
+ }
+ obj.append(encodeName(key), childObj);
+ }
+
+ @Override
+ public String readStringValue(String key) throws Exception {
+ return obj.getString(encodeName(key));
+ }
+
+ @Override
+ public long readLongValue(String key) throws Exception {
+ return obj.getLong(encodeName(key));
+ }
+
+ @Override
+ public int readIntValue(String key) throws Exception {
+ return obj.getInt(encodeName(key));
+ }
+
+ @Override
+ public Iterator<KeyValuePair> read(String key) throws Exception {
+ final BasicDBObject childObj = (BasicDBObject) obj.get(encodeName(key));
+ final Iterator<String> it = childObj.keySet().iterator();
+ return new Iterator<KeyValuePair>() {
+ @Override
+ public boolean hasNext() {
+ return it.hasNext();
+ }
+
+ @Override
+ public KeyValuePair next() {
+ String key = it.next();
+ return new KeyValuePair(decodeName(key), childObj.getString(key));
+ }
+
+ @Override
+ public void remove() {
+ throw new UnsupportedOperationException();
+ }
+ };
+ }
+ }
+
}