Hilfe bei URLCreator und RegistryManager
Author: oboeck
Publication Date: 10/24/2017 16:08
Hallo zusammen,
da mir der HelpDesk hier nicht weiterhelfen möchte stelle ich die Frage an die Community :smileyhappy:
Wir haben mehr oder weniger ein nicht 100% reproduzierbares Problem bei der URL Generierung.
Und zwar verwenden wir einen eigenen URLCreator der in einem speziellen Fall falsche URLs zurückliefert.
Bei diesem Fall handelt es sich um eine ContentProjektion. Der URLCreator hat einen selbst implementierten Mechanismus das er in den RegistryManager schaut ob die URL bereits vorhanden ist.
Sollte dies der Fall sein wird an die URL einfach ein /2/ gehängt (siehe isFreeUrl()-Method). Das passiert aber wie gesagt auf eine nicht nachvollziehbare Weise und auch nicht immer.
Es muss also irgendetwas mit den Ständen in der Registry zu tun haben, oder ggfs. einem Caching?
Der LookUp im Creator sieht so aus:
public boolean isFreeUrl(String path) {
ArrayList<RegistryOperation<?>> ops = new ArrayList<>(3);
ops.add(new GetValues<>("pathRegistry", "ssUrls", URL_KEY, path));
ops.add(new GetValues<>("pathRegistry", "msUrls", URL_KEY, path));
ops.add(new GetValues<>("pathRegistry", "folderUrls", URL_KEY, path));
try {
for (Object resultSet : registryManager.call(projectId, sessionId, ops)) {
if (resultSet instanceof Collection && !((Collection) resultSet).isEmpty()) {
return false;
}
}
return true;
} catch (RegistryException e) {
log.warn("failed to check if url is free '{}'", path, e);
return true;
}
}
Die Methode isFreeUrl wird hier in einer URLFactory aufgerufen:
@Override
public String getUrl(ContentProducer contentProducer, TemplateSet templateSet, Language language, PageParams pageParams) {
UrlFactoryContext context = getContext(contentProducer);
String storedUrl = contentProducer.getStoredUrl(language, templateSet, pageParams);
if (storedUrl != null && !storedUrl.isEmpty()) {
return storedUrl;
}
final PartialUrlCreator partialUrlCreator = context.getPartialUrlCreator()
String finalUrl = partialUrlCreator.createUrl(contentProducer, templateSet, language, pageParams);
for(int i = 2; !context.isFreeUrl(finalUrl); i++) {
finalUrl = url + i + "/";
}
return finalUrl;
}
Da ich pers. genau diese Stelle nicht entwickelt habe und mir der RegistryManager unbekannt ist hier ein paar Fragen:
1. Was genau macht er? Ich weiß er händelt die Persistierung der URLs, aber vlt gibt es noch etwas mehr Infos. Die Doku ist da auch sehr spärlich.
2. Was genau bedeutet "ssUrls" als option und was bewirkt es?
3. Was genau bedeutet "msUrls" als option und was bewirkt es?
4. Was genau bedeutet "folderUrls" als option und was bewirkt es?
5. Was genau bedeutet "url_to_entity" als option und was bewirkt es?
6. Was macht der Key "pathRegistry"?
Jetzt habe ich folgende Schritte unternommen um an einem Beispiel Element das Problem mehr oder weniger zu fixen.
- URLs der Contentprojektion zurückgesetzt
- Deployment durchgeführt auf diese Contentprojektion
- Dies führte zu keiner Besserung
- Erneut URLs zurückgesetzt
- Erneut Deployt
- Wieder keine Besserung
- Im FS Monitoring das LogLevel angepasst um ggfs. die Ausgabe des RegistryManagers im server log zu sehen
- URLS zurückgesetzt
- Deployt
- Im server log stand nichts, aber auf einmal meldete der RegistryManager im URLCreator nicht mehr das die URL bereits existiert.
Ich verstehe nicht warum auf einmal nach dem 3ten Durchlauf die URL aus der Registry verschwunden war.
Frage:
7. Hat denn das zurücksetzten über den FS Client überhaupt eine Auswirkung auf den RegistryManager?
Eine Kollegin kennt aus anderen Projekten das man die RegistryDB über einen anderen Befehl komplett löschen kann um ihn zu 100% zurück zusetzten.
8. Kann es noch andere Gründe haben warum die URL zu dem ContentProjektions Entity bereits in der Registry vorhanden ist?
Beste Grüße
Oliver Böck
P.S. Es handelt sich hier um eine FS5.2 Version
Tags: registrymanager, urlcreator
Bitte melden Sie sich an, um einen Kommentar zu hinterlassen.
Kommentare
0 Kommentare