Java 如何在Apache Jackrabbit中配置自定义节点定义?
有没有一种方法可以在实例化新存储库时配置要注册的自定义存储库Java 如何在Apache Jackrabbit中配置自定义节点定义?,java,jackrabbit,jcr,jsr170,Java,Jackrabbit,Jcr,Jsr170,有没有一种方法可以在实例化新存储库时配置要注册的自定义存储库 我正在使用和运行一些单元测试和集成测试来自动化我的构建,并希望能够轻松地设置和拆除测试存储库。我不确定节点类型,但我了解到apache sling有一种在安装包(osgi捆绑包)时指定初始内容的方法。听起来至少与您的想法相似。我建议您使用定义节点类型,并配置JUnit测试用例为您注册它们,如下所示。我认为最合适的方法是定义一个抽象的测试用例来执行这个配置 还请注意,节点类型与工作区相关联,而不是与整个存储库相关联。如果您能够升级到最新
我正在使用和运行一些单元测试和集成测试来自动化我的构建,并希望能够轻松地设置和拆除测试存储库。我不确定节点类型,但我了解到apache sling有一种在安装包(osgi捆绑包)时指定初始内容的方法。听起来至少与您的想法相似。我建议您使用定义节点类型,并配置JUnit测试用例为您注册它们,如下所示。我认为最合适的方法是定义一个抽象的测试用例来执行这个配置
还请注意,节点类型与工作区相关联,而不是与整个存储库相关联。如果您能够升级到最新发布的Jackrabbit 2.0.0,则可以通过编程方式创建和注册节点类型。主要的钩子是JSR-283,它既是新节点类型的工厂,也是它们注册的地方。只需在JUnit测试的设置方法中注册它们,就可以了。您可以在中查看我们的代码。 我们正在使用ApacheJackrabbit进行一些单元测试。 目前,我的开发分支正在进行这项工作:使用内存存储库、加载CND文件和使用spring进行测试。 查看的示例,根据,这是创建节点类型的代码示例:
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();
}
}
不,节点类型在Jackrabbit中安装在存储库范围内,并且在规范中也以这种方式显示。原因是您可以将节点从一个工作区克隆/复制到另一个工作区,因此分离节点类型注册是没有意义的。否则我会支持你的回答。嗨,阿佛兹!。调用createNodeTypeTemplate()时,我遇到了不受支持的PositionOperationException。问题在哪里?