2016-10-22 1 views
1

Je suis totalement nouveau pour Jackrabbit et Jackrabbit Oak. J'ai cependant beaucoup travaillé avec Alfresco, un autre dépôt de contenu open source compatible JCR. Je veux démarrer un repo Jackrabbit Oak autonome, puis me connecter via le code Java. Malheureusement, la documentation Oak est assez rare.Jackrabbit Oak: Mise en route et connexion à un référentiel autonome via RMI

j'ai vérifié le repo, le chêne, il construit avec mvn clean install puis exécuté le serveur autonome (dépôt de mémoire est très bien pour moi en ce moment pour les tests) via:

$ 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! 

Quand j'ouvre http://localhost:8080/ je vois un page blanche avec le code comme cela, mais le code html/sortie xhtml comme source comme ceci:

enter image description here

J'essaie de se connecter via le code Java:

JcrUtils.getRepository("http://localhost:8080"); 
// or 
JcrUtils.getRepository("http://localhost:8080/rmi"); 

mais obtenir:

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) 

(La documentation de Oak est pas aussi complète que la documentation Jackrabbit, mais je suis pas sûr de combien de Jackrabbit 2 est toujours valable pour Oak, car il est un complet réécriture.)

J'ai trouvé le same question in the mailing list/Nabble, mais la réponse fournie ici n'utilise pas de référentiel distant et autonome mais un référentiel local s'exécutant dans le même conteneur de servlet et même app (juste que le magasin Mongo DB/Node est configuré comme à distance, mais cela signifierait que les ports Mongo auraient besoin être ouvert). Ainsi, l'application crée le référentiel lui-même, ce qui n'est pas mon cas (j'ai également travaillé sur ce cas dans Oak).

En Jackrabbit2 (non Oak), je peux simplement vous connecter via

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

et il fonctionne très bien, mais cette méthode n'est pas disponible pour Oak, il semble.

RMI n'est pas activé par défaut dans Oak? Y a-t-il un URI différent à utiliser?

Cependant, le documentation of Oak dit « Oak est livré avec un pot runnable » et le runnable jar offre la méthode server pour démarrer le serveur, donc je suppose que mon scénario ci-dessus est valide.

Répondre

0

Je n'ai jamais vu un exemple de chêne de jackrabbit fonctionnant comme ceci ... êtes-vous sûr qu'il est possible de commencer le chêne en dehors de votre application? Comment configurer le magasin persistant? (lequel allez-vous utiliser?).

Voici le lien que vous normalement mis en place chêne Jackrabbit: https://jackrabbit.apache.org/oak/docs/construct.html

Par exemple, si vous utilisez MongoDB comme back-end (ce qui est le plus puissant), vous devez d'abord vous connecter à la DB via

Db db = new MongoClient(ip, port).getDB("testDB"); 

où ip est l'adresse IP de votre serveur MongoDB avec son port. Ce serveur n'a pas besoin d'être sur la même machine que votre code Java. Vous pouvez même utiliser à la place d'une seule instance MongoDB un ensemble de réplicas. La même chose est valable en utilisant un db relationnel.Seulement si vous choisissez le backend du système tar-file, vous êtes limité à votre machine locale. Ensuite, dans un deuxième temps, vous créez un jcr basé sur le backend choisi (voir le lien)

+0

Oui, à peu près sûr, au moins ce que dit la documentation. Voir http://jackrabbit.apache.org/oak/docs/use_getting_started.html "Oak est livré avec un pot runnable" et https://github.com/apache/jackrabbit-oak/blob/trunk/oak-run/README .md -> mode "serveur". Le runnable utilise les mêmes options que JR2 utilise, sauf que cela fonctionne avec JR2 mais pas avec Oak tout de suite. –

+0

Construire un dépôt local selon votre lien fonctionne bien pour moi déjà, je l'ai déjà fait avant. Mais l'utilisation d'un référentiel distant ne fonctionne pas. J'ai quelques informations ici que Apache Sling pourrait être la meilleure approche pour cela http://jackrabbit.510166.n4.nabble.com/Comment-connecter-a-OAK-standalone-server-td4663274.html –

+0

Re: " Comment installez-vous le magasin persistant? " -> Mémoire, juste pour tester. Cela ne devrait pas importer cependant, je veux juste se relier à un repo à distance, donc le client ne devrait pas se soucier de la technologie sous-jacente de magasin. –

1

La page blanche est le résultat de l'incapacité de votre navigateur à analyser la balise <title/>.

Passez en mode développeur pour voir comment le navigateur a mal interprété cette balise.

Incorrect interpretation of title tag