Ansicht
Dokumentation

ABENABAP_DAEMON_ABEXA - ABAP DAEMON ABEXA

ABENABAP_DAEMON_ABEXA - ABAP DAEMON ABEXA

RFUMSV00 - Advance Return for Tax on Sales/Purchases   Vendor Master (General Section)  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

- ABAP Daemon erzeugen und verwenden

Das Beispiel demonstriert einen ABAP-Daemon.

Quelltext

Ausführen

Beschreibung

Das Beispiel demonstriert die wesentlichen Eigenschaften eines ABAP-Daemons. Das Beispiel besteht aus obigem Programm und zwei Klassen.

Programm DEMO_ABAP_DAEMON

Das Programm erlaubt es, interaktiv eine ABAP-Daemon zu starten und danach verschiedene Aktionen mit dem Daemon auszuführen. Die Ankreuzfelder haben folgende Bedeutung:

  • START_DAEMON
Versucht einen ABAP-Daemon zu starten. Nur ein ABAP-Daemon der verwendeten ABAP-Daemon-Klasse darf existieren. Beim Start wird eine Versionsnummer im PCP-Format übergeben. Wenn schon ein ABAP-Daemon vorhanden ist, wird dieser verwendet.
  • GET_INFORMATION
Besorgt Informationen zum ABAP-Daemon und zeigt diese an.
  • SEND_MESSAGE
Sendet eine Textnachricht im PCP-Format an den ABAP-Daemon.
  • TRIGGER_AMC
Sendet eine PCP-Nachricht an den ABAP-Daemon, die bewirkt, dass dieser eine AMC-Nachricht sendet. Das Programm wartet, bis die Nachricht bei einem eigenen AMC-Empfänger eingegangen ist.
  • TRIGGER_EXCEPTION
Sendet eine PCP-Nachricht an den ABAP-Daemon, die dort eine Ausnahme auslöst. Die Ausnahme führt zu einem Kurzdump, der in der Transaktion ST22 zu sehen ist, und der ABAP-Daemon wird automatisch neu gestartet. Dabei wird die Versionsnummer um 1 erhöht.
  • TRIGGER_BLOCKING
Sendet eine PCP-Nachricht an den ABAP-Daemon, die dort eine im Non-Blocking-Modus verbotene Anweisung bewirkt. Dies führt zu einer Ausnahme mit Kurzdump, der in der Transaktion ST22 zu sehen ist. Danach wird der ABAP-Daemon automatisch neu gestartet. Dabei wird die Versionsnummer um 1 erhöht.
  • TRIGGER_RESTART
Sendet eine PCP-Nachricht an den ABAP-Daemon, die dort dessen Neustart auslöst. Dabei wird die Versionsnummer um 1 erhöht.
  • TRIGGER_RELOCATION
Sendet eine PCP-Nachricht an den ABAP-Daemon, die bewirkt, dass der Daemon eine neue Instanz seiner Klasse auf einer anderen erzeugt und die bisherige Instanz gelöscht wird.
  • TRIGGER_STOP
Sendet eine PCP-Nachricht an den ABAP-Daemon, die bewirkt, dass der sich selbst anhält.
  • STOP_DAEMON
Hält den Daemon an.

Das Programm erzeugt eine Ausgabe, welche die jeweiligen Aktionen im Programm und im ABAP -Daemon zeigt. Hierfür schreibt der Daemon Einträge in die Export-/Import-Tabelle DEMO_INDX_BLOB, die nach einer kurzen Wartezeit vom ABAP-Programm ausgelesen werden. Wenn das aktuelle System langsam ist, reicht die Wartezeit eventuell nicht aus, um alle Aktionen des Daemons zu sehen. Der ABAP-Daemon der aktuellen kann parallel zur Programmausführung mit der Transaktion SMDAEMON beobachtet werden.

Klasse CL_DEMO_ABAP_DAEMON_BROKER

