本主题涉及当您用 C 程序设计语言为 WebSphere Message Broker 开发用户定义的扩展时需要考虑的存储管理的相关问题。如果您使用 Java 程序设计语言开发用户定义扩展,则您可以使用标准 Java 存储管理方法。
所有用户定义扩展分配的内存必须由用户定义扩展释放。运行时节点的构造导致调用 cniCreateNodeContext,这允许用户定义扩展分配节点实例特定数据区以存储上下文。上下文地址返回到消息代理,且当内部方法导致用户定义扩展函数被调用时从代理被传回;这样,C 用户定义扩展可以分配和使用函数处理的正确的上下文。
消息代理将传递 C++ 对象地址到用户定义扩展。这些仅简单地被用作后继函数调用要被传回的句柄。您不应该允许 C 用户定义扩展以任何方法尝试操作或使用此指针,例如通过使用 free 函数试图释放存储。 这样的操作将导致消息代理中不可预测的行为。
无论何时已在内部构建基础节点对象,调用 cniCreateNodeContext 实施函数。 这当用使用用户定义节点的消息流定义代理时发生。注意,这与创建(或重用)线程以执行包含该节点的消息流实例的活动是不一样的,这很重要。事实上,在消息流配置期间仅调用 cniCreateNodeContext 函数一次,而不论有多少线程正在执行消息流。
类似的注意事项还适用于用户定义的解析器和相应的实施函数 cpiCreateContext。