目录
一、ABAP语言中的守护进程是什么?
二、ABAP 守护进程框架 (ADF)
三、ABAP 守护进程类
四、创建一个简单的ABAP守护进程
步骤1:创建一个新的ABAP Daemon类
步骤2:实现ON_ACCEPT方法
第三步:实现ON_START方法
第四步:实现ON_TIMEOUT方法
第5步:实现ON_MESSAGE方法
第6步:实现静态方法START
第7步:实现静态方法SEND并运行守护进程
第 8 步:停止 ABAP 守护进程
五、守护进程用例。
六、结论
一、ABAP语言中的守护进程是什么?
守护程序是一种实用程序,它自身连续运行,无需交互式用户在后台多任务操作系统上的控制,以监视和处理某些子系统或对事件立即做出反应。守护进程在预定义的时间或响应某些事件执行显式操作。
ABAP 守护进程框架 (ADF-ABAP Daemon Framework) 提供的 ABAP 守护进程功能与 Linux 或 Windows 中的对应功能更加相似。它们通过在具有无限生命周期的会话中运行来以可靠的方式处理事件。ABAP 程序可以通过使用 ABAP 消息传递通道和消息类型推送通道协议 (PCP) 向守护程序发送消息来与守护程序进行通信,PCP 是一种类似于简单 HTTP 消息的通信格式。
守护进程对错误的应对非常可靠,即守护进程会话在遇到错误(E/A/X 消息)后不会终止。但是,每次运行时错误或类型 E、A 或 X 的消息导致程序终止时,都会自动再次创建 ABAP 守护程序。当其 AS 实例关闭时,可以通过创建包含与前面的守护程序相同的上下文信息的新守护程序来将守护程序移动到另一个 AS 实例。这使得新的守护进程能够完成相同的工作。
二、ABAP 守护进程框架 (ADF)
SAP Netweaver 7.52 将 ABAP Daemon Framework 或简称 ADF 作为一项新功能。ADF 是一个 API,允许您在 ABAP 中创建和管理守护程序。ABAP 守护进程是 ABAP 守护进程类的实例,位于应用程序服务器的特殊 ABAP 守护进程会话中。ABAP程序本身使用ABAP守护进程管理器来访问ABAP守护进程。
如前所述,ABAP 守护进程的处理发生在后台并使用事件进行控制。守护程序或ABAP运行时框架的用户可以引发ABAP守护程序事件,守护程序使用预定义的接口方法对此做出反应。守护进程必须始终准备好对入站事件做出反应,这是通过以非阻塞模式运行 ABAP 守护进程处理来确保的,以防止 ABAP 守护进程处理中出现运行时错误 DAEMON_ILLEGAL_STATEMENT 以及随后重新启动守护进程。
有关ADF实现和 ABAP 守护进程类的详细信息扩展可以在 ABAP 关键字文档和本博客文章系列中找到。在这里我想更多地关注如何通过实现守护进程类来创建守护进程的过程。
三、ABAP 守护进程类
ABAP守护进程类是一个全局类,继承自抽象系统类CL_ABAP_DAEMON_EXT_BASE。ABAP 守护程序类继承了接口 IF_ABAP_DAEMON_EXTENSION 的方法,如果在 ABAP 守护程序类中实现了这些事件,则ABAP 守护程序类将使用这些方法对ABAP 守护程序事件做出反应。这些方法的详细解释可以在文档的相关部分找到。
ABAP 守护程序类可以包含更多辅助方法,并且可以在其方法中调用任意数量的其他过程。还可以实现接口 IF_ABAP_TIMER_HANDLER 将 ABAP 守护程序类转换为 ABAP 计时器处理程序,从而对 ABAP 计时器事件做出反应。例如,等待某些事件或在一段时间后停止守护进程。当从 ABAP 守护进程类实例化 ABAP 守护进程时,ABAP 守护进程框架将创建 ABAP 守护进程会话。
四、创建一个简单的ABAP守护进程
现在让我们创建 ABAP 守护进程并使用 PCP 消息与它们交互。如前所述,ABAP 守护进程是扩展基类 CL_ABAP_DAEMON_EXT_BASE 的 ABAP 守护进程类的实例。因此,首先我们需要按照本教程定义类。
步骤1:创建一个新的ABAP Daemon类
第一步,创建一个 ABAP 类 ZCL_ABAP_SIMPLE_DAEMON 并将 CL_ABAP_DAEMON_EXT_BASE 设置为超类。从这个超类中,我们的守护进程将从 IF_ABAP_DAE