Pianificazione di nodi di elaborazione dei messaggi definiti dall'utente

Questo argomento fornisce una guida per la scrittura di propri nodi di elaborazione messaggi in modo da garantirne il corretto funzionamento. Viene spiegato come utilizzare il proprio nodo di elaborazione messaggi per la navigazione di un messaggio.

Considerazioni relative alla struttura

Prima di sviluppare e implementare il nodo di elaborazione messaggi in uso, è necessario prendere delle decisioni in merito ai seguenti fattori:
  • Il programma di analisi dei messaggi che eseguirà l'analisi del messaggio
  • Se sovrascrivere i valori di attributo del programma di analisi dei messaggi predefiniti per questo nodo di elaborazione messaggi.
  • Il modello di thread appropriato per il nodo di elaborazione messaggi.
  • Fine del supporto di transazione ed elaborazione del messaggio che il nodo supporta.
  • Gli attributi di configurazione richiesti dal nodo di elaborazione messaggi che devono essere esternalizzati per la modifica dal progettista del flusso di messaggi.
  • API del nodo facoltative fornite dal nodo definito dall'utente.
  • Argomenti sullo sviluppo in generale:

Navigazione nell'ambito dell'elemento di sintassi

L'infrastruttura del broker fornisce le funzioni che abilitano l'implementazione di un nodo di elaborazione messaggi ad attraversare la rappresentazione della struttura ad albero del messaggio, con funzioni e metodi che consentono la navigazione dall'elemento corrente ai seguenti relativi elementi:
  • Parent
  • Primo child
  • Ultimo child
  • Elemento associato precedente (a sinistra)
  • Elemento associato successivo (a destra)
Come riportato nella figura seguente. Altre funzioni e metodi supportano la manipolazione degli elementi stessi, con funzioni e metodi per creare elementi, per impostare o eseguire delle query dei relativi valori, per inserire nuovi elementi nella struttura ad albero e per eliminarvi degli elementi. Per ulteriori informazioni, fare riferimento a Funzioni di utilità del nodo in C e Funzioni di utilità del programma di analisi in C, o alla documentazione Java.

Un elemento di sintassi con collegamenti ad altri elementi


La figura mostra un elemento di sintassi. E' collegato ad atri elementi. Questi sono: elemento associato precedente ed elemento associato successivo, alla sinistra e alla destra dell'elemento, primo child e ultimo child sotto l'elemento e parent, che si trova sopra l'elemento.
La figura successiva mostra una struttura ad albero di elemento di sintassi semplice in cui è presente una serie completa di interconnessioni tra gli elementi.

Struttura ad albero dell'elemento di sintassi


La figura mostra una struttura ad albero dell'elemento di sintassi. L'elemento A è nella parte superiore del diagramma, sopra all'elemento B, che è sopra agli elementi C, D ed E, che sono allo stesso livello.

L'elemento A è l'elemento root della struttura ad albero. Non ha parent in quanto è il root. Ha un primo child, l'elemento B. Poiché A non ha altri child, l'elemento B è anche l'ultimo child di A.

L'elemento B ha tre child: gli elementi C, D ed E. L'elemento C è il primo child di B; l'elemento E è l'ultimo child di B.

L'elemento C ha due elementi associati: gli elementi D ed E. L'elemento associato successivo dell'elemento C è l'elemento D. L'elemento associato successivo dell'elemento D è l'elemento E. L'elemento associato precedente dell'elemento E è l'elemento D. L'elemento associato precedente dell'elemento D è l'elemento C.

La figura riportata di seguito mostra la prima creazione degli elementi di sintassi di un tipico messaggio ricevuto da WebSphere Message Broker. Tenere presente che non tutti i messaggi avranno un'intestazione MQRFH2.

Prima creazione degli elementi di sintassi di un tipico messaggio


Nella parte superiore della figura è presente un riquadro con l'etichetta Root. Una linea collega tale riquadro al   riquadro con etichetta Properties in basso a sinistra e un'altra linea al riquadro con etichetta XML in basso a destra. Tra questi due, sono presenti i riquadri con etichetta MQMD e MQRFH2.

