Lade...
 

CX_WEB_SERVICE_MANAGER::LaunchDedicatedClassiX

CX_WEB_SERVICE_MANAGER::LaunchDedicatedClassiX

4.1.0
204939

Beschreibung:

Diese Methode weist den verbunden MorphIT-Server an, auf der vorgegebenen Launcher-Instanz einen neuen ClassiX-Prozess mit den angegebenen Parmetern zu starten. Damit das klappt, müssen folgende Bedingungen erfüllt sein:

  1. Das ClassiX ist mit dem Server verbunden (HasMorphITConnection = TRUE)
  2. Unter der angegebenen IP/Hostnamen läuft ein MorphIT-Launcher, der mit diesem MorphIT-Server verbunden ist
  3. Der MorphIT-Launcher hat noch genug freie Kapazitäten, um eine Instanz zu starten
  4. Es wird ein gültiger Start-Nonce übergeben, der über RequestMorphITBinding vom Server geliefert wurde.

Sollte der Start fehlschlagen, schlägt dieser Aufruf mit einer entsprechenden Fehlermeldung fehl. Ansonsten wird die Prozess-ID des gestarteten Prozesses zurückgegeben. Da der Prozess über CMD /C gestartet wird, entspricht die Prozess-ID der Prozess-ID des cmd-Prozesses und nicht der eigentlichen ClassiX-Instanz. Der Wert dient also lediglich als Bestätigung, dass ein Prozess auf dem Launcher gestartet wurde.

Die Startkonfiguration ist ein optionales CX_JSON_OBJECT mit zwei Feldern:

  • env - Ein Objekt, welches die zusätzlich zu setzenden Umgebungsvariablen definiert. {name:wert, name2:wert2, ...}
  • cwd - Ein String, der das Arbeitsverzeichnis festlegt mit welchem der Befehl gestartet werden soll. (Default: ws.launcher.launch.cwd - aus der config.js)

Der Startbefehl ist ein String, der an CMD /C "..." durchgereicht wird.

Der Hostname/IP ist ein String, unter dem sich ein Launcher beim MorphIT-Server registriert haben muss. IP-Adressen sind relativ zum MorphIT-Server, sodass 127.0.0.1 immer den Launcher bezeichnet, der auf der gleichen Maschine läuft, wie der MorphIT-Server unabhängig davon, wo der ClassiX-Prozess läuft, der diese Methode aufruft. Deswegen gibt es das Schlüsselwort @self mit dem sich der Prozess auf die Maschine beziehen kann, auf der er selbst gestartet ist.  Dadurch muss der startende Prozess die eigene IP-Adresse nicht kennen, um auf der gleichen Maschine einen Prozess zu starten.

 

Code-Beispiel:

Als Webservice-Instanz ein dediziertes ClassiX über den Launcher starten.

LAUNCH_INSTANCE_POST: { LocalVar(endpoint, response) GetManager(WEB_SERVICE) CallWeak(RequestMorphITBinding) -> endpoint endpoint ifnot { //TODO pass error back to the user } launcherHostName "CX_MORPHIT_NONCE" SystemObject Call(GetEnvironment) startCommand NULL GetManager(WEB_SERVICE) CallWeak(LaunchDedicatedClassiX) ifnot { //TODO pass error message back to the user } CreateTansObject(CX_JSON_OBJECT) -> response "dynamic" response Put(type) endpoint response Put(endpoint) response ReturnStack }

 

 

Stack
Stack Position Objekttyp Kurzbeschreibung
Stack(In) Top CX_WEB_SERIVCE_MANAGER Der Webservice-Manager
  Top-1 CX_JSON_OBJECT | NULL Startkonfiguration
  Top-2 STRING Startbefehl
  Top-3 STRING Start-Nonce-Wert
  Top-4 STRING Hostname/IP des Launchers
Stack(Out) Top INTEGER Prozess-ID des gestarteten Prozesses
Funktionsaufruf: Call(LaunchDedicatedClassiX)