Jackrabbit と Jackrabbit Oak はまったくの初心者です。ただし、別の JCR 準拠のオープンソース コンテンツ レポジトリである Alfresco と多くの作業を行いました。
スタンドアロンの Jackrabbit Oak リポジトリを開始し、Java コードを介して接続したいと考えています。残念ながら、Oak のドキュメントはほとんどありません。
私は Oak レポジトリをチェックアウトし、それをビルドして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 が完全に書き直されているため、Jackrabbit 2 のどの部分が Oak で有効なのかはわかりません。)
メーリング リスト/Nabble で同じ質問を見つけましたが、そこで提供された回答では、リモートのスタンドアロン リポジトリは使用されませんが、同じサーブレット コンテナーおよびアプリで実行されるローカル リポジトリが使用されます (最終的には Mongo DB / ノード ストアが構成されます)。リモートと同様ですが、それは Mongo ポートを開く必要があることを意味します)。したがって、アプリはリポジトリ自体を作成しますが、これは私の場合ではありません (このケースは Oak でも問題なく動作しました)。
Jackrabbit2 (Oak ではない) では、次の方法で簡単に接続できます。
Repository repo = new URLRemoteRepository("http://localhost:8080/rmi");
正常に動作していますが、この方法はオークでは利用できないようです。
Oak では RMI はデフォルトで有効になっていませんか? 使用する別の URI はありますか?
ただし、Oak のドキュメントには「Oak には実行可能な jar が付属しています」と記載されており、実行可能な jarはサーバーを起動する方法を提供するserver
ため、上記のシナリオは有効であると想定しています。