The drivers are apache2 if that matters any.

On 03/10/2012 02:38 PM, Roy T. Fielding wrote:
Why MongoDB?  It is under an incompatible license, so we'd never be able to
distribute this pm.

....Roy

On Mar 10, 2012, at 9:56 AM, ste...@apache.org wrote:

Author: stefan
Date: Sat Mar 10 17:56:34 2012
New Revision: 1299243

URL: http://svn.apache.org/viewvc?rev=1299243&view=rev
Log:
experimental mongo-based pm&  ds

allow for db per pm

Modified:
    jackrabbit/sandbox/jackrabbit-mongo-persistence/README.txt
    jackrabbit/sandbox/jackrabbit-mongo-persistence/pom.xml
    
jackrabbit/sandbox/jackrabbit-mongo-persistence/src/main/java/org/apache/jackrabbit/core/persistence/mongo/MongoPersistenceManager.java

Modified: jackrabbit/sandbox/jackrabbit-mongo-persistence/README.txt
URL: 
http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mongo-persistence/README.txt?rev=1299243&r1=1299242&r2=1299243&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mongo-persistence/README.txt (original)
+++ jackrabbit/sandbox/jackrabbit-mongo-persistence/README.txt Sat Mar 10 
17:56:34 2012
@@ -6,8 +6,9 @@ committing changes the workspace may bec

Both MongoPersistenceManager and MongoDataStore support the following 
parameters:

-- host ->  defaults to 127.0.0.1
-- port ->  defaults to 27017
+- host ->  defaults to "127.0.0.1"
+- port ->  defaults to "27017"
+- dbName ->  defaults to "rep"
- TODO document all configuration parameters

MongoPersistenceManager also supports the following parameters:

Modified: jackrabbit/sandbox/jackrabbit-mongo-persistence/pom.xml
URL: 
http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mongo-persistence/pom.xml?rev=1299243&r1=1299242&r2=1299243&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mongo-persistence/pom.xml (original)
+++ jackrabbit/sandbox/jackrabbit-mongo-persistence/pom.xml Sat Mar 10 17:56:34 
2012
@@ -35,7 +35,7 @@

   <groupId>org.apache.jackrabbit</groupId>
   <artifactId>jackrabbit-mongo-persistence</artifactId>
-<name>Apache Jackrabbit</name>
+<name>Apache Jackrabbit MongoDB Persistence</name>
   <version>2.6-SNAPSHOT</version>
   <packaging>jar</packaging>


Modified: 
jackrabbit/sandbox/jackrabbit-mongo-persistence/src/main/java/org/apache/jackrabbit/core/persistence/mongo/MongoPersistenceManager.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mongo-persistence/src/main/java/org/apache/jackrabbit/core/persistence/mongo/MongoPersistenceManager.java?rev=1299243&r1=1299242&r2=1299243&view=diff
==============================================================================
--- 
jackrabbit/sandbox/jackrabbit-mongo-persistence/src/main/java/org/apache/jackrabbit/core/persistence/mongo/MongoPersistenceManager.java
 (original)
+++ 
jackrabbit/sandbox/jackrabbit-mongo-persistence/src/main/java/org/apache/jackrabbit/core/persistence/mongo/MongoPersistenceManager.java
 Sat Mar 10 17:56:34 2012
@@ -77,8 +77,18 @@ public class MongoPersistenceManager ext

     protected MongoBlobStore blobStore;

+    protected String dbName = "rep";
+
     //--------------------------------------<  configuration getters&  setters>

+    public String getDbName() {
+        return dbName;
+    }
+
+    public void setDbName(String dbName) {
+        this.dbName = dbName;
+    }
+
     public String getHost() {
         return conf.getHost();
     }
@@ -222,7 +232,9 @@ public class MongoPersistenceManager ext
             log.error("failed to connect to mongodb", e);
             throw new RepositoryException("failed to initialize 
MongoPersistenceManager", e);
         }
-        db = con.getDB("rep");
+
+
+        db = con.getDB(encodeName(dbName));
         db.setWriteConcern(WriteConcern.SAFE);

         bundles = db.getCollection("bundles");
@@ -428,6 +440,67 @@ public class MongoPersistenceManager ext
         return (refs.findOne(key) != null);
     }

+    //-------------------------------------------------------<  implementation>
+
+    protected final static String ENCODED_DOT = "_x46_";
+    protected final static String ENCODED_DOLLAR_SIGN = "_x36_";
+
+    /**
+     * see http://www.mongodb.org/display/DOCS/Legal+Key+Names
+     *
+     * @param name
+     * @return
+     */
+    protected static String encodeName(String name) {
+        StringBuilder buf = null;
+        for (int i = 0; i<  name.length(); i++) {
+            if (i == 0&&  name.charAt(i) == '$') {
+                // mongodb field names must not start with '$'
+                buf = new StringBuilder();
+                buf.append(ENCODED_DOLLAR_SIGN);
+            } else if (name.charAt(i) == '.') {
+                // . is a reserved char for mongodb field names
+                if (buf == null) {
+                    buf = new StringBuilder(name.substring(0, i));
+                }
+                buf.append(ENCODED_DOT);
+            } else {
+                if (buf != null) {
+                    buf.append(name.charAt(i));
+                }
+            }
+        }
+
+        return buf == null ? name : buf.toString();
+    }
+
+    protected static String decodeName(String name) {
+        StringBuilder buf = null;
+
+        int lastPos = 0;
+        if (name.startsWith(ENCODED_DOLLAR_SIGN)) {
+            buf = new StringBuilder("$");
+            lastPos = ENCODED_DOLLAR_SIGN.length();
+        }
+
+        int pos;
+        while ((pos = name.indexOf(ENCODED_DOT, lastPos)) != -1) {
+            if (buf == null) {
+                buf = new StringBuilder();
+            }
+            buf.append(name.substring(lastPos, pos));
+            buf.append('.');
+            lastPos = pos + ENCODED_DOT.length();
+        }
+
+        if (buf != null) {
+            buf.append(name.substring(lastPos));
+            return buf.toString();
+        } else {
+            return name;
+        }
+    }
+
     //--------------------------------------------------------<  inner classes>

     protected class MongoBlobStore implements BLOBStore {




Reply via email to