Das Programm DEMO_ABAP_DAEMON arbeitet nicht direkt mit der Klasse CL_ABAP_DAEMON_CLIENT_MANAGER. Statt dessen sind die Zugriffe auf diese Klasse in der Klasse CL_DEMO_ABAP_DAEMON_BROKER verschalt. Der Grund ist, dass mit CL_ABAP_DAEMON_CLIENT_MANAGER nur in dem Programm auf einen ABAP-Daemon zugegriffen werden kann, in dem der Daemon gestartet wurde. Da in diesem Beispiel auch der Daemon selbst eine Instanz seiner Klasse erzeugen können soll, müssen die Zugriffe in ein Programm ausgelagert werden, auf das vom ABAP-Programm und vom ABAP-Daemon zugegriffen wird. Hierfür enthält CL_DEMO_ABAP_DAEMON_BROKER folgende Methoden:

  • CHECK_DAEMON
Die Methode stellt fest, ob es bereits einen Daemon der verwendeten ABAP-Daemon-Klasse CL_DEMO_ABAP_DAEMON gibt und speichert gegebenenfalls dessen Kennung für die weitere Verwendung ab. Nur wenn es noch keinen Daemon der Klasse CL_DEMO_ABAP_DAEMON gibt, startet das Programm DEMO_ABAP_DAEMON einen solchen. Die hier gezeigte Methode, einen ABAP-Daemon als Singleton zu erzeugen ist aber nicht wirklich sicher. In dem Zeitraum zwischen dem Starten des Daemons und bis er von der Methode GET_DAEMON_INFO zurück gegeben wird, könnten weitere Daemons der gleichen Klasse entstehen. Eine sichere Behandlung würde aber über den Umfang dieses einfachen Beispiels hinausgehen.
  • START_DAEMON
Die Methode verschalt die Methode START der Klasse CL_ABAP_DAEMON_CLIENT_MANAGER und startet einen ABAP-Daemon der ABAP-Daemon-Klasse CL_DEMO_ABAP_DAEMON. Sie soll nur im Programm DEMO_ABAP_DAEMON und in der ABAP-Daemon-Klasse verwendet werden, wofür durch Auswertung der Aufrufer gesorgt wird. Die Kennung des gestarteten Daemon wird für die weitere Verwendung abgespeichert. Wenn das Starten von der ABAP-Daemon-Klasse akzeptiert wird, ist der Rückgabewert nicht initial.
  • GET_DAEMON_INFO
Die Methode verschalt die gleichnamige Methode der Klasse CL_ABAP_DAEMON_CLIENT_MANAGER und gibt Informationen zu den ABAP-Daemons der ABAP-Daemon-Klasse CL_DEMO_ABAP_DAEMON zurück.
  • ATTACH_DAEMON
Die Methode verschalt die Methode ATTACH der Klasse CL_ABAP_DAEMON_CLIENT_MANAGER. Die zurück gegebene Referenz auf den ABAP-Daemon-Handle wird im privaten Attribut DAEMON_HANDLE abgelegt.
  • SEND_MESSAGE
Die Methode dient dem Senden von PCP-Nachrichten an den ABAP-Daemon. Hierfür wird die Methode SEND des ABAP-Daemon-Handle verwendet, auf den im privaten Attribut DAEMON_HANDLE verwiesen wird.
  • STOP_DAEMON
Die Methode verschalt die Methode STOP der Klasse CL_ABAP_DAEMON_CLIENT_MANAGER und dient dem Anhalten des ABAP-Daemons.

Die Namen des ABAP-Daemons und der ABAP-Daemon-Klasse sind als Konstanten der Klasse CL_DEMO_ABAP_DAEMON_BROKER definiert.

Klasse CL_DEMO_ABAP_DAEMON

Die Klasse CL_DEMO_ABAP_DAEMON ist Unterklasse von CL_ABAP_DAEMON_EXT_BASE und die ABAP-Daemon-Klasse dieses Beispiels. Sie implementiert die wichtigsten Methoden des Interface IF_ABAP_DAEMON_EXTENSION und weitere eigene Hilfsmethoden. Sie implementiert auch das Interface IF_ABAP_TIMER_HANDLER, um als ABAP Timer Handler für einen ABAP Timer zu wirken. Während Daemons oft niemals angehalten werden sollen, soll ein im Rahmen dieses Beispiels erzeugter Daemon nach einer Stunde automatisch gelöscht werden, wenn er nicht explizit angehalten wird.

  • IF_ABAP_DAEMON_EXTENSION~ON_ACCEPT
