Search the FirstSpirit Knowledge Base
Hallo,
wir fragen während der Generierung von Seiten immer wieder einen Webservice ab. Es kann nun sein, das der Webservice zwischendrin nicht erreichbar ist. Ich habe deswegen ein Skript geschrieben, welches bei einem Erfolgreichen Aufruf die Antwort cached und wenn der Service mal nicht erreichbar ist, sich die Daten aus dem Cache holt. Als Cache verwende ich eine einfache Tabelle in den Datenquellen. Gekürzt sieht das Skript so aus:
userService = context.getUserService();
contentStore = userService.getStore(Store.Type.CONTENTSTORE, true);
cache = contentStore.getContent2ByName(name);
equal = new Equal("key", key);
or = new Or();
or.add(equal);
session = cache.getSession();
select = session.createSelect(name);
select.setConstraint(or);
entityList = session.executeQuery(select);
entity;
if(entityList.size()==0) {
entity = session.createEntity(name);
} else {
entity = entityList.get(0);
}
Das Skript ausgeführt als Kontextmenue funktioniert auch soweit. Wenn aber das Skript bei der Generierung läuft wird folgende Exception geworfen:
java.lang.UnsupportedOperationException
Wie kann ich zur Generierung einen Datensatz erzeugen?
Vielen Dank schon einmal im voraus
Viele Grüße
Elmar
Hallo Elmar,
Ich fürchte, dass dieses Konzept nicht aufgehen wird, da man bei einer Generierung in einer definierten Revision ist [die sich nicht ändern lässt, siehe https://community.e-spirit.com/message/2236#2236]
Selbst wenn Du die entsprechenden Daten in die Datenbank schreibst, werden sie Dir bei der Generierung nicht zur Verfügung stehen, da die Daten ja mit einer neueren Revision geschrieben wurden [und es sie somit für die aktuelle Generierung nicht gibt]
Möglich wäre es hier, entweder den Webservice einmal vor der Generierung per Skript abzufragen, die Daten zu speichern und dann den Zeitpunkt der Generierung auf "jetzt" setzen:
context.setStartTime(new Date());
Bleibt natürlich das Problem, dass der Webservice nicht permanent ereichbar ist...
Viele Grüße aus Dortmund,
Holger
Hallo,
vielen Dank für die schneller Antwort. Gibt es einen Anderen Ansatz einen Cache zu implementieren, die Datenquellen würden sich dafür ja anbieten
Viele Grüße aus München
Elmar
Statt direkt den WebService anzusprechen könnte man einen eigenen Service (de.espirit.firstspirit.module.Service) dazwischenschalten - quasi als Proxy.