У меня есть репозиторий контента JCR, реализованный в ModeShape (4.0.0.Final). Структура хранилища довольно проста и выглядит следующим образом:Запрос для общих узлов в JCR (ModeShape)
/ (root)
Content/
Item 1
Item 2
Item 3
...
Tags/
Foo/
Bar/
.../
содержание изначально создается и хранится в /Content
как [nt:unstructured]
узлов с [mix:shareable]
Mixin. Когда элемент контента помечен, узел тега сначала создается под /Tags
, если он еще не существует, а узел контента разделяется/клонируется на узел тега, используя Workspace.clone(...)
, как описано in the JCR 2.0 spec, section 14.1, Creation of Shared Nodes.
(Я не считаю это особенно изящным, и я только что прочитал this answer, about creating a tag based search system in JCR, поэтому я понимаю, что это может быть не самое лучшее/быстрое/наиболее масштабируемое решение. Но я «унаследовал» это решение от разработчиков до меня, поэтому я надеюсь, мне не нужно переписывать все это ...)
Как бы то ни было, сам совместный доступ (я могу проверить, что узлы есть в веб-приложении ModeShape Content Explorer или программно session.getRootNode().getNode("Tags/Foo").getNodes()
). Но я не могу найти какие-либо общие узлы, используя запрос!
Моя первая попытка (с использованием JCR_SQL2
синтаксис) был:
SELECT * FROM [nt:unstructured] AS content
WHERE PATH(content) LIKE '/Tags/Foo/%' // ISDECENDANTNODE(content, '/Tags/Foo') gives same result
ORDER BY NAME(content)
Набор результат был к моему удивлению пустой.
Я также попытался найти в [mix:shareable]
, как это:
SELECT * FROM [mix:shareable] AS content
WHERE PATH(content) LIKE '/Tags/Foo/%' // ISDECENDANTNODE(content, '/Tags/Foo') gives same result
ORDER BY NAME(content)
Это также возвращается пустой результирующий набор.
Я могу видеть из запроса:
SELECT * FROM [nt:unstructured] AS content
WHERE PATH(content) LIKE '/Content/%' // ISDECENDANTNODE(content, '/Content') works just as well
ORDER BY NAME(content)
... что запрос иначе работает, и возвращает ожидаемый результат (все содержание). Он просто не работает при поиске общих узлов.
Как правильно найти общие узлы в JCR с помощью режима ModeShape?
Обновление: я обновил до 4.1.0. Финал, чтобы узнать, помогло ли это, но это не повлияло на описанное поведение.
Я опубликовал тот же вопрос на форумах [JBoss/ModeShape] (https://developer.jboss.org/message/918745#918745) из-за отсутствия ответов здесь. – haraldK