文章目录
- 第二十四章 开发Productions - ObjectScript Productions - 定义业务服务
- 介绍
- 关键原则
- 定义业务服务类
- 实施 `OnProcessInput()` 方法
第二十四章 开发Productions - ObjectScript Productions - 定义业务服务
本页介绍如何定义业务服务类。
提示: IRIS®
提供使用特定入站适配器的专用业务服务类,其中之一可能适合需要。如果是这样,则不需要编程。有关部分列表,请参阅 Introducing Interoperability Productions
中的连接选项。
介绍
业务服务负责接受来自外部应用程序的请求到 IRIS
。下图显示了它是如何工作的:
请注意,此图仅显示数据的输入流,而不是可选响应。
业务服务负责以下活动:
- 等待特定的外部事件(例如来自应用程序的通知、收到
TCP
消息等)。 - 读取、解析和验证伴随此类事件的数据,
- 如果需要,返回对外部应用程序的确认,表明已收到事件。
- 创建请求消息的实例并将其转发到适当的业务流程或业务操作以进行处理。
业务服务的目的通常是接收数据输入。在大多数情况下,业务服务有一个与之关联的入站适配器。但是,在某些情况下不需要适配器,因为应用程序能够将请求消息发送到服务中,或者因为业务服务已被编写为处理特定类型的外部调用,例如来自复合应用程序的调用。这种类型的业务服务称为无适配器业务服务。
当业务服务具有入站适配器时,它处于数据拉取(而不是推送)模式。在这种模式下,业务服务会定期轮询适配器,看它是否有数据。同时,如果适配器随时遇到输入数据,它会调用业务服务来处理输入。
当业务服务没有适配器时,它不会拉取数据。相反,客户端应用程序调用业务服务并告诉它处理输入(这是一种数据推送模式)。
关键原则
首先,务必阅读 Programming in InterSystems IRIS
。
在业务服务中,可以访问关联适配器的属性和方法,这些适配器作为业务服务的 Adapter 属性提供。这意味着可以更改适配器的默认行为;这样做可能合适也可能不合适。记住封装原则很有用。封装的思想是适配器类应该负责技术特定的逻辑,而业务服务类应该负责生产特定的逻辑。
如果发现有必要在业务服务类中大量或频繁地改变适配器类的行为,那么创建适配器类的自定义子类可能更合适。请参阅不太常见的任务。
这个原则也适用于商业运作。
定义业务服务类
要创建一个业务服务类,定义一个类如下:
- 类必须在(或子类)中扩展
Ens.BusinessService
。 - 在类中,
ADAPTER
参数必须等于此业务服务要使用的适配器类的名称。
提示:如果只是希望业务服务定期唤醒和运行而不关心 IRIS
外部的事件,请使用适配器类 Ens.InboundAdapter
。
- 类必须实现
OnProcessInput()
方法,如实现OnProcessInput()
方法中所述。 - 类可以添加或删除设置。请参阅添加和删除设置。
- 类可以实现任何或所有启动和拆卸方法。请参阅覆盖启动和停止行为。
- 类可以包含完成自身内部工作的方法。
有关业务服务类的示例,请参阅适配器指南。
实施 OnProcessInput()
方法
在业务服务类中, OnProcessInput()
方法可以具有以下通用签名:
Method OnProcessInput(pInput As %RegisteredObject, pOutput As %RegisteredObject) As %Status
这里的pInput
是适配器要发送给这个业务服务的输入对象,pOutput
是输出对象。
首先查看选择的适配器类。 建议编辑 OnProcessInput()
方法签名以使用适配器所需的特定输入参数。
OnProcessInput()
方法应该执行以下部分或全部操作:
- 可选地设置业务服务类的属性(在任何适当的时间)。最受关注的业务服务属性是
%WaitForNextCallInterval
。它的值控制IRIS
调用适配器的OnTask()
方法的频率。
有关其他属性,请参阅 Ens.BusinessService
的类参考。
- 如有必要,验证输入对象。
- 检查输入对象并决定如何使用它。
- 创建请求消息类的实例,这将是业务服务发送的消息。
- 对于请求消息,使用输入对象中的值适当地设置其属性。
- 确定要将请求消息发送到哪里。当发送消息时,将需要在生产中使用业务主机的配置名称。
- 将请求消息发送到生产(业务流程或业务操作)中的目的地。请参阅下一节。
- 确保设置输出参数 (
pOutput
)。通常,将其设置为等于您收到的响应消息。此步骤是必需的。 - 返回适当的状态。此步骤是必需的。