Quand utiliser JCR (référentiel de contenu) sur d’autres options?

J’essaie d’évaluer les référentiels de contenu ( JSR283 ) comme Jackrabbit et ModeShape, mais je dois avouer que je ne comprends pas quel problème résout en premier lieu et même si c’est un bon choix pour le projet. Selon vous, quelles sont les meilleures solutions à appliquer? N’est-ce pas la même chose que les bases de données relationnelles, à l’exception de la taille? Pourquoi? Points supplémentaires pour pointer des exemples réels.

Merci d’avance.

Les référentiels JCR sont différents des RDBMS, car un référentiel JCR:

  • est hiérarchique, ce qui vous permet d’organiser votre contenu dans une structure qui correspond étroitement à vos besoins et où les informations connexes sont souvent stockées proches les unes des autres et donc facilement navigables
  • est flexible, permettant au contenu de s’adapter et d’évoluer, en utilisant un système de type nœud qui peut être complètement “sans schemal” à ressortingctif complet (par exemple, comme une firebase database relationnelle)
  • utilise une API Java standard (par exemple, javax.jcr)
  • résumés dans lesquels les informations sont réellement stockées: de nombreuses implémentations JCR peuvent stocker du contenu dans diverses bases de données relationnelles et autres magasins, certaines peuvent exposer des magasins non-JCR via l’API JCR et d’autres peuvent fédérer plusieurs magasins dans un seul référentiel virtuel.
  • prend en charge les requêtes et la recherche en texte intégral par défaut
  • prend en charge les événements, le locking, le contrôle de version et d’autres fonctionnalités

Vous pouvez certainement créer tout ou partie de ces fonctionnalités dans votre propre application, mais cela s’éloigne probablement de votre objective principal de votre application.

Quels types d’applications peuvent bénéficier de ces fonctionnalités? Les systèmes de gestion de contenu utilisent des référentiels depuis longtemps, et JCR (et Jackrabbit) ont vraiment développé le besoin d’une API standard commune pour accéder à différents référentiels de contenu (voir JSR-170 et JSR-283 ).

Un autre exemple est celui des systèmes de gestion de documents, qui gèrent des fichiers électroniques (qui sont souvent des images de documents papier) et fournissent des recherches et des requêtes. Les DMS ont utilisé des référentiels pendant un certain temps.

Les systèmes de gestion d’artefacts peuvent utiliser des référentiels pour gérer des artefacts numériques (souvent des fichiers) ainsi que des informations supplémentaires (métadonnées). JCR fonctionne très bien ici, car vous pouvez stocker les métadonnées au même endroit que les fichiers: ceux qui comprennent ces propriétés supplémentaires peuvent les voir, ceux qui s’en foutent ne doivent pas les voir. Je sais que Artifactory est une implémentation de référentiel Maven qui utilise JCR. Il existe également des référentiels pour la gestion des artefacts de service Web, des artefacts de service de données et des artefacts de test.

Mais les référentiels JCR ne sont pas destinés à la gestion des fichiers. JCR utilise une notion simple de hiérarchie de nœuds, où les nœuds peuvent contenir des propriétés nommées (avec une ou plusieurs valeurs) et des enfants. Les propriétés et le nœud enfant autorisés sont entièrement dictés par les types de nœuds, qui peuvent être modifiés et mélangés selon les besoins sur une base de nœud. JCR prédéfinit certains types de noeuds intégrés généralement nécessaires, tels que ceux utilisés pour représenter des fichiers et des dossiers dans le référentiel. Vous pouvez réutiliser ces types intégrés, les étendre ou écrire les vôtres. Beaucoup de gens préconisent d’utiliser des mixins presque comme des facettes ou des aspects, de sorte que si un nœud a besoin de prendre une facette, vous pouvez simplement append un mixin au nœud.

JCR a été conçu pour faciliter l’importation de contenu XML dans le référentiel, où chaque élément est mappé sur un nœud et chaque atsortingbut est associé à un atsortingbut. Et beaucoup de choses sont représentées en utilisant XML (ou YAML ou JSON), et tout cela peut facilement être représenté et stocké dans un repository JCR. Par exemple, considérons un référentiel JCR qui stocke les informations de configuration (qui peuvent normalement être stockées dans plusieurs fichiers XML). JCR peut mettre à jour ces informations, y accéder depuis plusieurs processus, activer l’interrogation et la recherche et notifier la ou les applications lorsque le contenu change.

Il y a plusieurs bons aperçus de JCR avec plus de détails et d’exemples. Quelques-uns d’entre eux sont:

  • Présentation de l’API Java Content Repository par Titus Barik (n’est plus disponible)
  • Introduction à JCR par David Nuescheler
  • Introduction à JCR et Apache Jackrabbit par Jukka Zitting
  • Aperçu de ModeShape par Randall Hauch
  • Java Content Repository: le meilleur des deux mondes par Bertrand Delacretaz