Prima di iniziare
WebSphere Message Broker fornisce l'origine per due nodi definiti dall'utente di esempio denominati SwitchNode e TransformNode. E' possibile utilizzare tali nodi nel loro stato attuale oppure modificarli. Inoltre, è possibile visualizzare l'esempio di estensione definita dall'utente in cui viene dimostrato l'uso dei nodi definiti dall'utente, incluso un nodo di elaborazione messaggi scritto in C.
Una libreria di implementazione caricabile, o LIL (Loadable Implementation Library), è il modulo di implementazione di un nodo C (o programma di analisi). Una LIL è implementata come una DLL (Dynamic Link Library). Ha l'estensione del file .lil, non .dll.
Le funzioni di implementazione che devono essere scritte dallo sviluppatore sono riportate in Funzioni di implementazione del nodo in C. Le funzioni di utilità che sono fornite da WebSphere Message Broker per facilitare questa elaborazione sono riportate in Funzioni di utilità del nodo in C.
WebSphere Message Broker fornisce l'origine per due nodi definiti dall'utente di esempio denominati SwitchNode e TransformNode. E' possibile utilizzare tali nodi nel loro stato attuale oppure modificarli. E' possibile inoltre utilizzare l'esempio esempio Estensione definita dall'utente.
Concettualmente, un nodo di elaborazione messaggi viene utilizzato per elaborare un messaggio mentre un nodo di output viene utilizzato per eseguire l'output di un messaggio come un flusso di bit. Tuttavia, quando si codifica un nodo di elaborazione messaggi o un nodo di output, questi sono essenzialmente la stessa cosa. E' possibile eseguire l'elaborazione messaggi all'interno di un nodo di output e similmente è possibile eseguire l'output di un messaggio su un flusso di bit utilizzando un nodo di elaborazione messaggi. Per semplicità, questo argomento fa riferimento principalmente al nodo come un nodo di elaborazione messaggi, tuttavia, tratta la funzionalità di entrambi i tipi di nodo.
Per dichiarare e definire un nodo definito dall'utente al broker è necessario includere una funzione di inizializzazione, bipGetMessageflowNodeFactory nella LIL. I passi seguenti vengono eseguiti sul thread di configurazione e evidenziano il modo in cui il broker chiama la funzione di inizializzazione e come tale funzione dichiara e definisce il nodo definito dall'utente:
Gli attributi vengono impostati ogni volta che viene avviato il broker oppure quando un flusso di messaggi viene ridistribuito con nuovi valori. Gli attributi vengono impostati dal broker richiamando il codice utente sul thread di configurazione. Il codice utente deve memorizzare tali attributi nella relativa area di contesto del nodo, in modo da utilizzarli successivamente per l'elaborazione dei messaggi.
{ 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) ; }
Quando il broker richiama un messaggio dalla coda e questo arriva nel terminale di input del nodo di output o di elaborazione messaggi definito dall'utente, il broker richiama la funzione di implementazione cniEvaluate. Questa funzione viene richiamata sul thread di elaborazione messaggi e deve decidere come procedere con il messaggio. Tale funzione potrebbe essere richiamata su più thread, specialmente se vengono utilizzate ulteriori istanze.
Nel caso di un nodo cancellato, il broker richiama la funzione cniDeleteNodeContext. Tale funzione deve liberare tutte le risorse utilizzate dal nodo definito dall'utente. Ad esempio:
void _deleteNodeContext(
CciContext* context
){
static char* functionName = (char *)"_deleteNodeContext()";
free ((void*) context); return;
}