Search the FirstSpirit Knowledge Base
Hi zusammen,
ich habe ein script geschrieben mit dem man eine Packet version erstellt und verteilt. Dieses Script lässt sich über das Menü ausführen. Nun möchte ich dieses Script über einen Scheduler-Auftrag dieses Script in bestimmten Intervalen automatisch laufen zu lassen.
Ich habe nun eine Funktion unter:
de.espirit.firstspirit.access.script.Executable
gefunden.
In der Api wird die Funktion wie folgt beschrieben:
execute(Map<String,Object> context)
Delegates to Executable.execute(java.util.Map, java.io.Writer, java.io.Writer)
, e.g. with System.out
and System.err
as second / third parameter.
Was mir nicht ganz klar ist: was genau stellt die map dar und was erwartet die Funktion?
Hat jemand damit schon Erfahrung?
Hallo Alexander,
kannst du das Script eventuell in die Auftragsverwaltung auslagern? Von da kann man ja komfortabel Aufträge zu bestimmten Zeitpunkten ausführen.
Mit der angegebenen Funktion kam ich bisher leider nicht in Kontakt.
Viele Grüße aus Leipzig
Johannes
Hallo Johannes,
das habe ich auch schon versucht, da gibt es aber Probleme, sobald die neue version verteilt werden soll, wird eine ExecutionException geworfen. Da gibt es wohl Probleme mit der Funktion java.lang.util.zip..open() wenn ich mich nicht täusche. Soweit ich aus der Fehlermeldung rauslesen konnte, gibt es da ein Problem mit dem öffnen der Paket-XML.
Ich denke das man Paketversionen eventuell nur über den Client erzeugen kann und nicht serverseitig.
Grüße aus Stuttgart
Alex
Hallo Alexander,
wenn ich dich richtig verstanden habe, willst du dein Skript nun über die Auftragsverwaltung (Adminkonsole) geschedult laufen lassen.
Also hier:
Das Executable Interface benötigst du dafür nicht, außer du möchtest deinen Skriptcode in eine Javaklasse auslagern.
1) als Skript:
2) als Executable würde das dann so aussehen:
Für diesen Fall muss ein Library-Modul existieren, welches die Klasse HelloWorld enthält. Diese muss das Interface Executable implementieren und würde für die gleiche Funktionalität wie im obigen Skript dann so aussehen:
import de.espirit.firstspirit.access.script.Executable;
public class HelloWorld implements Executable {
public Object execute(final Map<String, Object> params) throws ExecutionException {
return execute(params, new PrintWriter(System.out, true), new PrintWriter(System.err, true));
}
public Object execute(final Map<String, Object> params, final Writer out, final Writer err) throws ExecutionException {
final Object scriptContext = params.get("context");
if (scriptContext instanceof ScheduleContext) {
final ScheduleContext context = (ScheduleContext) scriptContext;
context.logInfo("hello world");
return true;
}
}
return false;
}
}
In der übergebenen Parametermap stehen also die Variablen zur Verfügung, die auch im Skript zur Verfügung stehen. In diesem Fall z.B. das "context" Objekt. Für den Fall des Scheduleauftrages, handelt es sich also um einen ScheduleContext.
Hallo Sebastian,
zu deinen Vermutungen: ja ich möchte das Script über die Auftragsverwaltung laufen lassen und das Script ist ausgelagert, ein entsprechendes Library Modul existiert auch.
Ich habe es nun soweit hingekriegt das das Script gestartet wirt und die Methoden richtig aufgerufen werden, allerdings bekomme ich da wieder die Fehlermeldung:
ERROR 28.01.2011 10:42:15.851 {seID=828259} (de.espirit.firstspirit.service.ppool.PPoolLoggerImpl): cannot init zip entries for package version 'GlobalTemplatePackage version=106'
java.util.zip.ZipException: error in opening zip file
at java.util.zip.ZipFile.open(Native Method)
at java.util.zip.ZipFile.<init>(ZipFile.java:114)
at java.util.zip.ZipFile.<init>(ZipFile.java:131)
at de.espirit.firstspirit.service.ppool.PackageImporter.<init>(PackageImporter.java:194)
at de.espirit.firstspirit.service.ppool.PackageManagerImpl.importPackage(PackageManagerImpl.java:252)
at de.espirit.firstspirit.service.ppool.PackageManagerAdapter.importPackage(PackageManagerAdapter.java:466)
at de.espirit.firstspirit.service.ppool.SubscriptionImpl.importVersion(SubscriptionImpl.java:263)
at de.espirit.firstspirit.service.ppool.SubscriptionImpl.pullImport(SubscriptionImpl.java:236)
at de.espirit.firstspirit.service.ppool.PackageManagerImpl.publishPackage(PackageManagerImpl.java:344)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at de.espirit.firstspirit.server.module.ServiceWrapperImpl.invoke(ServiceWrapperImpl.java:87)
at $Proxy6.publishPackage(Unknown Source)
at de.espirit.firstspirit.service.ppool.PackageManagerAdapter.publishPackage(PackageManagerAdapter.java:476)
at de.espirit.firstspirit.service.ppool.PackageImpl.publishPackage(PackageImpl.java:436)
at com.trelleborg.firstspirit.tools.DeliverTemplates.execute(DeliverTemplates.java:72)
at de.espirit.firstspirit.common.ScriptUtil.execute(ScriptUtil.java:88)
at de.espirit.firstspirit.server.scheduler.ScriptTaskExecutor.run(ScriptTaskExecutor.java:92)
at de.espirit.firstspirit.server.scheduler.ScheduleManagerImpl$TaskCallable.executeLocal(ScheduleManagerImpl.java:1955)
at de.espirit.firstspirit.server.scheduler.ScheduleManagerImpl$TaskCallable.executeLocal(ScheduleManagerImpl.java:1935)
at de.espirit.firstspirit.server.scheduler.ScheduleManagerImpl$TaskCallable.call(ScheduleManagerImpl.java:1863)
at de.espirit.firstspirit.server.ExecutionManagerImpl$ExtendedCallable.call(ExecutionManagerImpl.java:505)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at de.espirit.common.util.BoundedExecutorService$RunnableWrapper.run(BoundedExecutorService.java:414)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)
at de.espirit.common.util.SuspendableThread.run(SuspendableThread.java:36)
Hast du eine Idee woran es liegen könnte?
Gruß Alex
Über welche FS-Version reden wir hier?
Hallo Sebastian,
und eine Idee warum es nicht geht?
Gruß Alex
Hallo Alexander,
da wir am Freitag persönlich über das Thema gesprochen haben, kannst du bitte das Verhalten nochmal genauer und ausführlich beschreiben.
Gruß
Gerrit
Hallo Gerrit,
Ich habe ein Script geschrieben, welches ich als fsm-FIle dem FSP-Server zur Verfügung stelle. In FSP habe ich dieses als Menüscript angelegt, mit volgendem Aufruf:
import com.trelleborg.firstspirit.tools.*;
pu = new com.trelleborg.firstspirit.tools.DeliverTemplates(context);
pu.deliver();
Diese Class ist nicht Executable.
Da läuft es ohne Probleme durch. Nun wollte ich das Script über einen Scheduler regelmässig starten.
Wie Sebastian mir geraten hat, habe ich das Script als Executable declariert, dazu habe ich einen neue Classe angelegt und dem FSP als fsm-File zur Verfügung gestellt. Der Aufruf im Scheduler lautet wie folgt:
#! executable-class
com.trelleborg.firstspirit.tools.ScheduledDeliverTemplates
Hierbei wird nun die oben genannte Fehlermeldung geworfen, ich denke nicht dass das Zip fehlerhaft ist und ich kann es hier nicht anhängen ("der Inhalt ist nicht zulässig"). Ich habe jetzt hinten einfach .jpg drangehängt