Questions & Answers

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

Type a product name