2016-10-22 66 views
1

我是Jackrabbit和Jackrabbit Oak的全新產品。我和Alfresco一起工作了很多,另一個符合JCR標準的開源內容回購。Jackrabbit Oak:開始並通過RMI連接到獨立版本庫

我想開始一個獨立的Jackrabbit Oak repo,然後通過Java代碼連接到它。不幸的是,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/我看到了

enter image description here

我嘗試通過Java代碼來連接:用這樣的代碼,但HTML/XHTML輸出作爲源這樣的空白頁

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) 

(橡樹文檔並不像兔崽子文檔作爲完整的,但我也不能肯定有多少兔崽子2的仍然是成立的橡樹,因爲它是一個完整的)

我找到same question in the mailing list/Nabble,但是提供的答案沒有使用遠程獨立存儲庫,而是使用同一個servlet容器甚至應用程序運行的本地存儲庫(最終配置了Mongo DB/Node存儲庫作爲遙遠的,但這意味着蒙古港口將需要開放)。所以這個應用程序創建了存儲庫本身,這不是我的情況(我在Oak中也得到了這種情況)。

在Jackrabbit2(不是橡木),我可以簡單地通過

Repository repo = new URLRemoteRepository("http://localhost:8080/rmi"); 

連接,它的工作很好,但這種方法並不適用於橡樹,它似乎。

Oak在默認情況下是否未啓用RMI?是否有使用不同的URI?

然而,documentation of Oak說:「橡樹帶有一個可運行罐子」和runnable jar提供server方法來啓動服務器,所以我認爲我上面的場景是一個有效的。

回答

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(請參閱鏈接)

+0

是的,非常確定,至少這就是文檔所說的。請參閱http://jackrabbit.apache.org/oak/docs/use_getting_started.html「Oak帶有可運行jar」和https://github.com/apache/jackrabbit-oak/blob/trunk/oak-run/README .md - >「服務器」模式。可運行使用JR2使用的相同選項,但它可以與JR2一起使用,但不能與Oak一起使用。 –

+0

根據您的鏈接構建本地存儲庫對我來說已經很好,我之前也是這樣做的。但使用遠程存儲庫不起作用。我在這裏得到了一些信息,Apache Sling可能是最好的方法http://jackrabbit.510166.n4.nabble.com/How-to-connect-to-OAK-standalone-server-td4663274.html –

+0

Re:「你如何建立持久性商店?「 - >內存商店,只是爲了測試。這應該不重要,但我只想連接到遠程回購,因此客戶不應該關心底層存儲技術。 –