4

有没有一种方法可以在实例化新存储库时为Apache Jackrabbit配置自定义节点类型以进行注册?

我正在使用Apache Maven自动化我的构建,并且有一些单元测试可以使用JUnit运行,集成测试可以使用Jetty运行,并且希望能够轻松设置和拆除测试存储库。

4

5 回答 5

7

如果您能够升级到新发布的 Jackrabbit 2.0.0,您可以通过编程方式创建和注册节点类型。主要的钩子是 JSR-283 NodeTypeManager,它兼作新 NodeType 的工厂和注册它们的地方。只需在 JUnit 测试的 setup 方法中注册它们,就可以开始使用了。

于 2010-02-12T01:34:16.973 回答
5

我建议您使用CND 文件定义您的节点类型,并配置您的 JUnit 测试用例为您注册它们,如本示例中所示。我想说最合适的方法是定义一个执行此配置的抽象测试用例。

另请注意,节点类型与工作空间相关联,而不是与整个存储库相关联。

于 2009-07-31T08:56:07.593 回答
2

根据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();        
        }

    }
于 2015-11-04T14:58:03.247 回答
0

您可以在Silverpeas中查看我们的代码。我们正在使用带有一些单元测试的 Apache Jackrabbit。目前这是我的开发分支上正在进行的一项工作:https ://github.com/ehsavoie/Silverpeas-Core/tree/feature_82在内存存储库中使用,加载 CND 文件并使用 spring 进行测试。例如查看DocumentRepositoryTest

于 2012-12-04T07:57:03.740 回答
-1

我不确定节点类型,但我读过 apache sling 有一种方法可以在安装包(osgi 包)时指定初始内容。听起来至少与您的想法相似。

于 2009-05-28T04:58:41.013 回答