In tali elementi, menzionati spesso in fase di creazione come "cartelle", vengono memorizzati gli elementi di sintassi che rappresentano le intestazioni e i dati del contenuto dei messaggi. In questo esempio, il primo elemento child di root è la cartella Properties. L'elemento associato successivo di Properties è la cartella MQMD dei messaggi WebSphere MQ in entrata. L'elemento associato successivo è la cartella per l'intestazione MQRFH2. Infine, è presente la cartella che rappresenta il contenuto del messaggio, che (in questo esempio) è un messaggio XML.

La figura riportata sopra include le intestazioni MQMD e MQRFH2. Tutti i messaggi ricevuti da un nodo di elaborazione MQmessage includono un'intestazione MQMD; possono essere incluse inoltre altre intestazioni.

Navigazione in un messaggio XML

Si supponga di avere il seguente messaggio XML:
  <Business>
    <Product type='messaging'></Product>
    <Company>
      <Title>IBM</Title>
      <Location>Hursley</Location>
      <Department>WebSphere MQ</Department>
    </Company>
  </Business>
In questo esempio, gli elementi sono dei seguenti tipi:
Elemento nome
Business, Product, Company, Title, Location, Department
Elemento valore
IBM, Hursley, WebSphere MQ
Elemento nome-valore
type='messaging'

Per navigare in un messaggio, è possibile utilizzare i metodi e le funzioni di utilità del nodo (o le funzioni di utilità del programma di analisi similari). Prendendo in esame il messaggio XML mostrato in precedenza, è necessario prima richiamare cniRootElement, con il messaggio ricevuto dal nodo come input di questa funzione. In Java, è necessario richiamare getRootElement su MbMessage in entrata. Questo restituisce un MbElement che rappresenta il root dell'elemento. L'elemento root non deve essere modificato da un nodo definito dall'utente.

La figura riportata in precedenza mostra che l'ultimo child dell'elemento root è la cartella contenente la struttura ad albero del programma di analisi XML. E' possibile navigare in questa cartella richiamando cniLastChild (con l'output della chiamata precedente come input di questa funzione) in un nodo C oppure richiamando il metodo getLastChild sull'elemento root, in un nodo Java.

E' presente solo un elemento (<Business>) al livello superiore del messaggio, cosicché richiamando cniFirstChild (in C) o getFirstChild (in Java) ci si porta in questo punto nella struttura ad albero. E' possibile utilizzare cniElementType o getElementType per ottenere il relativo tipo (ovvero nome), seguito da cniElementName o getName per restituire il nome stesso (Business).

<Business> ha due child, <Product> e <Company>, è possibile quindi utilizzare cniFirstChild o getFirstChild seguito da cniNextSibling o getNextSibling per navigarvi.

<Product> ha un attributo (type='messaging'), che è un elemento child. Utilizzare cniFirstChild o getFirstChild nuovamente per navigare in questo elemento e cniElementType o getType per restituire il relativo tipo (ovvero nome-valore). Utilizzare cniElementName o getName come prima per ottenere il nome. Per ottenere il valore, richiamare cniElementValueType per restituire il tipo, seguito dalla funzione appropriata nel gruppo cniElementValue. In questo esempio è cniElementCharacterValue. In Java utilizzare il metodo getValue, che restituisce un oggetto Java che rappresenta il valore dell'elemento.

<Company> ha tre elementi child, ciascuno dei quali ha un child che è un elemento valore (IBM, Hursley, e WebSphere MQ). E' possibile utilizzare le funzioni già descritte per navigarvi ed accedere ai relativi valori.

Per copiare la struttura ad albero dell'elemento (o parte di esso) sono disponibili altre funzioni. La copia può quindi essere modificata aggiungendo o eliminando elementi, e modificandone nomi e valori, per creare un messaggio di output.

Informazioni particolari | Marchi | Download | Libreria | Supporto | Commenti
Copyright IBM Corporation 1999, 2006 Ultimo aggiornamento: ago 17, 2006
as01395_