gockel
Crownpeak employee
Crownpeak employee

Re: Script über einen Schedulerauftrag starten

Hallo Herr Dirlewanger,

in jetztigen FS-Versionen (ab 4.2 R4) wird eine solche Executable class sinnvollerweise als Public-Komponente definiert.

Vergl. hierzu: Kapitel 2.9.1.7 Public der Dokumentation "Entwicklerhandbuch für Komponenten"

0 Kudos
Martin_Dirlewan
Returning Observer

Re: Script über einen Schedulerauftrag starten

Hallo Herr Gockel,

vielen Dank für Ihre schnelle Antwort.

D.h. damit die Klasse vom classloader beim ausführen eines Auftrags gefunden wird, muss diese in einer Public-Komponente liegen?

Jars von anderen Komponenten wie von mir vorgeschlagen eine WEB-Komponente werden nicht im classloader (vom Auftrag ausführen) bekannt gegeben?

Viele Grüße

Martin Dirlewanger

0 Kudos
gockel
Crownpeak employee
Crownpeak employee

Re: Script über einen Schedulerauftrag starten

Korrekt. Die Klasse muss entweder als Library-Komponente oder als Public-Komponente (ab 4.2 R4) definiert sein.

Allerdings sollte in ihrem Fall es in etwa so funktionieren:

<module>

     <name>Modul 1</name>

     <version>1.0</version>

     <components>

          <public>

               <name>AppExecutor-Name</name>

               <class>de.espirit.pm.modules.modul.AppExecutor</class>

          </public>

          <web-app>

               <resources>

                    <resource scope='module'>lib/modul1.jar</resource>     <----- contains AppExecutor

               </resources>

          </web-app>

     </components>

</module>

Martin_Dirlewan
Returning Observer

Re: Script über einen Schedulerauftrag starten

Hallo Herr Gockel,

leider findet er im Auftragsscript die Klasse nicht, haben Sie noch eine Idee woran es liegen könnte?

Könnte es an der statischen Funktion liegen?

Fehlermeldung:

Typed variable declaration : Attempt to resolve method: makeIt() on undefined variable or class name: de.test.internet.testA.utils.TestUtils at line 1

Auszug module.xml:

...

<public>

            <name>TestUtils</name>

            <class>de.test.internet.testA.utils.TestUtils</class>

        </public>

        <web-app>

...

Auszug Script:

boolean ret = de.test.internet.testA.utils.TestUtils.makeIt("test123");

Auszug Klasse:

public class TestUtils

{

     public static boolean makeIt(String abc)

     {

          return true;

     }

}

Viele Grüße und Danke vorab

Martin Dirlewanger

0 Kudos
gockel
Crownpeak employee
Crownpeak employee

Re: Script über einen Schedulerauftrag starten

Sieht mir beim spontanen Blick, so aus, als würde die Klasse TestUtils auch nicht das Executable Interface implementieren.

siehe Re: Script über einen Schedulerauftrag starten

In ihrem Fall gibt es doch auch keinen Skriptcode mehr ?!? In dem Auftragsskript dürfte doch nur noch der Executable-class Aufruf stehen.

#!executable-class

TestUtils

0 Kudos
Martin_Dirlewan
Returning Observer

Re: Script über einen Schedulerauftrag starten

Hallo Herr Gockel,

ich glaube jetzt habe ich Sie erst komplett verstanden, d.h. es ist nur möglich eine executable-class auszuführen und nicht eine statische Funktion einer Klasse die Rückgaben und Parameter besitzt?

Viele Grüße

Martin Dirlewanger

0 Kudos
Peter_Jodeleit
Crownpeak employee
Crownpeak employee

Re: Script über einen Schedulerauftrag starten

[Es ist nicht möglich] eine statische Funktion einer Klasse die Rückgaben und Parameter besitzt?

Doch, das geht. Aber über Beanshell sind nur Klassen erreichbar, die im scope "global" liegen. Das erreicht man z.B. über Klassen, die in einem "libraray module" liegen. Allerdings können sich so verschiedene Module in die Quere kommen. Um das zu vermeiden gibt es den von Herrn Gockel beschriebenen Weg ("executable class").

Peter
Martin_Dirlewan
Returning Observer

Re: Script über einen Schedulerauftrag starten

Hallo Herr Jodeleit,

hallo Herr Gockel,

vielen Dank für Ihre Hilfe funktioniert nun.

Viele Grüße

Martin Dirlewanger

0 Kudos