El modelo de ejecución es el sistema que se utiliza
para iniciar flujos de mensajes a través de una serie de nodos.
Cuando se inicializa un grupo de ejecución, los archivos de biblioteca
de implementación cargable (LIL)
y los archivos de archivador de plug-in (PAR) apropiados
quedan disponibles en el entorno de ejecución. El proceso de ejecución del
grupo de ejecución se inicia y crea una hebra de configuración dedicada. Usted
es responsable de asegurar que un nodo definido por el usuario esté
preparado para operaciones de varias hebras. Si un nodo actualiza una
variable en varias hebras, debe estar en funcionamiento el bloqueo
adecuado. No comprometa este modelo de hebras en su implementación de nodos definidos
por el usuario. Observe el ejemplo siguiente:
- Un mensaje de entrada enviado a un flujo de mensajes sólo lo procesa
la hebra que lo recibe.
- Una sola instancia de una extensión definida por el usuario puede ser
invocada en varias hebras simultáneamente.
- El entorno de ejecución del flujo de mensajes es parecido, conceptualmente, a la programación de procedimientos. Los nodos que inserte en un flujo de mensajes son como subrutinas que se invocan utilizando una interfaz de llamada de función. No obstante, en
lugar de una interfaz de tipo "llamada y retorno", en la que se pasan los
parámetros con el formato de datos de mensaje de entrada, se hace referencia al modelo de
ejecución como un modelo de "propagación y retorno".
Tomemos como ejemplo un flujo de mensajes en el que utilice nodos y
analizadores definidos por el usuario. Utiliza un nodo definido por el usuario para procesar los mensajes y una
analizador definido por el usuario para analizarlos; tanto el nodo como el
analizador contienen funciones de implementación. Cuando se producen determinados sucesos, el intermediario llama a las
funciones de implementación, o a las funciones de devolución de llamada:
- Cuando el flujo de mensajes recibe un mensaje de entrada y se propaga
al nodo definido por el usuario:
- Para nodos en C, el intermediario llama a la función
cniEvaluate para el nodo
definido por el usuario. Consulte el apartado cniEvaluate.
- Para nodos
Java™,
el intermediario llama al método evaluate
implementado por el nodo definido por el usuario.
- Si el nodo definido por el usuario desea consultar el mensaje para decidir qué debe
realizar con él, el nodo llama a una función de programa de utilidad C o un
método
Java,
según corresponda al lenguaje en el que se ha escrito el nodo.
A continuación, el intermediario invoca al analizador definido por el
usuario para una de sus funciones de implementación, por ejemplo cpiParseFirstChild. Esta
función indica al analizador que cree el árbol de análisis. El analizador crea el árbol invocando las funciones
de utilidad que crean elementos en el árbol de análisis, por
ejemplo cpiCreateElement.
El intermediario puede llamar
muchas veces al analizador.