Как я могу получить доступ к JCR-версии удаленного узла?

#java #jcr #jackrabbit #jackrabbit-oak

#java #jcr #jackrabbit #jackrabbit-дуб

Вопрос:

Я хотел бы получить доступ к javax.jcr.version.История версий удаленного узла для чтения метаданных и изменения меток или, возможно, его восстановления. Как я могу это сделать? JCR VersionManager предоставляет методы getBaseVersion(java.lang.String absPath) и getVersionHistory(java.lang.String absPath) , которые выдают PathNotFoundException , когда узел в absPath был удален, хотя данные все еще находятся в /jcr:system/jcr:versionStorage .

Я использую jackrabbit-oak 1.6.1, если это уместно. Большое вам спасибо!

Ответ №1:

После удаления узла с версиями данные о ревизии все еще находятся в /jcr:system/jcr:versionStorage , если у вас достаточно информации об узле, вы можете выполнить поиск по его версиям, nt:frozenNode узлам —

 --jcr sql2
SELECT * FROM [nt:frozenNode] as n WHERE ISDESCENDANTNODE ([/jcr:system/jcr:versionStorage]) and n.[jcr:title] LIKE "name%"
  

узел версии может быть приведен к javax.jcr.version.Version ;

Version version = (Version) frozenNode.getParent();

и восстановлен с помощью VersionManager.restore()

 VersionManager versionManager = session.getWorkspace().getVersionManager();
versionManager.restore(path, version, true);
  

Ответ №2:

AFAIU, если узел, управляемый версиями, удален, доступ к его истории версий на основе исходного пути больше невозможен.

Это означает, что вам придется отслеживать эту информацию до удаления узла.

Комментарии:

1. Так что я даже не могу восстановить его, как только он будет удален? Если это возможно, и если я хочу изменить метки в версиях, мне нужно восстановить его, изменить метки и снова удалить? 8-}

2. Я думаю , что это правда (см. docs.adobe.com/content/docs/en/spec/jcr/2.0 /… для получения дополнительной информации)

3. Я думаю, хитрость заключается в том, чтобы найти соответствующий узел nt:versionHistory или nt:frozenNode в /jcr:system/jcr:versionStorage , оттуда вы сможете восстановить. это возможно в AEM, который использует oak с некоторым пользовательским impl, не могу сказать наверняка о vanilla jackrabbit oak.

4. Да, вам нужно найти узел истории версий. Это сложно, когда узел, управляемый версией, был удален. Если он у вас есть, вы можете получить информацию о версии, но AFAIU, вы не можете использовать restore метод, поскольку для этого требуется узел, управляемый версией.

5. nt:versionHistory и nt:frozenNode могут быть приведены к VersionHistory и версии соответственно, которые реализуют методы восстановления, см. Модульные тесты для справки здесь и здесь