Gestione I/O (BIO/NIO)
GovWay agisce da proxy, ricevendo richieste di servizio dai client e gestendole secondo i criteri di autorizzazione, validazione e tracciamento configurati. Una volta completate queste fasi, la richiesta viene inoltrata al sistema backend, che restituisce la risposta da inoltrare al client.
L’intera gestione dell’I/O — dalla ricezione della richiesta alla restituzione della risposta — può avvenire tramite due modalità alternative: bloccante (BIO) o non bloccante (NIO).
Modalità bloccante (BIO)
- Le richieste vengono ricevute tramite un servlet HTTP standard, gestito da un worker thread del web container. Questo thread rimane allocato fino al completamento della risposta verso il client. 
- L’inoltro verso il backend è affidato ai Connettori, i quali, per richieste HTTP, sono implementati tramite la libreria Apache HttpClient 5, utilizzando la classe “org.apache.hc.client5.http.classic.HttpClient”. 
- Per ulteriori dettagli di configurazione, consultare la sezione: Configurazione I/O BIO. 
Modalità non bloccante (NIO)
- Anche in questo caso, le richieste vengono ricevute tramite un servlet HTTP, ma la gestione tra richiesta e risposta è disaccoppiata mediante l’uso di jakarta.servlet.AsyncContext. Il thread del container viene liberato immediatamente e la continuazione della gestione viene delegata a thread applicativi provenienti da un pool dedicato. La risposta viene poi restituita al client riattivando l’AsyncContext. 
- L’invio della richiesta al backend avviene sempre tramite i Connettori che per richieste HTTP sono implementati usando la libreria Apache HttpClient 5, nella versione asincrona non bloccante “org.apache.hc.client5.http.impl.async.CloseableHttpAsyncClient”. 
- Per ulteriori dettagli di configurazione, consultare la sezione: Configurazione I/O NIO. 
Selezione della modalità I/O tramite URL
Ogni invocazione di un servizio (sia in modalità erogazione che fruizione) può essere effettuata scegliendo la modalità I/O desiderata (BIO o NIO) direttamente nell’URL di invocazione descritte nella sezione: Contesto di una API erogata o fruita. Di seguito vengono riproposti gli esempi di URL già descritti in quella sezione, arricchiti con la specifica del canale I/O: BIO (sync) o NIO (async).
Modalità bloccante:
- <prefix-erogazione>/<profilo>[/in]/sync//<soggettoDominioInterno>/<nomeErogazione>/v<versioneErogazione> 
- <prefix-fruizione>/<profilo>/out/sync/<soggettoDominioInterno>/<soggettoErogatore>/<nomeFruizione>/v<versioneFruizione> 
Modalità non bloccante:
- <prefix-erogazione>/<profilo>[/in]/async//<soggettoDominioInterno>/<nomeErogazione>/v<versioneErogazione> 
- <prefix-fruizione>/<profilo>/out/async/<soggettoDominioInterno>/<soggettoErogatore>/<nomeFruizione>/v<versioneFruizione> 
La modalità predefinita è BIO: essa viene utilizzata in assenza dell’indicazione esplicita di “sync” o “async” all’interno dell’URL di invocazione. Tale comportamento è modificabile agendo sul file <directory-lavoro>/govway_local.properties aggiungendo le seguenti righe:
# Modalità di default per le fruizioni (BIO/NIO) org.openspcoop2.pdd.channel.pd.default=NIO # Modalità di default per le erogazioni (BIO/NIO) org.openspcoop2.pdd.channel.pa.default=NIO