В Alfresco: Самый быстрый способ получить NodeRef из пути узла - PullRequest
4 голосов
/ 03 апреля 2012

Я пытаюсь улучшить производительность одной из наших реализаций,

В настоящее время мы извлекаем узел с помощью Alfresco nodeService.getChildAssocs из rootNode и запускаем какой-то цикл для сравнения пути.

Это не очень эффективно, когда у вас огромное количество файлов.Я отладил webscript файла locate из Share и увидел, что они запускают запрос Lucene на основе пути.

Это также то, что описано здесь: http://wiki.alfresco.com/wiki/NodeRef_cookbook#Getting_a_NodeRef_from_its_path

Является ли это наиболее эффективнымспособ получить NodeRef?Есть ли другой API для выполнения этой простой задачи со стороны репозитория (на Java)?

большое спасибо

Ответы [ 2 ]

4 голосов
/ 03 апреля 2012

В базовом API вы можете вызывать :

FileFolderService.resolveNamePath(NodeRef rootNode, List pathElements)
FileFolderService.resolveNamePath(NodeRef rootNode, List pathElements, Boolean mustExist)

Внутренне , он использует шаблон поискового цикла, вероятно, похожий на тот, который вы упомянули 'ты уже делаешь.Затем, если вы хотите просто выполнить поиск, вы можете использовать этот другой API:

SearchService.query(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, SearchService.LANGUAGE_XPATH, "/app:company_home/cm:path/cm:to/cm:content")

Удаленный API OOTB - это org/alfresco/cmis/item.get веб-скрипт, который, среди прочего, предлагает следующие шаблоны URL:

/cmis/s/{store}/arg/p?path={path}&filter={filter?}&returnVersion={returnVersion?}&includeAllowableActions={includeAllowableActions?}&includeRelationships={includeRelationships?}&includeACL={includeACL?}&renditionFilter={renditionFilter?}
/api/path/{store_type}/{store_id}/{nodepath}?filter={filter?}&returnVersion={returnVersion?}&includeAllowableActions={includeAllowableActions?}&includeRelationships={includeRelationships?}&includeACL={includeACL?}&renditionFilter={renditionFilter?}

Я бы не стал рекомендовать его для критичного к производительности пути, поскольку CMIS довольно болтлив.Вероятно, я бы разработал собственный веб-скрипт, который использует вышеупомянутые базовые API.

0 голосов
/ 12 января 2018

Вот примеры использования CMIS RESTful API, при условии, что у вас есть файл репо "/Sites/test/test.pdf":

Возвращение метаданных в XML Atom:

http//localhost:8080/alfresco/api/-default-/public/cmis/versions/1.1/atom/path?path=/Sites/test/test.pdf

Загрузите содержимое (сам файл PDF):

http//localhost:8080/alfresco/api/-default-/public/cmis/versions/1.1/browser/root/Sites/test/test.pdf

Возврат метаданных в формате JSON:

http//localhost:8080/alfresco/api/-default-/public/cmis/versions/1.1/browser/root/Sites/test/test.pdf?cmisselector=object

Возвращение дочерних папок в формате JSON:

http//localhost:8080/alfresco/api/-default-/public/cmis/versions/1.1/browser/root/Sites/test?cmisselector=children
...