Comment puis-je configurer des définitions de noeuds personnalisés dans Apache Jackrabbit?
-
12-09-2019 - |
Question
Est-il possible que je peux configurer sur mesure types de nœuds pour < a href = "http://jackrabbit.apache.org" rel = "nofollow noreferrer"> Apache Jackrabbit être enregistré quand est instancié un nouveau dépôt?
Je suis ma construction en utilisant l'automatisation Apache Maven et ont des tests unitaires pour exécuter avec noreferrer JUnit et les tests d'intégration pour exécuter avec Jetty et veulent pouvoir facilement mettre en place et démontage d'un référentiel de test.
La solution
Si vous êtes en mesure de passer à la Jackrabbit 2.0.0, nouvellement sorti, vous pouvez créer et enregistrer par programmation NodeTypes. Le crochet principal est la JSR-283 NodeTypeManager qui se double d'une usine pour les nouveaux NodeTypes, et une place pour eux à enregistrer. Il suffit de les inscrire dans la méthode de configuration de vos tests JUnit, et vous devriez être bon d'aller.
Autres conseils
Je vous suggère de définir vos NodeTypes en utilisant un fichier et configurer CND votre cas de test JUnit pour les enregistrer pour vous, comme dans l'exemple de cette . Je dirais que la meilleure façon de le faire est de définir un cas de test abstrait qui effectue cette configuration.
Notez également que les types de noeud sont associées à un espace de travail, et non pas dans le référentiel entier.
Selon NodeTypeManager , ceci est un exemple de code pour créer un type de noeud:
import javax.jcr.PropertyType;
import javax.jcr.Session;
import javax.jcr.nodetype.NodeType;
import javax.jcr.nodetype.NodeTypeManager;
import javax.jcr.nodetype.NodeTypeTemplate;
import javax.jcr.nodetype.PropertyDefinitionTemplate;
/**
*
* @author Aroniaina
*/
public class FileType {
public static void RegisterFileType(Session session) throws Exception {
NodeTypeManager nodeTypeManager = session.getWorkspace().getNodeTypeManager();
NodeTypeTemplate nodeType = nodeTypeManager.createNodeTypeTemplate();
nodeType.setName("FileType");
String[] str = {"nt:resource"};
nodeType.setDeclaredSuperTypeNames(str);
nodeType.setMixin(false);
nodeType.setQueryable(true);
PropertyDefinitionTemplate path = nodeTypeManager.createPropertyDefinitionTemplate();
path.setName("jcr:path");
path.setRequiredType(PropertyType.PATH);
path.setQueryOrderable(false);
path.setFullTextSearchable(false);
nodeType.getPropertyDefinitionTemplates().add(path);
PropertyDefinitionTemplate nom = nodeTypeManager.createPropertyDefinitionTemplate();
nom.setName("jcr:nom");
nom.setRequiredType(PropertyType.STRING);
nom.setQueryOrderable(true);
nom.setFullTextSearchable(true);
nodeType.getPropertyDefinitionTemplates().add(nom);
PropertyDefinitionTemplate description = nodeTypeManager.createPropertyDefinitionTemplate();
description.setName("jcr:description");
description.setRequiredType(PropertyType.STRING);
description.setQueryOrderable(true);
description.setFullTextSearchable(true);
nodeType.getPropertyDefinitionTemplates().add(description);
PropertyDefinitionTemplate motsCles = nodeTypeManager.createPropertyDefinitionTemplate();
motsCles.setName("jcr:motsCles");
motsCles.setRequiredType(PropertyType.STRING);
motsCles.setQueryOrderable(true);
motsCles.setFullTextSearchable(true);
nodeType.getPropertyDefinitionTemplates().add(motsCles);
PropertyDefinitionTemplate size = nodeTypeManager.createPropertyDefinitionTemplate();
size.setName("jcr:size");
size.setRequiredType(PropertyType.STRING);
size.setQueryOrderable(true);
size.setFullTextSearchable(false);
nodeType.getPropertyDefinitionTemplates().add(size);
PropertyDefinitionTemplate users = nodeTypeManager.createPropertyDefinitionTemplate();
users.setName("jcr:users");
users.setRequiredType(PropertyType.STRING);
users.setQueryOrderable(true);
users.setFullTextSearchable(false);
nodeType.getPropertyDefinitionTemplates().add(users);
PropertyDefinitionTemplate groupe = nodeTypeManager.createPropertyDefinitionTemplate();
groupe.setName("jcr:groupe");
groupe.setRequiredType(PropertyType.STRING);
groupe.setQueryOrderable(true);
groupe.setFullTextSearchable(false);
nodeType.getPropertyDefinitionTemplates().add(groupe);
NodeType newnodetype = nodeTypeManager.registerNodeType(nodeType, true);
session.save();
}
}
Vous pouvez jeter un oeil à notre code Silverpeas . Nous utilisons Apache Jackrabbit avec des tests unitaires. À l'heure actuelle c'est un travail en cours sur ma branche dev: https://github.com/ehsavoie / Silverpeas-Core / arbre / feature_82 utilisant dans le dépôt de mémoire, le chargement des fichiers et des tests avec identification de l'appelant au printemps. Regardez par exemple DocumentRepositoryTest
Je ne suis pas sûr de NodeTypes, mais je l'ai lu que fronde apache a une façon de spécifier le contenu initial lorsqu'un package (paquet OSGi) est installé. Cela semble au moins semblable à ce que vous avez à l'esprit.