User-defined extensions execution model
The execution model is the system used to start message flows through a series of nodes.
- An input message sent to a message flow is processed only by the thread that received it.
- A single instance of a user-defined extension might be invoked on several threads concurrently.
- The message flow execution environment is conceptually like procedural programming. Nodes that you insert into a message flow are like subroutines called using a function call interface. However, rather than a call-return interface, in which parameters are passed in the form of input message data, the execution model is referred to as a propagation-and-return model.
As an example, consider a message flow in which you use both user-defined nodes and parsers. You use a user-defined node to process messages, and a user-defined parser to parse messages; both the node and parser contain implementation functions. The integration node calls the implementation functions, or callback functions, when certain events occur:
- When an input message is received by the message flow and is propagated
to the user-defined node:
- For C nodes, the integration node calls the cniEvaluate function for the user-defined node. See cniEvaluate.
- For Java™ nodes, the integration node calls the evaluate method that is implemented by the user-defined node.
- If the user-defined node wants to query the message to decide what to do with it, the node calls a C utility function or a Java method, as appropriate for the language in which the node is written.
The integration node invokes the user-defined parser on one of its implementation functions, for example cpiParseFirstChild. This function instructs the parser to build the parse tree. The parser builds the tree by invoking utility functions that create elements in the parse tree, for example cpiCreateElement. The parser can be called many times by the integration node.