用户定义的解析器生命周期

本主题指导您通过用户定义的消息流解析器的生命周期中的各个阶段。各阶段如下所示:

本主题将帮助您理解在运行用户定义的解析器时,WebSphere Message Broker 组件之间发生的交互作用。它根据在每个阶段期间后之后发生或引起的事件以及所调用的 API,说明每个阶段。理解本主题中的概念将使您更有效地设计和开发解析器。

注册

用户定义解析器生命周期的第一阶段是注册阶段。注册阶段的目的是用代理注册用户定义的解析器。此阶段由执行组进程的起始阶段的初始化阶段触发。

实例化

在解析器生命周期的实例化阶段期间创建了解析器。当接收到输入消息时,或当在 compute 节点中构建了输出消息时,标识相关的解析器,并从消息头采用解 析器需求(例如,MQMD)。代理启动、装入可装入的实施库(LIL)和解析器工厂。执行组进程创建解析器的实例,并且代理对 cpiCreateContext 作出调用以允许解析器对象获取相应的消息部分。

在调用此函数前,代理已经将名元素作为有效的根元素为解析器进行了创建。然而,未命名此元素。解析器应该在 cpiSetElementName 函数中命名此元素。

然后代理对 cpiParseBuffer 进行了调用。此阶段 cpiParseBuffer 的目的是执行任何必要的初始化,并返回解析器所占用的消息内容长度。解析器访问要解析多少消息数据,并声明相 应的字节数。

无论何时创建用户定义的解析器对象的实例,还由消息代理调用上下文创建实现函数 cpiCreateContext。这允许解析器分配与解析器关联的实例数据。还需要删除解析器对象上下文的 cpiDeleteContext 函数。

处理

处理阶段的目的是在解释解析器的消息对象内处理、改变和引用元素。发生任何消息处理活动时消息流处理阶段开始,例如,导航,需要访问在与消息相关的代理的内 部模型演示中不存在的消息内的元素。

在消息流处理阶段期间,相应调用解析器来试图浏览消息树。当调用 cpiParseBuffer 时,解析器检查已分配的缓冲区,并创建任何必要的消息元素。

然后解析器可以使用以下任何或全部解析器实施函数浏览消息元素:
  • cpiParseFirstChild
  • cpiParseLastChild
  • cpiParsePreviousSibling
  • cpiParseNextSibling

当完成导航的任何格式时,将这些功能(例如,指定消息字段的过滤器表达式)调用到语法元素树的一部分中,该树逻辑代表受用户 定义的解析器支持的消息格式的数据。当代理内的操作需要构建或扩展语法元素树时发生此操作。

确定如何能最好的浏览语法元素树时,您应该注意以下要点:
  • 语法元素对其父代、兄弟和第一个和最后一个子代具有 5 个指针。这表示您可以使用导航的限定集
  • 同样的内部类用于执行所有这些导航
  • 解析器不控制导航。ESQL 或用户定义的节点决定浏览的方向,以及调用浏览解析器实施函数的顺序。用户定义的解析器对此没有控制权,并且需要对选定的导航方案正确做出响应。例如,这可能表示从右到左解析以及从左到右 解析。
  • 编写用户定义的解析器时,希望您将实际的解析器放在 parseNextItem 函数中。此函数应该在设置名称、值并适当完成标志时一次一个元素来构建语法元素树。如何实施此函数,取决于要解析的位流的性质。在此演示与 WebSphere Message Broker 一起提供的样本解析器。

当解析器完成解析语法元素树相关的部分时,调用 cpiWriteBuffer。此函数将其语法元素树的一部分附加到与解析器对象关联的消息缓冲区的位流中。这创建输出消息。

消除

消除阶段是用户定义的解析器生命周期的最后阶段。当解析器已经将语法元素树的一部分写到位流并创建输出消息时,需要释放由代理为解析器使用所创建的系统资源。

mqsistop 命令用于停止执行过程时,消除阶段开始。

声明 | 商标 | 下载 | 书库 | 支持 | 反馈
Copyright IBM Corporation 1999, 2006 最后一次更新时间:2006/08/14
as01413_