我对Jackrabbit和Jackrabbit Oak来说是全新的。不过,我和Alfresco合作过很多,这是另一个符合JCR标准的开源内容回购。
我想开始一个独立的Jackrabbit Oak repo,然后通过Java代码连接到它。不幸的是,Oak文档非常缺乏。
我查看了Oak repo,用mvn clean install
构建了它,然后通过以下方式运行独立服务器(内存存储库对我来说很好用于测试):
$ java -jar oak-run-1.6-SNAPSHOT.jar server
Apache Jackrabbit Oak 1.6-SNAPSHOT
Starting Oak-Memory repository -> http://localhost:8080/
13:14:38.317 [main] WARN o.a.j.s.r.d.ProtectedRemoveManager - protectedhandlers-config is missing -> DIFF processing can fail for the Remove operation if the content toremove is protected!
当我打开http://localhost:8080/时,我看到一个空白页面,其代码如下,但html / xhtml输出为源代码,如下所示:
我尝试通过Java代码连接:
JcrUtils.getRepository("http://localhost:8080");
// or
JcrUtils.getRepository("http://localhost:8080/rmi");
但得到:
Connecting to http://localhost:8080
Exception in thread "main" javax.jcr.RepositoryException: Unable to access a repository with the following settings:
org.apache.jackrabbit.repository.uri: http://localhost:8080
The following RepositoryFactory classes were consulted:
org.apache.jackrabbit.oak.jcr.OakRepositoryFactory: declined
org.apache.jackrabbit.commons.JndiRepositoryFactory: declined
Perhaps the repository you are trying to access is not available at the moment.
at org.apache.jackrabbit.commons.JcrUtils.getRepository(JcrUtils.java:223)
at org.apache.jackrabbit.commons.JcrUtils.getRepository(JcrUtils.java:263)
at Main.main(Main.java:26)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
(Oak的文档并不像Jackrabbit文档那么完整,但我也不确定Jackrabbit 2对Oak有多少仍然有效,因为它是完全重写的。)
我找到了same question in the mailing list/Nabble,但提供的答案并没有使用远程的独立存储库,而是在同一个servlet容器甚至应用程序中运行的本地存储库(最终只配置了Mongo DB / Node存储库)作为远程,但这意味着Mongo端口需要打开)。因此,应用程序创建了存储库本身,这不是我的情况(我的这个案例在Oak中运行良好)。
在Jackrabbit2(不是Oak)中,我可以通过
连接Repository repo = new URLRemoteRepository("http://localhost:8080/rmi");
并且它工作正常,但这种方法似乎不适用于Oak。
在Oak中默认不启用RMI吗?是否有不同的URI可供使用?
但是,documentation of Oak说“Oak附带一个可运行的jar”而runnable jar提供server
方法来启动服务器,所以我假设上面的场景是有效的之一。
答案 0 :(得分:1)
答案 1 :(得分:0)
我从来没有看到像这样工作的长耳大麻橡木的例子..你确定可以在你的应用之外启动橡木吗? 你如何设置持久性商店? (你要使用哪一个?)。
以下是您正常设置长耳大块橡木的链接:https://jackrabbit.apache.org/oak/docs/construct.html
例如,如果您使用MongoDB作为后端(功能最强大),则首先通过
连接到数据库Db db = new MongoClient(ip, port).getDB("testDB");
其中ip是MongoDB服务器及其端口的ip地址。此服务器不需要像运行Java代码一样位于同一台机器上。您甚至可以使用副本集代替单个MongoDB实例。 只有当您选择tar文件系统后端时才限制使用本地计算机,因此使用关系数据库有效。 然后,在第二步中,您将根据所选的后端创建一个jcr(请参阅链接)