Как настроить пользовательские определения узлов в Apache Jackrabbit?

Есть ли способ настроить пользовательские типы узлов для Apache Jackrabbit для регистрации при создании нового репозитория?

Я автоматизирую свою сборку с помощью Apache Maven, и у меня есть несколько модульных тестов для запуска с JUnit и интеграционные тесты для запуска с Jetty и хотите иметь возможность легко настраивать и удалять тестовый репозиторий.


person Brian Matthews    schedule 20.04.2009    source источник


Ответы (5)


Если вы можете выполнить обновление до недавно выпущенной версии Jackrabbit 2.0.0, вы можете программно создавать и регистрировать типы узлов. Основной обработчик - это JSR-283 NodeTypeManager, который служит фабрикой для новых типов узлов и местом их регистрации. Просто зарегистрируйте их в методе настройки ваших тестов JUnit, и все будет в порядке.

person acfoltzer    schedule 12.02.2010
comment
Привет, acfoltzer !. Я получил исключение UnsupportedRepositoryOperationException при вызове createNodeTypeTemplate (). в чем проблема? - person Amir; 08.08.2017

Я предлагаю вам определить типы узлов с помощью файла CND и настроить тестовые примеры JUnit. чтобы зарегистрировать их для вас, как в этом примере. Я бы сказал, что наиболее подходящий способ сделать это - определить абстрактный тестовый пример, который выполняет эту конфигурацию.

Также обратите внимание, что типы узлов связаны с рабочей областью, а не со всем репозиторием.

person Douglas    schedule 31.07.2009
comment
Нет, типы узлов устанавливаются в Jackrabbit для всего репозитория и также рассматриваются в спецификации. Причина в том, что вы можете клонировать / копировать узлы из одной рабочей области в другую, поэтому нет смысла разделять регистрации типов узлов. В противном случае я бы поддержал ваш ответ. - person Alexander Klimetschek; 31.08.2009

Согласно 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();        
        }

    }
person Aroniaina    schedule 04.11.2015

Вы можете ознакомиться с нашим кодом в Silverpeas. Мы используем Apache Jackrabbit с некоторыми модульными тестами. В настоящее время это работа над моей веткой разработчиков: https://github.com/ehsavoie/Silverpeas-Core/tree/feature_82 использование в репозитории памяти, загрузка файлов CND и тестирование с помощью Spring. Взгляните, например, на DocumentRepositoryTest

person ehsavoie    schedule 04.12.2012

Я не уверен насчет типов узлов, но я читал, что у слинга apache есть способ указать начальное содержимое при установке пакета (пакета osgi). По крайней мере, похоже на то, что вы имеете в виду.

person Community    schedule 28.05.2009