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).
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.
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.