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