1

Jackrabbit 2.1 にはバージョン管理されたノードがあります。これらのノードの 1 つの削除の「元に戻す」をサポートしたいと考えています。「それを見つける」というのはトリッキーな部分のようです。

4

1 に答える 1

3

バージョンツリーを適切に反復する方法がわからない-可能であるはずです。上に行くと、JCR1.0セクション8.2.2.1およびJCR2.0セクション15.10/jcr:system/jcr:versionStorageを参照してください-しかし、次のようなクエリでバージョンツリーをクエリできます。

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 );
于 2010-09-22T16:47:42.697 に答える