Modello di programmazione output asincrono

Questo modello di programmazione consente di recuperare l'output interrogato da IMS

L'applicazione potrebbe avere la necessità di recuperare l'output accodato in qualche momento indietro nel tempo, di qui il termine output asincrono. L'output asincrono può essere il risultato di un numero di situazioni. Ad esempio, l'output non distribuito da interazioni commitMode 0, l'output cambia da programma-a-programma, l'output da ISRT ad un PCB alternativo, l'output da un'applicazione IMS che restituisce più messaggi di output.

Per recuperare un output asincrono, l'applicazione Java esegue un'interazione SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT o SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT. L'applicazione fornisce un valore per la proprietà InteractionVerb ed un valore pari a 0 o a 1 per la proprietà commitMode dell'oggetto IMSInteractionSpec utilizzato dal metodo di esecuzione dell'interazione.

Ci sono due tipi di connessioni del socket, connessioni del socket persistente condivisibile e connessioni del socket persistente dedicato che possono essere utilizzate per recuperare l'output asincrono. Il modo per recuperare i messaggi di output asincrono è diverso a seconda del tipo di connessione utilizzato. I valori della proprietà interactionVerb che possono essere utilizzati per recuperare l'output asincrono sono: SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT, e SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT (insieme a SYNC_RECEIVE_ASYNCOUTPUT).

Nota: Non c'è alcuna differenza nella funzione tra SYNC_RECEIVE_ASYNCOUTPUT e SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT. Si consiglia, tuttavia, di utilizzare il nuovo nome SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT con V9.1.0.1 e risultati successivi dell'adattatore di risorse IMS TM. Nel resto di questo documento verrà utilizzato solo il nuovo nome, SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT.

La differenza tra SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT e SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT determina come IMS Connect verifica l'output sulla coda in attesa asincrona IMS OTMA. Per le interazioni SYNC_RECEIVE_ASYNCOUTPUT o SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT, se non vi è alcun output asincrono nella coda in attesa asincrona IMS OTMA quando viene effettuata la richiesta, IMS Connect restituirà una notifica di timeout di esecuzione appena il valore di timeout di esecuzione specificato dall'applicazione client verrà superato. Per questa ragione, si consiglia il valore di timeout di esecuzione più breve possibile, 10, per le interazioni SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT.

Per un'interazione SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT, se non vi è alcun output asincrono nella coda in attesa asincrona IMS OTMA quando viene effettuata la richiesta, IMS Connect attenderà per un periodo di tempo specificato nella proprietà executionTimeout dell'interazione perché OMA restituisca un messaggio. Se non vi è alcun output asincrono nella coda in attesa quando viene superato il timeout di esecuzione, IMS Connect restituirà un errore di timeout di esecuzione. Per un'interazione SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT, selezionare un valore di timeout di esecuzione appropriato, piuttosto che il valore più breve possibile.

Tutti e tre i valori della proprietà interactionVerb richiedono la modalità commit 0 e possono essere utilizzati sia sulle connessioni del socket persistente condivisibile che su quelle del socket persistente dedicato. Inoltre, le proprietà IMSInteractionSpec purgeAsycOutput, reRoute e reRouteName non vengono applicate alle interazioni che utilizzano tre interactionVerb e vengono ignorate da IMS Connector per Java. Il modo in cui le proprietà interactionVerb vengono richiamate su connessioni del socket persistente condivisibile e connessioni del socket persistente dedicato è diverso.

Recupero dell'output asincrono su connessioni del socket persistente dedicato

Per recuperare il messaggio di output accodato su un socket persistente dedicato, l'applicazione client deve eseguire un'interazione in modalità commit 0 con la proprietà interactionVerb di IMSInteractionSpec impostata su SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT o su SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT.

Oltre ad eseguire un'interazione in modalità commit 0 su una connessione del socket persistente dedicato con la proprietà interactionVerb appropriata, l'applicazione client deve fornire anche un valore per la proprietà clientID di IMSConnectionSpec. clientID viene richiesto perché stabilisce il valore TPIPE da cui l'output asincrono verrà recuperato. Per recuperare i messaggi di output da un'interazione in modalità 0 su un socket persistente dedicato, il valore clientID specificato sull'interazione SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT/NOWAIT deve corrispondere al valore specificato per l'interazione in modalità commit 0 originale. Per recuperare i messaggi di output inviati ad un PCB alternativo, il valore clientID specificato sull'interazione SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT/NOWAIT deve corrispondere al nome del PCB alternativo. Per recuperare i messaggi di output reinstradati alla destinazione reRouteName, il valore clientID sull'interazione SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT/NOWAIT deve essere impostato su quella destinazione della proprietà reRouteName.

Recupero dell'output asincrono su connessioni del socket persistente condivisibile

Per recuperare un messaggio di output non distribuito che risulta da un'interazione su un socket persistente condivisibile per cui l'indicatore reRoute non è stato impostato su TRUE, l'applicazione client deve eseguire un'interazione SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT o SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT sulla stessa connessione del socket persistente condivisibile nella stessa applicazione che ha richiamato l'interazione che ha condotto all'output asincrono accodato. La ragione per cui le due interazioni sono state richiamate nella stessa applicazione client è che l'adattatore di risorse IMS TM genera automaticamente un ID client per le connessioni del socket persistente condivisibile. Questo ID client generato identifica la connessione del socket nonché il valore TPIPE OTMA associato a cui viene accodato l'output asincrono. Viene generato un nuovo ID client quando si stabilisce una nuova connessione. Nel caso di connessioni del socket persistente condivisibile, l'ID client viene generato da IMS Connector per Java ed è univoco per ciascuna connessione. Di conseguenza, per recuperare l'output asincrono per un ID client specificato generato, è necessario utilizzare una connessione con lo stesso ID client. Ciò significa che, per le connessioni del socket persistente condivisibile (che hanno sempre ID client generati univoci), è necessario utilizzare la stessa connessione. L'univo modo per garantire che si utilizzerà la stessa connessione è di eseguire entrambe le interazioni (l'interazione originale e le interazioni SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT o SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT) nella stessa applicazione client.

Le situazioni riportate di seguito possono risultare in un messaggio di output accodato sulla coda in attesa asincrona IMS OTMA:
  1. Un programma dell'applicazione IMS inserisce un messaggio di output su un PCB alternativo.
  2. L'output di un'interazione in modalità commit 0 su una connessione del socket persistente dedicato o condivisibile non può essere distribuito all'applicazione client.
  3. Un'interazione distribuisce un passaggio programma-programma per cui l'output secondario non viene distribuito all'applicazione client. L'output secondario è sempre un output in modalità commit 0.

Non specificare un valore per la proprietà clientID di IMSConnectionSpec per interazioni su connessioni del socket persistente condivisibile. Su questo tipo di connessioni un valore clientID specificato dall'utente non è consentito, perché IMS Connector per Java lo genera automaticamente.

Nota: Per le connessioni del socket persistente condivisibile, la modalità commit per un'interazione SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT/NOWAIT verrà impostata automaticamente su 0 internamente da IMS Connector per Java, senza tenere conto del valore impostato in IMSInteractionSpec per quell'interazione. Questo comportamento non è valido per le interazioni SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT/NOWAIT su connessioni del socket persistente dedicato. Per questo tipo di connessione, la modalità commit deve essere impostata esplicitamente su 0.

Feedback