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