如何在Apache Jackrabbit中配置自定义节点定义?
问题描述:
有没有一种方法可以配置自定义node typesApache Jackrabbit在新实例化库中注册?如何在Apache Jackrabbit中配置自定义节点定义?
我使用Apache Maven,并有一些单元测试与JUnit测试和集成测试运行与Jetty运行,并希望能够轻松地设置和拆除的测试自动化仓库我的构建。
答
如果能够升级到新发布的2.0.0兔崽子,你可以通过编程方式创建和注册nodetypes。主要的钩子是JSR-283 NodeTypeManager,它既是新NodeType的工厂,也是注册的地方。只需在您的JUnit测试的设置方法中注册它们,您应该很好。
答
我不知道nodetypes,但我读过,阿帕奇吊带有办法安装包(OSGi包)时指定初始内容。听起来至少类似于你的想法。
答
你可以看看我们在Silverpeas代码。 我们使用Apache Jackrabbit进行一些单元测试。 目前这是我开发分支上的一项工作:https://github.com/ehsavoie/Silverpeas-Core/tree/feature_82在内存资源库中使用,加载CND文件并使用spring进行测试。 查找例如在DocumentRepositoryTest
答
根据NodeTypeManager,这是一个代码示例来创建节点类型:
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();
}
}
嗨acfoltzer !.调用createNodeTypeTemplate()时,我得到UnsupportedRepositoryOperationException。哪里有问题? – Amir 2017-08-08 11:00:45