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/03/10 18:56:35 UTC

svn commit: r1299243 - in /jackrabbit/sandbox/jackrabbit-mongo-persistence: README.txt pom.xml src/main/java/org/apache/jackrabbit/core/persistence/mongo/MongoPersistenceManager.java

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 {



Re: svn commit: r1299243 - in /jackrabbit/sandbox/jackrabbit-mongo-persistence: README.txt pom.xml src/main/java/org/apache/jackrabbit/core/persistence/mongo/MongoPersistenceManager.java

Posted by Jukka Zitting <ju...@gmail.com>.
Hi,

On Sat, Mar 10, 2012 at 11:11 PM, Roy T. Fielding <fi...@gbiv.com> wrote:
> It matters. Assuming we limit access to the MongoDB server to those drivers
> and we don't need to include other MongoDB code in the Jackrabbit server,
> then we should be able to include the code in Jackrabbit as an optional PM.

Right. We already have many optional persistence managers that target
various backend systems with different licensing conditions, ranging
from Oracle's databases to Amazon's S3.

Like here with MongoDB, those cases are treated as system dependencies
(i.e. not bundled in Jackrabbit) and need to be explicitly configured
during deployment (unlike the default ALv2-licensed Derby
persistence).

BR,

Jukka Zitting

Re: svn commit: r1299243 - in /jackrabbit/sandbox/jackrabbit-mongo-persistence: README.txt pom.xml src/main/java/org/apache/jackrabbit/core/persistence/mongo/MongoPersistenceManager.java

Posted by "Roy T. Fielding" <fi...@gbiv.com>.
It matters. Assuming we limit access to the MongoDB server to those drivers
and we don't need to include other MongoDB code in the Jackrabbit server,
then we should be able to include the code in Jackrabbit as an optional PM.

However, we might want to include a warning to folks who use it that
MongoDB itself is under a different license.

....Roy


On Mar 10, 2012, at 1:18 PM, Dave Brosius wrote:

> 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


Re: svn commit: r1299243 - in /jackrabbit/sandbox/jackrabbit-mongo-persistence: README.txt pom.xml src/main/java/org/apache/jackrabbit/core/persistence/mongo/MongoPersistenceManager.java

Posted by Dave Brosius <db...@apache.org>.
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, stefan@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 {
>>
>>
>


Re: svn commit: r1299243 - in /jackrabbit/sandbox/jackrabbit-mongo-persistence: README.txt pom.xml src/main/java/org/apache/jackrabbit/core/persistence/mongo/MongoPersistenceManager.java

Posted by "Roy T. Fielding" <fi...@gbiv.com>.
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, stefan@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 {
> 
>