我们的应用程序中有大量已删除的页面。但是,版本仍然存在于版本存储中。有什么办法可以删除吗
我尝试遍历 /jcr:system/jcr:versionStorage 并识别已删除的页面。但是,当我尝试删除该版本时,出现以下错误。
javax.jcr.nodetype.ConstraintViolationException:项目受保护。
此外,如果我尝试通过代码清除页面,由于存储库中存在大量已删除页面,我会收到基于错误的信息
(org.apache.jackrabbit.oak.plugins.index.property.strategy.ContentMirrorStoreStrategy) - 使用索引 cqParentPath 和过滤器 Filter(query=sele) 遍历 10000 个节点(31911 个索引条目) ct [jcr:path], [jcr:score], * 来自 [nt:version] 作为 a where isdescendantnode(a,
请帮忙,因为我真的被这个问题困扰了。
所以基本问题是,有没有办法删除包含 JackRabbit (AEM) 中已删除页面版本的节点
我意识到我回答这个问题已经晚了,但它仍然可能对以后遇到这个问题的人有所帮助。
您可以从版本历史记录中删除版本(名为“jcr:rootVersion”的特殊版本除外),但无法通过常规 API 执行此操作。您需要使用 VersionManager API,如下所示:
Node node = session.getNode("/jcr:system/jcr:versionStorage/path/to/your/version/node");
Version version = (Version) node;
version.getContainingHistory().removeVersion(version.getName());
// Version removal is committed automatically, independently from Session.save() calls
没有用于删除完整版本历史记录的 API,而不是删除这些历史记录中的单个版本。我能找到的最好的解决方法是您自己找到的方法:将其中一个版本(最好是 jcr:rootVersion 因为它是最小的)恢复到某个路径,删除除 jcr:rootVersion 之外的所有版本,然后删除恢复的节点。 Oak 有一些内置功能可以清除已删除项目的历史记录,但前提是历史记录为空。您需要恢复然后删除一个版本才能触发它,但是“清空”历史记录本身不会触发它。
至于您提到的日志消息:这不是错误,只是警告。如果查询需要遍历超过 100,000 个节点,则会出现错误,此时您的查询将因异常而中止。如果您不会达到 100K 节点限制并且不担心实例过载,则可以忽略该警告。如果您确实达到 100K 限制,您有多种选择: