Sie müssen alles vermeiden, was SOLR berührt, wie those APIs are only Eventually Consistent
Insbesondere müssen Sie eine API, die auf canned queries basiert. Die wichtigsten für Ihren Anwendungsfall sind NodeService.getChildAssocs und NodeService.getChildByName. Einige von FileFolderService funktionieren sofort auch
Ihre beste Wette wäre, einen Pfad in Komponenten aufzuteilen, dann einen rekursiven/Looping-Abstieg durch sie durchzuführen. Je nachdem, ob Sie es nach Namen wollen (cm:name
) oder QName (bezogen auf das Assoc), dann würden Sie eine der beiden Methoden verwenden NodeService
zB (nicht vollständig getestet ...)
String[] parts = path.split("\\/");
NodeRef nodeRef = nodeService.getRootNode(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE);
for (String name : parts) {
NodeRef child = nodeService.getChildByName(nodeRef, ContentModel.ASSOC_CONTAINS, name);
if (child == null)
throw new Exception("Path part not found "+name+" in "+path+" at "+nodeRef);
nodeRef = child;
}
return nodeRef;
'FileFolderService.resolveNamePath' ruft' searchSimple() 'Methode auf und ruft' nodeService.getChildByName() 'auf. Daher würde ich empfehlen, 'nodeService.getChildByName()' direkt aufzurufen, anstatt 'FileFolderService.resolveNamePath()' Methode aufzurufen. –
Danke für den Tipp! Mein Ziel war es, das Rad nicht neu zu erfinden, und daher einen Anruf zu machen, anstatt die Schleife selbst zu implementieren. Aber Projekte, die Leistung über Wiederverwendung wertschätzen, sollten in der Tat die Lösung von Gagravarr verwenden :-) –