Job Scheduler Erste Seite – Konfiguration in XML |
<web_servicedebug |
= "yes|no"
|
|
forward_xslt_stylesheet |
= "path"
|
Zur Weiterleitung am Ende des Auftrags bzw. der Task |
job_chain |
= "job_chain"
|
Jobkette, die Web-Service-Operationen ausführt |
name |
= "name"
|
Name des Dienstes im Scheduler |
request_xslt_stylesheet |
= "path"
|
Transformiert die Anforderung in ein Scheduler-Kommando |
response_xslt_stylesheet |
= "path"
|
Transformiert die Antwort des Kommandos in die Antwort des Web-Dienstes |
timeout |
= "seconds"
|
Frist |
url_path |
= "url_path"
|
URL-Pfad, unter dem der Web-Dienst ansprechbar ist |
>
<params ...> |
Parameter zur freien Verwendung |
</web_service>
Web-Dienste lassen sich einrichten, um Aufträge oder Tasks zu erzeugen. Die angenommene Anforderung wird sofort beantwortet. Das Ergebnis des Auftrags oder der Task kann zu einem anderen Web-Dienst weitergeleitet werden.
Der TCP-Port des HTTP-Servers wird mit <config tcp_port="…"> festgelegt.
Zwei Arten von Web-Services werden unterschieden:
job_chain request_xslt_stylesheet <web_service name = "my_web_service" url_path = "/web_service" job_chain = "web_service" timeout = "900" />
Ein HTTP-POST auf den URL-Pfad des Web-Dienstes lässt den Scheduler einen Auftrag erzeugen und ihn in die angegebene Jobkette einreihen. Die Jobs haben Zugriff auf die HTTP-Daten über Order.web_service_operation. Die HTTP-Anfrage wird mit Web_service_response.send() beantwortet.
<web_service name = "my_web_service" url_path = "/web_service" request_xslt_stylesheet = "$SCHEDULER_DIR/web_service_request.xsl" response_xslt_stylesheet = "$SCHEDULER_DIR/web_service_response.xsl" forward_xslt_stylesheet = "$SCHEDULER_DIR/web_service_forward.xsl" />
Ein HTTP-POST auf den URL-Pfad des Web-Dienstes löst folgende Schritte aus.
<service_request>. <service_request>
<web_service name="service_name" url_path="url_path"/>
<content>…xmldata…</content>
</service_request> <service_request> wird mit dem Stylesheet request_xslt_stylesheet in ein XML-Kommando transformiert, in der Regel <add_order> oder <start_job>. <spooler><answer>, die auch eine Fehlermeldung <ERROR> enthalten kann) wird mit dem response_xslt_stylesheet zu einem <service_response> transformiert. Der Scheduler liefert den Inhalt von <content> über die offene HTTP-Verbindung zurück. <service_response>
<content>…xmldata…</content>
</service_response> request_xslt_stylesheet sofort ein <service_response> liefern. Wenn mit POST kein XML-Dokument übergeben worden ist, führt das zum HTTP-Fehlercode "404 Bad Request".
Ein Fehler in der Transformation führt zum HTTP-Fehlercode "500 Internal Server Error".
Aufträge und Tasks können einem Web-Dienst zugeordnet sein. Die Kommandos <add_order> und <start_job> erhalten dazu das neue Attribut web_service="service_name".
Solche Aufträge und Tasks werden, wenn sie enden und dem Web-Dienst ein forward_xslt_stylesheet zugeordnet ist, mit diesem als <order> bzw. <task> übergeben:
<order service="service_name" last_job="job_name" …>
<payload>
<params>
…
</params>
</payload>
<log last_error="…" last_warning="…"/>
…
</order> bzw.
<task job="…" …>
<log last_error="…" last_warning="…"/>
…
</task> Ergebnis der Transformation ist ein <service_request>:
<service_request url="url">
<content>…data…</content>
</service_request> Der Scheduler packt das <service_request> in die Payload eines neuen Auftrags und übergibt diesen der vordefinierten Jobkette scheduler_service_forwarding.
Der einzige Job der Jobkette, scheduler_service_forwarder, baut mit dem URL eine HTTP-Verbindung auf, überträgt mit POST die Daten, wartet die Antwort ab und protokolliert sie.
Eigenschaften des Jobs können in der Konfigurationsdatei eingestellt werden, wie wenn der Job mit <base> bekannt gemacht worden wäre. Ein Beispiel:
<job name="scheduler_service_forwarder">
<delay_order_after_setback setback_count="1" delay="00:01"/>
<delay_order_after_setback setback_count="2" delay="01:00"/>
<delay_order_after_setback setback_count="3" delay="24:00"/>
<run_time>
<period begin="07:00" end="17:00"/>
</run_time>
</job> Implementiert ist der Job in Java (siehe auch <web_service forward_xslt_stylesheet="…">).
<base>
Ergänzt ein Element
<web_service>
an der entsprechenden Stelle aus der Basiskonfiguration. In
<web_service>
angegebene Attribute überschreiben die aus der Basiskonfiguration.
– HTTP-Server |
name="name" Name des Dienstes im Scheduler
url_path="url_path" URL-Pfad, unter dem der Web-Dienst ansprechbar ist
Er soll mit einem Schrägstrich beginnen.
Umgebungsvariablen (z.B. $HOME) werden ersetzt (siehe hier).
job_chain="job_chain" Jobkette, die Web-Service-Operationen ausführt
Eine Web-Service-Anforderung erzeugt einen Auftrag, der in diese Jobkette eingereiht wird. Die Nutzdaten der Anforderung stehen in spooler_task.order.web_service_operation.request.binary_content.
Nicht zusammen mit den Attributen request_xslt_stylesheet und response_xslt_stylesheet verwendbar.
Für den Zugriff auf die Web-Anforderung siehe Order.web_service_operation.
timeout="seconds" Frist
Wenn innerhalb der Frist der Auftrag nicht dem ersten Job zur Ausführung übergeben wird, lehnt der Scheduler die HTTP-Anforderung mit "504 Gateway Timeout" ab und zieht den Auftrag mit der Meldung zurück.
request_xslt_stylesheet="path" Transformiert die Anforderung in ein Scheduler-Kommando
Pfad des XSLT-Stylesheets, das das mit HTTP-POST übergebene XML-Dokument in ein Scheduler-Kommando wandelt.
Nicht zusammen mit dem Attribut job_chain verwendbar.
Umgebungsvariablen (z.B. $HOME) werden ersetzt (siehe hier).
response_xslt_stylesheet="path" Transformiert die Antwort des Kommandos in die Antwort des Web-Dienstes
Pfad des XSLT-Stylesheets, das das XML-Ergebnis des Scheduler-Kommandos in ein XML-Dokument wandelt, mit der der Scheduler die Web-Dienst-Anfrage beantwortet.
Nicht zusammen mit dem Attribut job_chain verwendbar.
Umgebungsvariablen (z.B. $HOME) werden ersetzt (siehe hier).
forward_xslt_stylesheet="path" Zur Weiterleitung am Ende des Auftrags bzw. der Task
Wenn ein mit <add_order web_service="…"> gestarteter Auftrag oder eine mit <start_job web_service="…"> gestartete Task endet und ein forward_xslt_stylesheet angegeben ist, dann wird der Auftrag bzw. die Task mit dem Stylesheet zu einem <service_request> transformiert, das den Aufruf eines anderen Web-Dienstes auslöst.
Nicht zusammen mit dem Attribut job_chain verwendbar.
Benötigt Java und das Klassen-Archiv xercesImpl.jar im CLASS_PATH (s. <config java_class_path="…/xercesImpl.jar">).
Umgebungsvariablen (z.B. $HOME) werden ersetzt (siehe hier).
debug="yes|no" (Initialwert: no)
Nur, wenn request_xslt_stylesheet angegeben ist:
debug="yes" lässt den Scheduler die intern erzeugten XML-Dokumente in Dateien im mit -log-dir festgelegten Verzeichnis ablegen:
service_name.transaction_number.raw_request.txt | Der mit HTTP-POST übergebene Text |
service_name.transaction_number.service_request.xml | Das daraus erstellte <service_request>
|
service_name.transaction_number.command.xml | Das mit request_xslt_stylesheet erstellte Kommando |
service_name.transaction_number.service_response.xml | Die mit response_xslt_stylesheet transformierte Antwort des Web-Dienstes |
service_name.forward.xml | Das mit forward_xslt_stylesheet erstellte <service_request> (ohne Transaktionsnummer, die ist hier nicht bekannt) |
Der Scheduler räumt die Dateien nicht ab.
– Parameter zur freien Verwendung |
Die Parameter können mit Web_service.params ausgelesen werden.
Im XSLT-Stylesheet können die Parameter mit <xsl:param name="name"/> deklariert und mit $name abgerufen werden. Sie werden als Strings übergeben. Parameter, die Apostroph und Anführungszeichen zugleich enthalten, lassen sich nicht übergeben und werden mit Warnung abgewiesen.
<web_service … request_xslt_stylesheet="…/web_service_request.xsl" …>
<params>
<param name="job_chain" value="my_job_chain"/>
<params>
</web_service> Das Stylesheet …/web_service_request.xsl benutzt den Parameter $job_chain: <xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:param name="job_chain"/>
<xsl:template match="/service_request">
<xsl:element name="add_order">
<xsl:attribute name="job_chain"><xsl:value-of select="$job_chain"/></xsl:attribute>
<xsl:attribute name="web_service"><xsl:value-of select="web_service/@name"/></xsl:attribute>
<params>…</params>
</xsl:element>
</xsl:template>
</xsl:stylesheet> Zuletzt geändert von Joacim Zschimmer, 2007-02-19 |