udo_woitek
I'm new here

Persistenter Speicher über mehrere Skriptaufrufe?

Hallo,

ist es möglich, zwischen zwei Aufrufen desselben Skriptes innerhalb unterschiedlicher Aufträge desselben Projektes Daten zu persistieren? Ich hätte vermutet, Project#setProperty könnte dafür genutzt werden, allerdings erhalte ich beim Aufruf der Methode gegen Ende des Skriptlaufes eine Exception:

ERROR 27.06.2018 12:47:37.860{dNR=} (de.espirit.firstspirit.server.scheduler.ScriptTaskExecutor): error during script execution : de.espirit.firstspirit.access.schedule.CancelSchedule: connection is closed

de.espirit.firstspirit.access.schedule.CancelSchedule: connection is closed

    at de.espirit.firstspirit.server.scheduler.ScheduleManagerImpl$ScheduleRunnable$1.isConnected(ScheduleManagerImpl.java:2142)

    at de.espirit.firstspirit.server.io.AbstractServerConnection.getManagerProvider(AbstractServerConnection.java:799)

    at de.espirit.firstspirit.server.io.AbstractServerConnection.getManager(AbstractServerConnection.java:759)

    at de.espirit.firstspirit.server.io.AbstractServerConnection.getSessionManager(AbstractServerConnection.java:430)

    at de.espirit.firstspirit.server.io.AbstractServerConnection._getUser(AbstractServerConnection.java:260)

    at de.espirit.firstspirit.server.io.ServerConnectionImpl._getUser(ServerConnectionImpl.java:201)

    at de.espirit.firstspirit.server.io.AbstractServerConnection.getUser(AbstractServerConnection.java:199)

    at de.espirit.firstspirit.server.io.AbstractServerConnection.getUser(AbstractServerConnection.java:85)

    at de.espirit.firstspirit.client.io.PublicAccess.getUser(PublicAccess.java:120)

    at de.espirit.firstspirit.client.io.PublicAccess.checkAccess(PublicAccess.java:164)

    at de.espirit.firstspirit.server.projectmanagement.ProjectImpl.checkAccess(ProjectImpl.java:3396)

    at de.espirit.firstspirit.server.projectmanagement.ProjectImpl.setProperty(ProjectImpl.java:2918)

    at com.raytion.connector.firstspirit.fsm.task.ProjectPropertyStore.setProjectProperty(ProjectPropertyStore.java:151)

Ist die Methode nicht geeignet, um skripteigene Daten aufrufübergreifend zu speichern oder liegt ein ganz anderes Problem vor? Gibt es eine Empfehlung, wo ich Daten zwischen den Skriptläufen speichern kann, am besten natürlich innerhalb von FirstSpirit selbst?

Danke und schönen Gruß,

Udo Woitek.

0 Kudos
2 Replies
witt
I'm new here

Hallo Udo,

grundsätzlich ist Project#setProperty dafür geeignet und wird auch in vielen Stellen von Lösungen/Modulen und projektspezifischen Umsetzungen verwendet (ein Project#save danach wäre noch angebracht!). Mir scheint, dass der Aufruf erst stattfindet nachdem die Connection geschlossen wurde. Deine Exception deutet darauf hin, dass jemand den Auftrag abgebrochen hat und erst danach noch im Fehlerfall die Skriptaktion ausgelöst wird. Könntest Du weitere Informationen zum Ablauf und der Konfiguration, vielleicht inkl. von ein paar Screenshots, posten?

Viele Grüße,

Daniel

0 Kudos

Hallo Daniel,

vielen Dank für deine Nachricht. Mit Screenshots kann ich leider nicht dienen, auch weil ich das Problem jetzt schon auf andere Weise gelöst habe. (Ich serialisiere die Daten meines PropertyStores in eine Datei.)  Vom Ablauf her war es so, dass ich mit einem eigenen Modul in einem (manuell gestarteten) Auftrag im Anschluss an eine Generierung tätig werde. Innerhalb dieser Aktion versuchte ich, meine Daten per Project#setProperty und Project#getProperty zu speichern und zu lesen. Das Projekt ermittelte ich aus dem ScheduleContext der Aktion. Das Lesem von (vorher per separatem Skript-Task) gespeicherten Properties funktionierte, Schreiben (in seltenen, für mich gefühlt spontanen) Momenten auch. Meist endete es aber in obiger Exception.

Im Moment ist es zeitlich etwas eng, aber ich werde die Speicherung in den Projekt-Properties zu gegebenem Zeitpunkt nochmal ausprobieren, da ich jetzt weiß, dass zumindest der Weg der richtige war, und dann wieder hier berichten.

Danke und Gruß,

Udo.

0 Kudos