如何在Apache Jackrabbit中配置自定义节点定义?

如何在Apache Jackrabbit中配置自定义节点定义?

问题描述:

有没有一种方法可以配置自定义node typesApache Jackrabbit在新实例化库中注册?如何在Apache Jackrabbit中配置自定义节点定义?

我使用Apache Maven,并有一些单元测试与JUnit测试和集成测试运行与Jetty运行,并希望能够轻松地设置和拆除的测试自动化仓库我的构建。

如果能够升级到新发布的2.0.0兔崽子,你可以通过编程方式创建和注册nodetypes。主要的钩子是JSR-283 NodeTypeManager,它既是新NodeType的工厂,也是注册的地方。只需在您的JUnit测试的设置方法中注册它们,您应该很好。

+0

嗨acfoltzer !.调用createNodeTypeTemplate()时,我得到UnsupportedRepositoryOperationException。哪里有问题? – Amir 2017-08-08 11:00:45

我不知道nodetypes,但我读过,阿帕奇吊带有办法安装包(OSGi包)时指定初始内容。听起来至少类似于你的想法。

我建议您使用CND file来定义节点类型,并配置您的JUnit测试用例来为您注册它们,如此example。我会说最合适的方法是定义一个执行此配置的抽象测试用例。

还要注意,节点类型被关联到一个工作区,而不是整个库。

+2

否,节点类型安装仓库范围在贾卡拉比特和由该规范也被视为这种方式。原因是您可以将节点从一个工作区克隆/复制到另一个工作区,因此分隔节点类型注册是没有意义的。 否则,我会第二个你的答案。 – 2009-08-31 17:40:29

你可以看看我们在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();   
     } 

    }