Elaborazione in modalità commit e livello di sincronizzazione

La modalità commit si riferisce al tipo di elaborazione commit eseguita da IMS.

La modalità commit si riferisce al tipo di elaborazione commit eseguita da IMS. Il client Java specifica il protocollo della modalità commit da utilizzare quando inoltra una richiesta di transazione a IMS. Ci sono due tipi di elaborazione in modalità commit supportate da IMS Connect e da IMS: modalità commit 0 (commit-then-send) dove IMS esegue il commit delle modifiche del database IMS ed invia l'output al client e la modalità commit 1 (send-then-commit) dove IMS invia l'output al client e poi esegue il commit delle modifiche del database.

Associati ai protocolli in modalità commit, IMS Connect e IMS supportano anche tre livelli di sincronizzazione: NONE, CONFIRM e SYNCPT. Tutti e tre i livelli di sincronizzazione possono essere utilizzati con la modalità commit 1. Solo CONFIRM può essere utilizzato con la modalità commit 0.

IMS Connector per Java fornisce automaticamente il livello di sincronizzazione quando comunica con IMS Connect. Attualmente, il client Java non può impostare esplicitamente il livello di sincronizzazione su SYNCPT. Per le interazioni in modalità commit 1, il valore predefinito per il livello di sincronizzazione è NONE. Sarà sufficiente impostare solo InteractionVerb su SYNC_SEND_RECEIVE senza impostare il livello di sincronizzazione. Per le interazioni in modalità commit 0, il valore predefinito per il livello di sincronizzazione è CONFIRM. Sarà sufficiente impostare solo InteractionVerb su SYNC_SEND_RECEIVE e la modalità commit su 0, senza impostare il livello di sincronizzazione. Se un altro valore numerico oltre a 0 o 1 viene passato al metodo setSyncLevel(int), si genera un errore.

IMS Connector per Java supporta le seguenti combinazioni:

Se il client Java inoltra una richiesta di transazione con modalità commit 1 livello di sincronizzazione CONFIRM, IMS Connector per Java passa la richiesta tramite IMS Connect a IMS. IMS elabora questa transazione e tenta di inviare il messaggio di output al client Java tramite IMS Connector per Java . IMS Connector per Java invia un riconoscimento positivo per conto del client Java a IMS. IMS invia un codice di ritorno a IMS Connector per Java ad indicare se è stato eseguito o meno il commit delle modifiche. Se è stato eseguito, IMS Connector per Java invierà l'output al client Java. In caso contrario, il client Java riceverà un'eccezione. In caso di errori durante il processo, il client Java riceverà un'eccezione.

Il tipo di eccezione determina anche se il messaggio di output sarà disponibile o meno per essere recuperato in futuro. Se, ad esempio, il client Java riceve IMSDFSMessageException che indica che la transazione è stata arrestata, l'applicazione non viene eseguita; di conseguenza, nessun messaggio di output sarà disponibile per essere recuperato. Se, tuttavia, la transazione viene eseguita ma il valore executionTimeout scade prima che si restituisca il messaggio di output a IMS Connect, il client Java riceverà EISSystemException che indica che si è verificato il timeout dell'esecuzione. In questo caso, il messaggio di output verrà accodato alla coda in attesa asincrona IMS OTMA appropriata o al TPIPE per un recupero in futuro.

Nota: Nella terminologia IMS/OTMA, per pipe di transazione (TPIPE) si intende una connessione logica tra un client(IMS Connect) e il server (IMS OTMA). Per le interazioni in modalità commit 0, il TPIPE è l'ID client utilizzato per l'interazione. Ciascun clientID utilizzato per una transazione in modalità commit 0 avrà il proprio TPIPE. Per le interazioni in modalità commit 1, il TPIPE viene identificato dal numero di porta IMS Connect utilizzato per l'interazione. Di conseguenza, ciascuna porta avrà un TPIPE che verrà utilizzato per tutti i client che eseguono le interazioni in modalità commit 1 su quella porta.

