epitschke
Crownpeak employee

MethodNotSupportedException beim Aufruf "createEntity" auf einer Session

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

0 Kudos
3 Replies
hoebbel
Crownpeak employee

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

0 Kudos

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

0 Kudos

Statt direkt den WebService anzusprechen könnte man einen eigenen Service (de.espirit.firstspirit.module.Service) dazwischenschalten - quasi als Proxy.

Peter
0 Kudos