2010-07-16 1 views

ответ

3

Не знаете, как пройти по версии дерева правильно - должно быть возможно, я думаю, при переходе /jcr:system/jcr:versionStorage см JCR 1.0 section 8.2.2.1 и JCR 2.0 section 15.10 - но вы можете запросить версию дерева с запросом, как

SELECT * FROM nt:frozenNode WHERE prop = 'value' 

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

Узлов возвращаемых будут замороженные узлами, получить родительский узел для получения версии:

NodeIterator iter = res.getNodes(); 
while (iter.hasNext()) { 
    Node frozenNode = iter.nextNode(); 
    Version v = (Version) frozenNode.getParent(); 
    // ... 
} 

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

Вы знаете, что он удаляется, когда jcr:frozenUuid из frozenNode не могут быть найдены в сессии:

boolean deleted = false; 
try { 
    session.getNodeByUUID(
     frozenNode.getProperty(JcrConstants.JCR_FROZENUUID).getString() 
    ); 
} catch (ItemNotFoundException e) { 
    deleted = true; 
} catch (RepositoryException e) { 
    continue; 
} 

Чтобы восстановить его, взять версию и передать его менеджеру версии, наряду с абсолютный путь, чтобы восстановить его (который может исходить от имущества, сохраненного на замерзшей узле версии, с):

VersionManager vMgr = session.getWorkspace().getVersionManager(); 
vMgr.restore(path, v, true); 

Если вы каким-то образом знают это без необходимости искать его, вы можете также получить версию по UUID:

Version v = (Version) session.getNodeByUUID(versionUUID); 
Смежные вопросы