web-dev-qa-db-fra.com

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

J'essaie d'évaluer les référentiels de contenu ( JSR28 ) comme Jackrabbit et ModeShape mais je dois avouer que je ne comprends pas quel problème se résout dans première place et même si c'est un bon choix pour le projet. Selon vous, quels cas sont la meilleure solution à appliquer? N'est-ce pas la même chose que les bases de données relationnelles, sauf pour la taille? Pourquoi? Points supplémentaires pour pointer des exemples du monde réel.

Merci d'avance.

74
Ither

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

  • est hiérarchique, vous permettant d'organiser votre contenu dans une structure qui correspond étroitement à vos besoins et où les informations connexes sont souvent stockées les unes à côté des autres et donc faciles à parcourir
  • 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 schéma" à restrictif (par exemple, comme une base de données relationnelle)
  • utilise un standard Java API (par exemple, javax.jcr)
  • résumés où les informations sont réellement stockées: de nombreuses implémentations JCR peuvent stocker du contenu dans une variété de bases de données relationnelles et d'autres magasins, certains peuvent exposer des magasins non JCR via l'API JCR, et certains peuvent fédérer plusieurs magasins en un seul référentiel virtuel.
  • prend en charge les requêtes et la recherche plein texte hors de la boîte
  • prend en charge les événements, le verrouillage, la gestion des versions 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 l'objectif 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) sont vraiment nés du besoin d'une API standard et commune pour accéder à différents référentiels de contenu (voir JSR-17 et JSR-28 ).

Un autre exemple est les 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 utilisent les référentiels depuis un certain temps.

Les systèmes de gestion des artefacts peuvent utiliser des référentiels pour gérer les 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 emplacement que les fichiers: ceux qui comprennent ces propriétés supplémentaires peuvent les voir, ceux qui s'en moquent n'ont pas à les voir. Je sais Artifactory est une implémentation du 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 à gérer des fichiers. JCR utilise une notion simple d'une 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 qui sont 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, nœud par nœud. JCR prédéfinit certains types de nœuds intégrés qui sont généralement nécessaires, comme ceux utilisés pour représenter les fichiers et les 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 doit prendre une facette, vous pouvez simplement ajouter un mixin au nœud.

JCR a été conçu pour prendre en charge facilement l'importation de contenu XML dans le référentiel, où chaque élément est mappé à un nœud et chaque attribut est mappé à un attribut. 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 référentiel 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, autoriser l'accès à celles-ci à partir de plusieurs processus, activer les requêtes et les recherches, et notifier les applications lorsque le contenu change.

Il existe plusieurs bons aperçus de JCR avec plus de détails et d'exemples. En voici quelques-uns:

84
Randall Hauch