Indipendentemente dal fatto che il client Java sta eseguendo una transazione IMS in modalità commit 1 o commit 0, il client Java specifica un valore per la proprietà interactionVerb di IMSInteractionSpec. Se viene specificata l'interazione in modalità commit 0, il client Java deve fornire anche un valore per la proprietà clientID di IMSConnectionSpec. clientID è una proprietà di IMSConnectionSpec ed identifica la coda in attesa asincrona IMS OTMA o il TPIPE dove risiedono i messaggi di output recuperabili. Se il client Java fornisca o meno l'ID client per un'interazione in modalità commit 0 dipende dal tipo di connessione del socket utilizzata dal client Java.

Per recuperare i messaggi di output da un TPIPE, il client Java inoltra una richiesta in cui specifica uno dei valori SYNC_RECEIVE_ASYNCOUTPUT, SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT, o SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT per la proprietà interactionVerb di IMSInteractionSpec ed un valore per la proprietà clientID di IMSConnectionSpec. Per ulteriori informazioni sul supporto di output asincrono, vedere il capitolo 9 sui protocolli in IMS Connect Guide and Reference.

In generale, è possibile utilizzare le interazioni SYNC_RECEIVE_ASYNCOUTPUT, SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT, o SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT per recuperare i messaggi di output accodati per un ID client, indipendentemente da come questi messaggi sono stati accodati al ID client associato, sia che si tratti del risultato di una transazione in modalità commit 0 non riuscita sia che provenga da un'applicazione IMS che ha inviato un inserimento su un ALTPCB (Alternate Program Communication Block). Nel caso di recupero di un messaggio di output da una transazione in modalità commit 0 non riuscita, il valore clientID fornito in IMSConnectionSpec per la richiesta di recupero deve corrispondere al valore clientID specificato per la transazione in modalità commit 0.

Se non c'è nulla nella coda in attesa asincrona OTMA per un valore clientID in particolare, si riceverà un'eccezione del timeout di esecuzione. L'eccezione del timeout può significare che non ci sono messaggi nella coda o che il valore di timeout non abbia fornito tempo sufficiente perché IMS Connect recuperasse il messaggio dalla coda. Per SYNC_RECEIVE_ASYNCOUTPUT, SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT, o SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT, nonché per le interazioni SYNC_SEND_RECEIVE, executionTimeout corrisponde al tempo in cui IMS Connect attende una risposta da IMS. Se non si specifica un valore di timeout di esecuzione per la richiesta di recupero, verrà utilizzato il valore predefinito: Il valore di timeout predefinito è il valore TIMEOUT del membro di configurazione di IMS Connect. L'utente potrebbe aver necessità di sperimentare il valore di timeout di esecuzione, per garantire che i messaggi di output vengano restituiti per tutti i tipi di interazione.

Elaborazione in modalità commit e connessioni del socket

Tutte le connessioni del socket create dall'adattatore di risorse IMS TM sono persistenti. In altre parole, la stessa connessione del socket tra IMS Connector per Java e IMS Connect può essere riutilizzata in modo seriale per più interazioni con IMS Connect. La connessione del socket non verrà chiusa e riaperta tra interazioni. Ci sono due tipi di socket persistente; condivisibile e dedicato.

Socket persistente condivisibile

Il socket persistente condivisibile può essere condiviso (riutilizzato in modo seriale) da più applicazioni che eseguono interazioni in modalità commit 1 o commit 0. Per un'applicazione che esegue un'interazione in modalità commit 0 su un socket persistente condivisibile, l'adattatore di risorse IMS genera automaticamente un clientID con il prefisso "HWS". Questo ID client rappresenta ed identifica la connessione socket, nonché il valore TPIPE OTMA associato. Per questo tipo di socket, sono consentiti solo i clientID generati dall'adattatore di risorse IMS. Un clientID specificato dall'utente non è consentito con il supporto del socket persistente condivisibile.

