Skip to content

Commit

Permalink
Issue #368
Browse files Browse the repository at this point in the history
Aggiunta sleep nell'invio RPT in modalita' asincrona per 'temporizzare' la primitiva nodoInviaRPT dopo l'esecuzione di una paaAttivaRPT.
  • Loading branch information
pintorig committed Nov 2, 2021
1 parent ce10ae7 commit da3e92c
Show file tree
Hide file tree
Showing 5 changed files with 55 additions and 12 deletions.
4 changes: 4 additions & 0 deletions ear/src/main/application/properties/govpay.properties
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,10 @@ it.govpay.modello1.timeoutPagamento=${it.govpay.modello1.timeoutPagamento}
# Controllo se ci sono RPT attivate per lo IUV verificato/attivato nell'intervallo di minuti indicato (indicare il numero di minuti di vita dell'RPT oppure false per non effettuare il controllo) per i pagamenti di tipo 3
it.govpay.modello3.timeoutPagamento=${it.govpay.modello3.timeoutPagamento}

# Definisce un timeout da attendere prima dell'invio della RPT verso il nodo a fronte di una attivazione effettuata con la primitiva paaAttivaRPT o paGetPayment
# In ms: default 100 ms, massimo consentito 1000 ms, notimeout: 0 ms.
it.govpay.modello3.timeoutInvioRPT=${it.govpay.modello3.timeoutInvioRPT}

