Alexander_Haufl
I'm new here

Script über einen Schedulerauftrag starten

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?

27 Replies
jpee
I'm new here

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

0 Kudos

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

0 Kudos
gockel
Crownpeak employee

Hallo Alexander,

wenn ich dich richtig verstanden habe, willst du dein Skript nun über die Auftragsverwaltung (Adminkonsole) geschedult laufen lassen.

Also hier:

schedule_script.jpg

Das Executable Interface benötigst du dafür nicht, außer du möchtest deinen Skriptcode in eine Javaklasse auslagern.

1) als Skript:

hello_world_script.jpg

2) als Executable würde das dann so aussehen:

hello_world_java.jpg

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

0 Kudos

Über welche FS-Version reden wir hier?

0 Kudos

fsp.bmp

0 Kudos

Hallo Sebastian,

und eine Idee warum es nicht geht?

Gruß Alex

0 Kudos

Hallo Alexander,

da wir am Freitag persönlich über das Thema gesprochen haben, kannst du bitte das Verhalten nochmal genauer und ausführlich beschreiben.

  • Der gleiche Code geht im JavaClient als Executable und als Auftrag nicht?
  • Bitte de Sourcecode posten
  • und das ggf. defekte Zip

Gruß

Gerrit

0 Kudos

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 Smiley Wink

430176.129.zip.jpg


0 Kudos