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:
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.
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. –
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 –
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. –