Nota: I programmi applicativi IMS che inseriscono messaggi su un PCB alternativo non devono utilizzare nomi che iniziano con "HWS" per i PCB alternativi.

É possibile accodare un messaggio di output che non può essere distribuito ad un client Java che esegue un'interazione in modalità commit 0 su un socket persistente condivisibile per un recupero in futuro. Inoltre, un'interazione in modalità commit 1 o commit 0 su un socket persistente condivisibile che produce un passaggio programma-programma che richiama un'altra interazione in modalità commit 0 producendo un output secondario, può essere accodata di nuovo per un recupero in futuro. Le interazioni SYNC_RECEIVE_ASYNCOUTPUT, SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT e SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT sono supportate su socket persistenti condivisibili. Per recuperare messaggi di output non distribuiti accodati nella coda in attesa asincrona IMS OTMA o in TPIPE, richiamare interactionverb nella stessa applicazione client, perché sono necessari lo stesso ID client generato che identifica la connessione socket condivisibile e il TPIPE OTMA associato.

Su socket persistenti condivisibili, i messaggi di output non distribuiti possono essere gestiti in più di un modo. Un modo è quello di eliminare l'output non distribuito. Per eliminare i messaggi di output non distribuiti, assicurarsi che la proprietà purgeAsyncOutput di IMSInteractionSpec sia TRUE. La proprietà di input determina se IMS Connect elimina l'output PCB I/O. La proprietà purgeAsyncOutput è valida solo con l'istruzione di interazione SYNC_SEND_RECEIVE. Se la proprietà non viene specificata su SYNC_SEND_RECEIVE, il valore predefinito è TRUE.

Un'altra possibilità di gestire i messaggi di output non distribuiti su socket persistenti condivisibili è quella di reindirizzare i messaggi ad un'altra destinazione. É possibile reindirizzare il messaggio di output non distribuito su una destinazione differente impostando la proprietà IMSInteractionSpec, reRoute, su TRUE. Questa proprietà è valida solo con l'istruzione di interazione SYNC_SEND_RECEIVE. Se reRoute è impostato su TRUE, il messaggio di output non distribuito viene accodato ad una destinazione denominata fornita dall'applicazione client, che viene specificata sulla proprietà reRouteName IMSInteractionSpec. Se la proprietà reRoute viene impostata su TRUE, e non viene fornito alcun valore reRouteName, il valore per la proprietà reRouteName è quello specificato nel file di configurazione di IMS Connect. Se non viene specificato alcun valore nel file di configurazione di IMS Connect, si utilizza il valore HWS$DEF.

Le connessioni socket persistente condivisibile vengono create da una produzione di connessione IMS con valori almeno per le seguenti proprietà personalizzate:
  • Nome host = nome host TCP/IP della macchina che esegue IMS Connect
  • Numero di porta = numero di porta associato
  • Nome archivio dati = nome dell'IMS di destinazione
  • CM0Dedicated = FALSE
FALSE è il valore predefinito per la proprietà CM0Dedicated e garantisce che la produzione di connessione creerà connessioni del socket persistente condivisibile.

Socket persistente dedicato

