[toc]
第十七章 开发Productions - ObjectScript Productions - 对业务服务、流程和操作进行编程
本页讨论了在为生产开发业务服务、流程和操作时的常见编程任务和主题。
介绍
当创建业务宿主类或适配器类时,通常会实现回调方法、根据需要定义其他方法以及添加或删除设置。
在业务主机或适配器中,方法通常执行以下部分或全部任务:
- 获取或设置业务主机或适配器的属性值。
- 定义回调方法。回调方法是一种默认情况下不执行任何操作的继承方法;任务是重写并实现此方法。
- 执行业务宿主或适配器继承的辅助方法。
Helper
方法是一个非正式术语,指的是一种供其他方法使用的方法。
在业务操作和业务流程中,方法通常会调用继承的方法来将消息发送到生产中的其他业务主机。
-
生成日志、警报或跟踪通知以响应可能出现的各种情况。
IRIS
使用以下术语:- 日志条目旨在记录诸如外部物理问题(例如,网络连接不良)之类的项目。
IRIS
自动将这些写入事件日志。-
警报旨在通过定义并添加到产品中的警报处理器来提醒用户。
-
跟踪项用于调试和诊断目的。例如,可以使用它们在部署产品之前定位程序错误。 IRIS 可以将这些写入事件日志、终端或两者。
并非所有类型的错误或活动都必须生成这些通知。由开发人员选择记录哪些事件以及如何记录它们。请注意,事件日志不应记录程序错误;这些应该在产品发布之前解决。
关键原则
了解最适合制作的编程实践很重要。业务主机在单独的进程中执行,这意味着应该确保:
- 如果一个业务主机启动一个事务,同一个业务主机应该完成它或回滚它。
更具体地说,如果业务主机代码启动一个事务,例如通过 ObjectScript
TSTART
或带有 %COMMITMODE = EXPLICIT
的 SQL
语句,则同一业务主机需要代码来完成或回滚该事务。嵌套事务时,请注意进程将持有所有锁,直到事务的所有部分都提交或回滚。
- 如果一个业务主机分配了任何系统资源(如取锁或打开设备),同一个业务主机应该释放它们。
- 任何要在业务主机之间共享的信息都应该包含在它们之间发送的消息中(而不是通过公共变量)。
重要提示:不遵循这些准则可能会导致作品无法运行。
类似的考虑适用于业务规则和数据转换。
此外,必须经常处理从 IRIS
方法收到的错误代码。 IRIS
互操作性开发框架旨在让自定义代码在错误代码方面尽可能简单和线性。例如:
- 业务服务的
OnProcessInput()
方法和业务操作的OnMessage()
和其他用户编写的MessageMap
方法由生产框架包装,因此无需在代码中包含任何额外的错误捕获。 - 可由自定义业务操作代码使用的适配器方法保证永远不会陷入困境,就像可用于自定义代码的框架方法一样,例如
SendAlert()
和SendRequestSync()
。此外,当发生错误情况时,适配器方法会自动为 Retry 和 Suspend 设置合适的值。
考虑到生产框架中内置的这些预防措施, 建议在正常情况下,自定义代码应该简单地检查每次调用的错误代码,如果是错误值,则使用该值退出。以下是这种编码风格的示例:
Class Test.FTP.FileSaveOperation Extends Ens.BusinessOperation
{
Parameter ADAPTER = "EnsLib.File.OutboundAdapter";
Method OnMessage(pRequest As Test.FTP.TransferRequest,
Output pResponse As Ens.Response) As %Status
{
Set pResponse=$$$NULLOREF
Set tFilename=..Adapter.CreateTimestamp(pRequest.Filename,"%f_%Q")
; file with timestamp should not already exist
$$$ASSERT('..Adapter.Exists(tFilename))
Set tSC=..Adapter.PutStream(tFilename,pRequest.StreamIn) Quit:$$$ISERR(tSC) tSC
Quit $$$OK
}
}
更复杂的场景有时很有用,例如使用 SQL
适配器在业务操作中执行多个 SQL 语句,然后在其中任何一个失败时调用回滚,然后返回。但是,前面示例中的编码风格是简单情况下的最佳实践。
网友评论