Ciclo di vita del nodo di input definito dall'utente in C

In questo argomento vengono esaminate le varie fasi di vita di un nodo di input definito dall'utente scritto utilizzando il linguaggio di programmazione C. Vengono prese in considerazioni le seguenti fasi:

Registrazione

Durante la fase di registrazione, il broker individua le risorse disponibili e le LIL che possono fornirle. In tale istanza, le risorse disponibili sono i nodi. La fase inizia all'avvio di un gruppo di esecuzione. Le LIL vengono caricate all'avvio di un gruppo di esecuzione e il broker esegue delle query per individuare le risorse che queste possono fornire.

Una struttura CciFactory viene creata durante la fase di registrazione, quando il nodo definito dall'utente richiama cniCreateNodeFactory.

Durante tale fase, vengono richiamate dal broker le API riportate di seguito:
  • biGetMessageflowNodeFactory
  • bipGetParserFactory
Durante tale fase, viene richiamata dal nodo definito dall'utente l'API riportata di seguito:
  • cniCreateNodeFactory

Creazione istanza

Un'istanza di un nodo di input definito dall'utente viene creata quando il comando mqsistart avvia o riavvia l'elaborazione del gruppo di esecuzione oppure quando viene distribuito un flusso di messaggi che è associato al nodo.

Durante tale fase, vengono richiamate le API riportate di seguito:
  • cniCreateNodeContext. Questa API assegna la memoria per la creazione dell'istanza del nodo definito dall'utente per contenere i valori degli attributi configurati. Questa API viene richiamata una volta per ciascun flusso di messaggi che sta utilizzando il nodo di input definito dall'utente.
  • cniCreateInputTerminal. Questa API viene richiamata all'interno dell'API cniCreateNodeContext ed è utilizzata per indicare al broker di quali terminali di input, se presenti, dispone il nodo di input definito dall'utente.
    Nota: il nodo di input definito dall'utente disporrà di terminali di input solo se funziona anche come un nodo di elaborazione messaggi. In tale caso, per eseguire l'elaborazione dei messaggi è meglio utilizzare un altro nodo di elaborazione dei messaggi definito dall'utente piuttosto che combinare le due operazioni in un nodo nodo più complesso.
  • cniCreateOutputTerminal. Questa API viene richiamata all'interno dell'API cniCreateNodeContext ed ed è utilizzata per indicare al broker di quali terminali di output dispone il nodo di input definito dall'utente.
  • cniSetAttribute. Questa API viene richiamata dal broker per stabilire i valori per gli attributi configurati del nodo definito dall'utente.

Durante questa fase, viene creata una struttura CciTerminal. Tale struttura viene creata quando si richiama cniCreateTerminal.

Elaborazione

La fase di elaborazione inizia quando il broker richiama la funzione cniRun. Il broker utilizza la funzione cniRun per individuare come elaborare un messaggio, includendo la determinazione del dominio in cui viene definito un messaggio e il richiamo del programma di analisi pertinente per tale dominio.

Viene richiesto un thread dal pool di thread del flusso di messaggi e viene avviato nel metodo di esecuzione del nodo di input. Il thread esegue il collegamento al gestore code del broker e mantiene tale connessione durante il relativo ciclo di vita. Una volta che è stata eseguita l'allocazione di un thread, il nodo subentra in un loop di elaborazione dei messaggi mentre attende di ricevere un messaggio. Il nodo rimane nel loop fino alla ricezione di un messaggio. Se il flusso di messaggi è configurato per utilizzare più thread, viene attivato l'invio di thread.

A questo punto i dati del messaggio possono essere propagati.

Durante tale fase, vengono richiamate dal broker le API riportate di seguito:
  • cniRun. Questa funzione viene richiamata dal broker per determinare come elaborare il messaggio di input.
  • cniSetInputBuffer. Questa funzione fornisce un buffer di input, o ne indica al broker l'ubicazione, e lo associa ad un oggetto messaggio.

Eliminazione

Un nodo di input definito dall'utente viene eliminato quando il flusso di messaggi viene distribuito nuovamente oppure quando viene utilizzato mqsistop per arrestare l'elaborazione del gruppo di esecuzione. E' possibile eliminare il nodo implementando la funzione cniDeleteNodeContext.

Quando un nodo di input definito dall'utente viene eliminato in uno di questi modi, è necessario liberare la memoria utilizzata dal nodo e rilasciare le risorse presenti, come ad esempio i socket.

Durante tale fase, vengono richiamate dal broker le API riportate di seguito:
  • cniDeleteNodeContext. Questa funzione viene richiamata dal broker per eliminare l'istanza del nodo di input.
Informazioni particolari | Marchi | Download | Libreria | Supporto | Commenti
Copyright IBM Corporation 1999, 2006 Ultimo aggiornamento: ago 17, 2006
as01391_