Un nodo de proceso de mensajes se utiliza para procesar un mensaje de algún modo y un nodo de salida se utiliza para producir un mensaje como una corriente de bits.
Cuando codifica un nodo de proceso de mensajes o un nodo de salida, los nodos proporcionan esencialmente los mismos servicios. Puede realizar el proceso de mensajes en un nodo de salida y puede enviar un mensaje a una corriente de bits utilizando un nodo de proceso de mensajes. Para una mayor facilidad, este tema hace referencia principalmente al nodo como nodo de proceso de mensajes, pero también contiene información sobre las funciones de ambos tipos de nodo.
Una biblioteca de implementación cargable (LIL), es el módulo de implementación para un nodo en C. Una LIL se implementa como una biblioteca de enlaces dinámicos (DLL) o compartidos, pero tiene la extensión .lil, no .dll.
Para obtener más información sobre las funciones de implementación de nodo C que escribe para el nodo, consulte Funciones de implementación de nodo en C. Puede llamar a las funciones de programa de utilidad de nodo C, implementadas en el intermediario de tiempo de ejecución, para ayudar con la operación de nodo; consulte Funciones de utilidad de nodo en C.
Puede ver información sobre los ejemplos sólo cuando utilice el Information Center que está integrado en WebSphere Message Broker Toolkit o el Information Center en línea. Puede ejecutar ejemplos sólo cuando utilice el Information Center que está integrado en WebSphere Message Broker Toolkit.
Para declarar y definir un nodo definido por el usuario en el intermediario, incluya una función de inicialización bipGetMessageflowNodeFactory, en su LIL. Los pasos siguientes tienen lugar en la hebra de configuración e indican cómo llama el intermediario a su función de inicialización y cómo esa función declara y define el nodo definido por el usuario:
Para crear una instancia del nodo:
Se establecen atributos siempre que se inicia el intermediario o cuando se vuelve a desplegar un flujo de mensajes con valores nuevos. El intermediario establece atributos invocando el código de usuario en la hebra de configuración. Su código necesita almacenar estos atributos en el área de contexto de nodo, para utilizarlos posteriormente al procesar mensajes.
{
const CciChar* ucsAttr = CciString("nodeTraceSetting", BIP_DEF_COMP_CCSID) ;
insAttrTblEntry(p, (CciChar*)ucsAttr, CNI_TYPE_INTEGER);
_setAttribute(p, (CciChar*)ucsAttr, (CciChar*)constZero);
free((void *)ucsAttr) ;
}
{
const CciChar* ucsAttr = CciString("nodeTraceOutfile", BIP_DEF_COMP_CCSID) ;
insAttrTblEntry(p, (CciChar*)ucsAttr, CNI_TYPE_STRING);
_setAttribute(p, (CciChar*)ucsAttr, (CciChar*)constSwitchTraceLocation);
free((void *)ucsAttr) ;
}
Cuando el intermediario recupera un mensaje de la cola y dicho mensaje llega al terminal de entrada del nodo de salida o de proceso de mensajes definido por el usuario, el intermediario invoca la función de implementación cniEvaluate. Esta función se llama en la hebra de proceso de mensajes y debe decidir qué se debe hacer con el mensaje. Es posible que esta función se invoque en varias hebras, específicamente si se utilizan instancias adicionales.
Si se suprime un nodo, el intermediario llama a la función cniDeleteNodeContext. Esta función se inicia en la misma hebra que cniCreateNodeContext. Utilice esta función para liberar los recursos utilizados por el nodo definido por el usuario. Por ejemplo:
void _deleteNodeContext(
CciContext* context
){
static char* functionName = (char *)"_deleteNodeContext()";
free ((void*) context);
return;
}