oboeck
I'm new here

Hilfe bei URLCreator und RegistryManager

Hallo zusammen,

da mir der HelpDesk hier nicht weiterhelfen möchte stelle ich die Frage an die Community Smiley Happy

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

0 Kudos
3 Replies
MichaelaReydt
Community Manager

Hallo Oliver,

in Rücksprache mit unserem Technical Support habe ich erfahren, dass ihr evtl. bereits einen Ansatz für das von dir beschriebene Szenario habt. Sind deine Fragen damit bereits beantwortet oder ist dieses Posting weiterhin offen?

Viele Grüße

Michaela

0 Kudos

Hallo Michaela,

naja der Ansatz war das wir es nicht lösen konnten und es auf eine inkonsistente FS Registry zurückgeführt haben. Wir hatten dann das betroffene DEV System durch einen Clone vom LIVE System ersetzt. Seither tritt der Fehler nicht mehr auf.

Hinzu kam im Vorfeld das an manchen Stellen und durch ungünstige Konstellationen es auch Vorkommen konnte das die URL in der Tat 2mal generiert worden ist. Durch einen redaktionellen Pflegefehler.

Nichts desto trotz finde ich es schade das mir bisher keiner wirklich meine allg. Fragen beantwortet hat. In der Doku konnte ich hierzu auch kaum etwas finden.

1. Was genau macht der RegistryManager ? Ich weiß er händelt die Persistierung der URLs, aber vlt gibt es noch etwas mehr Infos.
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"?

Es wäre nett wenn du mir hierzu ein paar Antworten geben könntest.

Danke und Beste Grüße

Olli

0 Kudos

Hallo Oliver,

anhand der Beschreibung kann ich nicht verstehen, welches Problem mit der Umsetzung gelöst werden soll.

FirstSpirit sorgt automatisch dafür, das es nicht zu doppelten URLs komt, indem es z.B. article.html in article-2.html umwandelt.

Ansonsten: Ihr greift da auf interne Schnittstellen von FirstSpirit zu, dafür wirst du hier keinen Support bekommen.

Viele Grüße,

Peter

Peter
0 Kudos