Как создать экземпляр репозитория в JackRabbit Oak с помощью MongoMK

Я пытаюсь создать репозиторий JCR Oak для хранения контента с помощью «Apache Oak over MongoDB».

(о чем я совершенно не знаю) Вот что я делал.

MongoClient connection = new MongoClient("127.0.0.1", 27017);
                    DB db = connection.getDB("test");
                    MongoMK.Builder m = new MongoMK.Builder();
                    MongoMK kernel = m.setMongoDB(db).open();
                    Repository repo = new Jcr().createRepository();
                    session = repo.login(); // Error javax.jcr.NoSuchWorkspaceException

Пытался связать «Репозиторий» с «МонгоМК» - это похоже на кошмар.

я пробовал делать

 Repository repo = new Jcr(kernel).createRepository(); //Error

Я нашел что-то похожее @ [Как создать экземпляр репозитория в JackRabbit Oak с помощью MicroKernel , это тоже не помогло.

Мой вопрос в том, есть ли способ связать MongMK - репозиторий ??

P.S. Пробовал использовать "NodeStore".


person chaty    schedule 09.10.2014    source источник


Ответы (1)


Да, это не было хорошо задокументировано. Следующее должно работать:

import javax.jcr.Node;
import javax.jcr.Repository;
import javax.jcr.Session;
import org.apache.jackrabbit.oak.Oak;
import org.apache.jackrabbit.oak.plugins.document.DocumentMK;
import org.apache.jackrabbit.oak.plugins.document.DocumentNodeStore;
import org.apache.jackrabbit.oak.spi.security.OpenSecurityProvider;
import com.mongodb.DB;
import com.mongodb.MongoClient;

public class Test {
    public static void main(String... args) throws Exception {
        DB db = new MongoClient("127.0.0.1", 27017).getDB("test2");
        DocumentNodeStore ns = new DocumentMK.Builder().
                setMongoDB(db).getNodeStore();
        Repository repo = new Jcr(new Oak(ns))
                .with(new OpenSecurityProvider())
                .createRepository();
        Session session = repo.login();
        Node root = session.getRootNode();
        if (root.hasNode("hello")) {
            Node hello = root.getNode("hello");
            long count = hello.getProperty("count").getLong();
            hello.setProperty("count", count + 1);
            System.out.println("found the hello node, count = " + count);
        } else {
            System.out.println("creating the hello node");
            root.addNode("hello").setProperty("count", 1);
        }
        session.save();
        session.logout();
        ns.dispose();
    }
}

Теперь это также задокументировано.

person Thomas Mueller    schedule 29.10.2014