# Controllo se ci sono RPT attivate per lo IUV verificato/attivato nell'intervallo di minuti indicato (indicare il numero di minuti di vita dell'RPT)
# per i pagamenti di tipo 3 per le nuove SANP 2.4.2, il numero di minuti deve essere compreso tra 1 e 30
it.govpay.modello3.sanp24.timeoutPagamento=${it.govpay.modello3.sanp24.timeoutPagamento}
Expand Down
42 changes: 31 additions & 11 deletions jars/core/src/main/java/it/govpay/core/utils/GovpayConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,8 @@ public static GovpayConfig newInstance(InputStream is) throws Exception {

private Integer timeoutPendentiModello3_SANP_24_Mins;

private Integer timeoutInvioRPTModello3Millis;

private Properties[] props;
private IConservazione conservazionePlugin;

Expand Down Expand Up @@ -176,6 +178,7 @@ public GovpayConfig(InputStream is) throws Exception {
this.timeoutPendentiModello1 = false;
this.timeoutPendentiModello1Mins = null;
this.timeoutPendentiModello3_SANP_24_Mins = 30;
this.timeoutInvioRPTModello3Millis = 100;

this.appName = null;
this.ambienteDeploy = null;
Expand Down Expand Up @@ -443,7 +446,7 @@ public void readProperties() throws Exception {
try{
this.timeoutBatch = Integer.parseInt(timeoutBatchString) * 1000;
} catch(Throwable t) {
log.info("Proprieta \"it.govpay.timeoutBatch\" impostata com valore di default (5 minuti)");
log.info("Proprieta \"it.govpay.timeoutBatch\" impostata con valore di default (5 minuti)");
this.timeoutBatch = 5 * 60 * 1000;
}

Expand Down Expand Up @@ -547,15 +550,15 @@ public void readProperties() throws Exception {
try {
this.intervalloControlloRptPendenti = Integer.parseInt(intervalloControlloRptPendentiString);
} catch(Throwable t) {
log.info("Proprieta \"it.govpay.recuperoRptPendenti.intervalloControlloCreazioneRpt\" impostata com valore di default (100000)");
log.info("Proprieta \"it.govpay.recuperoRptPendenti.intervalloControlloCreazioneRpt\" impostata con valore di default (100000)");
this.intervalloControlloRptPendenti = 100000;
}

String intervalloDisponibilitaPagamentoUtenzaAnonimaString = getProperty("it.govpay.autenticazione.utenzaAnonima.intervalloDisponibilitaPagamento", props, false, log);
try {
this.intervalloDisponibilitaPagamentoUtenzaAnonima = Integer.parseInt(intervalloDisponibilitaPagamentoUtenzaAnonimaString);
} catch(Throwable t) {
log.info("Proprieta \"it.govpay.autenticazione.utenzaAnonima.intervalloDisponibilitaPagamento\" impostata com valore di default (60) minuti");
log.info("Proprieta \"it.govpay.autenticazione.utenzaAnonima.intervalloDisponibilitaPagamento\" impostata con valore di default (60) minuti");
this.intervalloDisponibilitaPagamentoUtenzaAnonima = 60;
}

Expand Down Expand Up @@ -605,15 +608,15 @@ public void readProperties() throws Exception {
try{
this.batchCaricamentoTracciatiNumeroVersamentiDaCaricarePerThread = Integer.parseInt(numeroVersamentiPerThreadString);
} catch(Throwable t) {
log.info("Proprieta \"it.govpay.batch.caricamentoTracciati.numeroVersamentiPerThread\" impostata com valore di default 100");
log.info("Proprieta \"it.govpay.batch.caricamentoTracciati.numeroVersamentiPerThread\" impostata con valore di default 100");
this.batchCaricamentoTracciatiNumeroVersamentiDaCaricarePerThread = 100;
}

String numeroStampePerThreadString = getProperty("it.govpay.batch.caricamentoTracciati.numeroAvvisiDaStamparePerThread", this.props, false, log);
try{
this.batchCaricamentoTracciatiNumeroAvvisiDaStamparePerThread = Integer.parseInt(numeroStampePerThreadString);
} catch(Throwable t) {
log.info("Proprieta \"it.govpay.batch.caricamentoTracciati.numeroAvvisiDaStamparePerThread\" impostata com valore di default 100");
log.info("Proprieta \"it.govpay.batch.caricamentoTracciati.numeroAvvisiDaStamparePerThread\" impostata con valore di default 100");
this.batchCaricamentoTracciatiNumeroAvvisiDaStamparePerThread = 100;
}

Expand All @@ -628,7 +631,7 @@ public void readProperties() throws Exception {
try{
this.dimensioneMassimaListaRisultati = Integer.parseInt(dimensioneMassimaListaRisultatiString);
} catch(Throwable t) {
log.info("Proprieta \"it.govpay.api.find.maxRisultatiPerPagina\" impostata com valore di default "+ BasicFindRequestDTO.DEFAULT_MAX_LIMIT);
log.info("Proprieta \"it.govpay.api.find.maxRisultatiPerPagina\" impostata con valore di default "+ BasicFindRequestDTO.DEFAULT_MAX_LIMIT);
this.dimensioneMassimaListaRisultati = BasicFindRequestDTO.DEFAULT_MAX_LIMIT;
}

Expand All @@ -644,46 +647,60 @@ public void readProperties() throws Exception {
try{
this.connectionTimeout = Integer.parseInt(connectTimeoutString);
} catch(Throwable t) {
log.info("Proprieta \"it.govpay.client.connectionTimeout\" impostata com valore di default 10000");
log.info("Proprieta \"it.govpay.client.connectionTimeout\" impostata con valore di default 10000");
this.connectionTimeout = 10000;
}

String readTimeoutString = getProperty("it.govpay.client.readTimeout", this.props, false, log);
try{
this.readTimeout = Integer.parseInt(readTimeoutString);
} catch(Throwable t) {
log.info("Proprieta \"it.govpay.client.readTimeout\" impostata com valore di default 180000");
log.info("Proprieta \"it.govpay.client.readTimeout\" impostata con valore di default 180000");
this.readTimeout = 180000;
}

String connectionRequestTimeoutString = getProperty("it.govpay.client.connectionRequestTimeout", this.props, false, log);
try{
this.connectionRequestTimeout = Integer.parseInt(connectionRequestTimeoutString);
} catch(Throwable t) {
log.info("Proprieta \"it.govpay.client.connectionTimeout\" impostata com valore di default 180000");
log.info("Proprieta \"it.govpay.client.connectionTimeout\" impostata con valore di default 180000");
this.connectionRequestTimeout = 10000;
}

String numeroMassimoConnessioniPerPoolString = getProperty("it.govpay.client.numeroMassimoConnessioniPerPool", this.props, false, log);
try{
this.numeroMassimoConnessioniPerPool = Integer.parseInt(numeroMassimoConnessioniPerPoolString);
} catch(Throwable t) {
log.info("Proprieta \"it.govpay.client.numeroMassimoConnessioniPerPool\" impostata com valore di default 200");
log.info("Proprieta \"it.govpay.client.numeroMassimoConnessioniPerPool\" impostata con valore di default 200");
this.numeroMassimoConnessioniPerPool = 200;
}

String numeroMassimoConnessioniPerRouteDefaultString = getProperty("it.govpay.client.numeroMassimoConnessioniPerRouteDefault", this.props, false, log);
try{
this.numeroMassimoConnessioniPerPool = Integer.parseInt(numeroMassimoConnessioniPerRouteDefaultString);
} catch(Throwable t) {
log.info("Proprieta \"it.govpay.client.numeroMassimoConnessioniPerRouteDefault\" impostata com valore di default 20");
log.info("Proprieta \"it.govpay.client.numeroMassimoConnessioniPerRouteDefault\" impostata con valore di default 20");
this.numeroMassimoConnessioniPerRouteDefault = 20;
}

String aggiornamentoValiditaMandatorioString = getProperty("it.govpay.context.aggiornamentoValiditaMandatorio", this.props, false, log);
if(aggiornamentoValiditaMandatorioString != null && Boolean.valueOf(aggiornamentoValiditaMandatorioString))
this.aggiornamentoValiditaMandatorio = true;

String timeoutInvioRPTModello3MillisString = getProperty("it.govpay.modello3.timeoutInvioRPT", this.props, false, log);
try{
this.timeoutInvioRPTModello3Millis = Integer.parseInt(timeoutInvioRPTModello3MillisString);

if(this.timeoutInvioRPTModello3Millis < 0 || this.timeoutInvioRPTModello3Millis > 1000) {
log.info("Proprieta \"it.govpay.modello3.timeoutInvioRPT\" trovata con valore non valido ["+this.timeoutInvioRPTModello3Millis+"], viene impostata con valore di default 100 ms");
this.timeoutInvioRPTModello3Millis = 100;
}

} catch(Throwable t) {
log.info("Proprieta \"it.govpay.modello3.timeoutInvioRPT\" impostata con valore di default 100 ms");
this.timeoutInvioRPTModello3Millis = 100;
}

} catch (Exception e) {
log.error("Errore di inizializzazione: " + e.getMessage());
throw e;
Expand Down Expand Up @@ -1035,4 +1052,7 @@ public Integer getNumeroMassimoConnessioniPerRouteDefault() {
return numeroMassimoConnessioniPerRouteDefault;
}

public Integer getTimeoutInvioRPTModello3Millis() {
return timeoutInvioRPTModello3Millis;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@
import it.govpay.core.business.model.Risposta;
import it.govpay.core.exceptions.GovPayException;
import it.govpay.core.utils.EventoContext.Esito;
import it.govpay.core.utils.GovpayConfig;
import it.govpay.core.utils.GpContext;
import it.govpay.core.utils.RptUtils;
import it.govpay.core.utils.client.exception.ClientException;
Expand Down Expand Up @@ -112,6 +113,14 @@ public void run() {
client.getEventoCtx().setIdPagamento(this.pagamentoPortale.getIdSessione());

RptUtils.popolaEventoCooperazione(client, this.rpt, this.intermediario, this.stazione);

Integer timeoutInvioRPTModello3Millis = GovpayConfig.getInstance().getTimeoutInvioRPTModello3Millis();

if(timeoutInvioRPTModello3Millis > 0) {
log.debug("Invio dell'RPT in pausa per "+ timeoutInvioRPTModello3Millis + " ms...");
Thread.sleep(timeoutInvioRPTModello3Millis);
log.debug("Invio dell'RPT: ripresa esecuzione");
}

NodoInviaRPT inviaRPT = new NodoInviaRPT();
inviaRPT.setIdentificativoCanale(this.rpt.getCodCanale());
Expand Down Expand Up @@ -189,7 +198,7 @@ public void run() {
} catch (UtilsException e1) {
log.error("Errore durante il log dell'operazione: " + e.getMessage(), e);
}
} catch (NotFoundException | ServiceException | GovPayException | UtilsException e) {
} catch (NotFoundException | ServiceException | GovPayException | UtilsException | InterruptedException e) {
log.error("Errore nella spedizione della RPT", e);
if(client != null) {
if(e instanceof GovPayException) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,11 @@ it.govpay.recuperoRptPendenti.intervalloControlloCreazioneRpt=30
# Imposta il numero di minuti che devono passare prima di attivare una nuova transazione di pagamento se la precedente non e' ancora conclusa (false: disabilita, 0: attende idefinitamente)
it.govpay.modello1.timeoutPagamento=0
it.govpay.modello3.timeoutPagamento=0

# Definisce un timeout da attendere prima dell'invio della RPT verso il nodo a fronte di una attivazione effettuata con la primitiva paaAttivaRPT o paGetPayment
# In ms: default 100 ms, massimo consentito 1000 ms, notimeout: 0 ms.
it.govpay.modello3.timeoutInvioRPT=100

# Controllo se ci sono RPT attivate per lo IUV verificato/attivato nell'intervallo di minuti indicato (indicare il numero di minuti di vita dell'RPT)
# per i pagamenti di tipo 3 per le nuove SANP 2.4.2, il numero di minuti deve essere compreso tra 1 e 30
it.govpay.modello3.sanp24.timeoutPagamento=30
Expand Down
5 changes: 5 additions & 0 deletions src/main/resources/filters/template.filter.properties
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,11 @@ it.govpay.recuperoRptPendenti.intervalloControlloCreazioneRpt=30
# Imposta il numero di minuti che devono passare prima di attivare una nuova transazione di pagamento se la precedente non e' ancora conclusa (false: disabilita, 0: attende idefinitamente)
it.govpay.modello1.timeoutPagamento=10
it.govpay.modello3.timeoutPagamento=5

# Definisce un timeout da attendere prima dell'invio della RPT verso il nodo a fronte di una attivazione effettuata con la primitiva paaAttivaRPT o paGetPayment
# In ms: default 100 ms, massimo consentito 1000 ms, notimeout: 0 ms.
it.govpay.modello3.timeoutInvioRPT=100

# Controllo se ci sono RPT attivate per lo IUV verificato/attivato nell'intervallo di minuti indicato (indicare il numero di minuti di vita dell'RPT)
# per i pagamenti di tipo 3 per le nuove SANP 2.4.2, il numero di minuti deve essere compreso tra 1 e 30
it.govpay.modello3.sanp24.timeoutPagamento=30
Expand Down

0 comments on commit da3e92c

Please sign in to comment.