Die Methode überprüft vor dem eigentlichen Start eines Daemons der Klasse, ob das aufrufende Programm der Class-Pool der Klasse CL_DEMO_ABAP_DAEMON_BROKER ist. Nur dann wird der Ausgabeparameter E_SETUP_MODE so gesetzt, dass der Daemon gestartet werden kann.
  • IF_ABAP_DAEMON_EXTENSION~ON_START
Die Methode ruft direkt nach dem eigentlichen Start des Daemons die Hilfsmethode SET_CONTEXT auf, welche Kontextinformationen speichert und einen Timer startet. Als Beispiel für eine Kontextinformation dient hier die Versionsnummer, die vom Aufrufer beim Starten übergeben wurde.
  • IF_ABAP_DAEMON_EXTENSION~ON_MESSAGE
Die Methode wertet die eingehenden PCP-Nachrichten aus und führt entsprechende Aktionen direkt aus oder ruft Hilfsmethoden der ABAP-Daemon-Klasse auf.
  • IF_ABAP_DAEMON_EXTENSION~ON_ERROR
IF_ABAP_DAEMON_EXTENSION~ON_RESTART
Die Methoden rufen die Hilfsmethode SET_CONTEXT auf, um nach einem Neustart die Kontextinformationen wieder zu setzen.
  • IF_ABAP_DAEMON_EXTENSION~ON_SERVER_SHUTDOWN
Die Methode ruft beim Herunterfahren der aktuellen die Hilfsmethode RELOCATE auf, um dem Daemon auf einer anderen zu verlagern.
  • IF_ABAP_TIMER_HANDLER~ON_TIMEOUT
Die Methode hält den Daemon bei einem Timeout-Ereignis des in SET_CONTEXT gestarteten ABAP Timers an.
  • SET_CONTEXT
Die Methode setzt ein Attribut der Klasse auf das Kontextobjekt und verwendet dessen Methode SET_APPLICATION_PARAMETER um die aktuelle Versionsnummer im PCP-Format im ABAP-Daemon-Memory abzulegen. Falls SET_CONTEXT nach einem Neustart gerufen wird, wird die vorherige Versionsnummer aus dem ABAP-Daemon-Memory geholt und um 1 erhöht. Weiterhin initialisiert SET_CONTEXT einen ABAP Timer, auf den die Methode IF_ABAP_TIMER_HANDLER~ON_TIMEOUT des aktuellen Daemons reagiert.
  • SEND_AMC
Die Methode sendet eine AMC-Nachricht.
  • RELOCATE
Die Methode versucht den aktuellen Daemon auf einer anderen zu verlagern. Hierfür wird aus einer Liste der des aktuellen AS ABAP zufällig eine ausgewählt. Dieser wird als Destination für das Starten eines Daemons der aktuellen ABAP-Daemon-Klasse über CL_DEMO_ABAP_DAEMON_BROKER verwendet. Dabei werden die aktuellen Kontextinformationen aus dem ABAP-Daemon-Memory direkt als Startparameter im PCP-Format übergeben. Danach wird der aktuelle Daemon angehalten.
  • WRITE_LOG
Die Methode schreibt Protokolleinträge in einen String in der Export-/Import-Tabelle DEMO_INDX_BLOB. Sie wird von den übrigen Methoden aufgerufen, um die Aktionen des Daemons für die Ausgabe des Programms DEMO_ABAP_DAEMON zu protokollieren.

Die übrigen Methoden des Interface IF_ABAP_DAEMON_EXTENSION schreiben in diesem Beispiel nur Protokolleinträge.

Hinweis

In diesem einfachen Beispiel ist nicht gewährleistet, dass ein ABAP-Daemon der ABAP-Daemon-Klasse CL_DEMO_ABAP_DAEMON ein systemweiter Singleton ist. Durch parallele Zugriffe, die zu Neustarts führen, können ungewollt mehrere Daemons entstehen. Dies gilt insbesondere während der Verlagerung auf einen anderen. Um einen echten Singleton zu erreichen, muss erheblich mehr Aufwand getrieben werden. Siehe die Klasse CL_AD_EXT_SIMPLE_DAEMON, die vom Programm RS_ABAP_DAEMON_TEST verwendet werden kann






ROGBILLS - Synchronize billing plans   Addresses (Business Address Services)  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 14374 Date: 20240523 Time: 180114     sap01-206 ( 200 ms )