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, [email protected] 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 { > >