Un socket persistente dedicato viene utilizzato per applicazioni Java che eseguono solo interazioni in modalità commit 0. Il socket persistente condivisibile può essere condiviso (riutilizzato in modo seriale) da più applicazioni con lo stesso ID client specificato dall'utente Per questo tipo di socket, sono consentite solo le interazioni con clientID specificati dall'utente. Un clientID specificato dall'utente:
  • Deve essere una stringa da 1 a 8 caratteri alfanumerici (A-Z, 0-9) o speciali (@,#,$).
  • Non deve iniziare con la stringa di caratteri HWS.
  • Non deve essere un numero di porta IMS Connect.
  • Se vengono fornite lettere minuscole, queste verranno modificate in maiuscole

Un socket persistente dedicato indica che la connessione socket viene assegnata ad un clientID specificato e resterà dedicata a quello specifico valore clientID finché non ci si disconnette. Le interazioni SYNC_SEND_RECEIVE, SYNC_SEND, SYNC_RECEIVE_ASYNCOUTPUT, SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT e SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT son supportate su socket persistenti dedicati.

Le interazioni SYNC_RECEIVE_ASYNCOUTPUT, SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT e SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT su socket persistenti dedicati consentono ad applicazioni client di recuperare messaggi collocati nella coda in attesa asincrona IMS OTMA come risultato di un'interazione in modalità commit 0 non riuscita, da un'applicazione IMS che ha inviato un inserimento su un ALTPCB (Alternate Program Communication Block), oppure da un reindirizzamento dell'output da una transazione eseguita su una produzione di connessione condivisibile. Per recuperare i messaggi, l'applicazione client deve fornire il valore clientID, che rappresenta il TPIPE che ha i messaggi di output asincroni accodati. Le interazioni su socket persistenti dedicati che hanno messaggi di output non distribuiti non possono essere reindirizzati o eliminati.

Le connessioni del socket persistente dedicato vengono create da una produzione di connessione IMS con valori almeno per le seguenti proprietà personalizzate:
  • Nome host = nome host TCP/IP della macchina che esegue IMS Connect
  • Numero di porta = numero di porta associato
  • Nome archivio dati = nome dell'IMS di destinazione
  • CM0Dedicated = TRUE

Un valore TRUE per la proprietà CM0Dedicated garantisce che la produzione di connessione creerà connessioni del socket persistente dedicato.

Nota: Se si dispone di più di una produzione di connessione configurata per creare socket persistenti dedicati nella stessa istanza IMS Connect, soltanto una produzione di connessione può dedicare un socket ad un ID client specifico nello stesso momento. Se, ad esempio, la prima produzione di connessione crea correttamente una connessione socket dedicata a clientID, CLIENT01; la seconda produzione di connessione riceverà la seguente eccezione, se tenta di creare una connessione socket dedicato a CLIENT01 mentre la connessione socket creata dalla prima produzione di connessione è ancora connessa a IMS Connect:
javax.resource.spi.EISSystemException: ICO0001E: Errore
errore com.ibm.connector2.ims.ico.IMSTCPIPManagedConnection@23766050.processOutputOTMAMsg
(byte [], InteractionSpec,Record). IMS Connect ha restituito l'errore: RETCODE=[8], 
REASONCODE=[DUPECLNT]. 
Si è utilizzato un ID client duplicato;  quell'ID client è attualmente in uso. 

Rilascio di socket persistenti

Una connessione TCP/IP tra IMS Connector per Java e IMS Connect è persistente; vale a dire resta aperta finché IMS Connector per Java o IMS Connect non si disconnette a causa di un errore. Ciò vale per la connessione socket persistente dedicato e per quella socket persistente condivisibile. Tuttavia, nel caso di una connessione socket persistente dedicato, questa può essere utilizzata solo da interazioni che hanno lo stesso clientID utilizzato per stabilire la connessione. Il numero di connessioni socket aumenterà appena si utilizzano nuovi ID client per le interazioni su connessioni socket persistente dedicato.

Se si dispone della proprietà del numero massimo di connessioni impostata su un valore diverso da zero e si dispone anche di un valore diverso da zero per la proprietà timeout di connessione, quando si raggiunge MaxConnections e tutte le connessioni sono in uso, l'applicazione otterrà ConnectionWaitTimeoutException dopo i secondi specificati nel timeout di connessione trascorso. Questo è il comportamento standard per WebSphere Application Server. ConnectionWaitTimeoutException si applica ai socket persistenti dedicati e a quelli persistenti condivisibili.

Se, tuttavia, MaxConnections è stato raggiunto ed una delle connessioni socket persistente non è attualmente in uso, WebSphere Application Server si disconnetterà per rispondere alla richiesta di creare una nuova connessione socket persistente. Questo è il comportamento standard per WebSphere Application Server e si applica a socket persistenti dedicati e a quelli persistenti condivisibili.


Feedback