Search the FirstSpirit Knowledge Base
Hallo,
in unserem Projekt (FS 4.2) werden momentan relativ große Logs beim Deployment aufgrund einiger depcreated Methoden erzeugt. Ein Logeintrag sieht so aus:
WARN 12.10.2010 23:08:03.718 {seID=153367} (de.espirit.firstspirit.generate.SiteProduction): deprecated usage of de.espirit.firstspirit.access.store.StoreElement#getDisplayName
inside of ...
...
inside of: $CMS_IF( #nav.ref.node.getLanguageInfo(#global.language).getDisplayName() != null)$ ....
Der Code sieht an der betroffenen Stelle tatsächlich auch so aus: $CMS_IF(#nav.ref.node.getLanguageInfo(#global.language).getDisplayName() != null)$
In den Javadocs ist IDProvider.getLanguageInfo(Language).getDisplayName() jedoch nicht als Deprecated markiert, daher gehe ich davon aus, dass die Warnung aufgrund von Code innerhalb dieser API-Methode erzeugt wird, da hier offensichtlich intern StoreElement.getDisplayName() aufgerufen wird.
Jetzt wird man natürlich sagen, dass man als Lösung einfach IDProvider.getDisplayName(Language) verwenden soll. Das "Problem" an dieser Methode ist jedoch, dass sie einen Fallback (Masterlanguage) implementiert hat, falls es einen Wert nicht in der jeweiligen Sprache gibt. Das mag vielleicht in 95% aller Fälle so gewünscht sein, bei uns ist das aber schlecht, da wir hier sehr feingranular verschiedene IF-Bedingungen haben die je nach Konstellation (ist ein Displayname in der Sprache gesetzt oder nicht) unterschiedliche Werte zurückliefern sollen.
Genau das hat nämlich IDProvider.getLanguageInfo(Language).getDisplayName() gemacht (null falls es den Displayname in der jeweiligen Sprache nicht gibt, oder eben den Displaynamen).
Gibt es hierfür vielleicht noch eine andere Möglichkeit/Lösung? Natürlich können wir das auch so beibehalten wie es ist, aber hier werden tatsächlich Unmengen an Log-Warnings generiert...
Generell wäre es vielleicht in der API für zukünftige Versionen gut, eine neue Methode ala IDProvider.getDisplayNameOrNull(Language) einzuführen, oder die IDProvider.getLanguageInfo(Language).getDisplayName()-Methode anders zu implementieren (ohne die Verwendung der depcreated method). Oder vielleicht habe ich auch selbst irgendwo einen Fehler gemacht bzw. etwas falsch bedacht und das stimmt so alles gar nicht - das wäre natürlich noch besser :smileylaugh:
Hallo,
die "Deprecated"-Warnung sollte hier nicht kommen. Sie entsteht durch nicht ganz korrekte Auswertung der Hierarchie: LanguageInfo erweitert StoreElement und überschreibt die Methode getDisplayName(). Leider übernimmt die Auswertung in einigen Fällen die Annotation der originalen Methode.
Diese Problematik wurde intern mit der ID 90024 als Fehler aufgenommen.
Vielen Dank
Stefan
Hallo,
die "Deprecated"-Warnung sollte hier nicht kommen. Sie entsteht durch nicht ganz korrekte Auswertung der Hierarchie: LanguageInfo erweitert StoreElement und überschreibt die Methode getDisplayName(). Leider übernimmt die Auswertung in einigen Fällen die Annotation der originalen Methode.
Diese Problematik wurde intern mit der ID 90024 als Fehler aufgenommen.
Vielen Dank
Stefan
Hallo,
danke für die Rückmeldung; das wird uns sicherlich auch bei der weiteren Vorgehensweise helfen.