TimerConsegnaContenutiApplicativiSender.java

  1. /*
  2.  * GovWay - A customizable API Gateway
  3.  * https://govway.org
  4.  *
  5.  * Copyright (c) 2005-2025 Link.it srl (https://link.it).
  6.  *
  7.  * This program is free software: you can redistribute it and/or modify
  8.  * it under the terms of the GNU General Public License version 3, as published by
  9.  * the Free Software Foundation.
  10.  *
  11.  * This program is distributed in the hope that it will be useful,
  12.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14.  * GNU General Public License for more details.
  15.  *
  16.  * You should have received a copy of the GNU General Public License
  17.  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  18.  *
  19.  */

  20. package org.openspcoop2.pdd.timers;

  21. import java.sql.Timestamp;
  22. import java.util.Date;

  23. import org.apache.commons.lang.StringUtils;
  24. import org.openspcoop2.core.config.GestioneErrore;
  25. import org.openspcoop2.core.config.PortaApplicativa;
  26. import org.openspcoop2.core.config.PortaApplicativaServizioApplicativo;
  27. import org.openspcoop2.core.config.ServizioApplicativo;
  28. import org.openspcoop2.core.id.IDAccordo;
  29. import org.openspcoop2.core.id.IDPortaApplicativa;
  30. import org.openspcoop2.core.id.IDServizio;
  31. import org.openspcoop2.core.id.IDServizioApplicativo;
  32. import org.openspcoop2.core.id.IDSoggetto;
  33. import org.openspcoop2.core.registry.AccordoServizioParteSpecifica;
  34. import org.openspcoop2.core.registry.PortaDominio;
  35. import org.openspcoop2.core.registry.driver.IDAccordoFactory;
  36. import org.openspcoop2.core.registry.driver.IDServizioFactory;
  37. import org.openspcoop2.core.transazioni.IdTransazioneApplicativoServer;
  38. import org.openspcoop2.pdd.config.ConfigurazioneCoda;
  39. import org.openspcoop2.pdd.config.ConfigurazionePdDManager;
  40. import org.openspcoop2.pdd.config.OpenSPCoop2Properties;
  41. import org.openspcoop2.pdd.config.RichiestaApplicativa;
  42. import org.openspcoop2.pdd.core.CostantiPdD;
  43. import org.openspcoop2.pdd.core.GestoreMessaggi;
  44. import org.openspcoop2.pdd.core.MessaggioServizioApplicativo;
  45. import org.openspcoop2.pdd.core.PdDContext;
  46. import org.openspcoop2.pdd.core.behaviour.BehaviourForwardToConfiguration;
  47. import org.openspcoop2.pdd.core.behaviour.StatoFunzionalita;
  48. import org.openspcoop2.pdd.core.behaviour.built_in.multi_deliver.ConfigurazioneGestioneConsegnaNotifiche;
  49. import org.openspcoop2.pdd.core.behaviour.built_in.multi_deliver.GestioneConsegnaNotificheUtils;
  50. import org.openspcoop2.pdd.core.behaviour.built_in.multi_deliver.MultiDeliverUtils;
  51. import org.openspcoop2.pdd.core.state.OpenSPCoopStateDBManager;
  52. import org.openspcoop2.pdd.core.state.OpenSPCoopStateful;
  53. import org.openspcoop2.pdd.logger.MsgDiagnosticiProperties;
  54. import org.openspcoop2.pdd.logger.MsgDiagnostico;
  55. import org.openspcoop2.pdd.logger.OpenSPCoop2Logger;
  56. import org.openspcoop2.pdd.mdb.ConsegnaContenutiApplicativi;
  57. import org.openspcoop2.pdd.mdb.ConsegnaContenutiApplicativiBehaviourMessage;
  58. import org.openspcoop2.pdd.mdb.ConsegnaContenutiApplicativiMessage;
  59. import org.openspcoop2.pdd.mdb.EsitoLib;
  60. import org.openspcoop2.protocol.engine.ProtocolFactoryManager;
  61. import org.openspcoop2.protocol.engine.constants.Costanti;
  62. import org.openspcoop2.protocol.engine.driver.RepositoryBuste;
  63. import org.openspcoop2.protocol.registry.RegistroServiziManager;
  64. import org.openspcoop2.protocol.sdk.Busta;
  65. import org.openspcoop2.protocol.sdk.IProtocolFactory;
  66. import org.openspcoop2.protocol.sdk.state.RequestConfig;
  67. import org.openspcoop2.protocol.sdk.state.RequestInfo;
  68. import org.openspcoop2.utils.UtilsException;
  69. import org.openspcoop2.utils.date.DateManager;
  70. import org.openspcoop2.utils.threads.IRunnableInstance;
  71. import org.openspcoop2.utils.threads.RunnableLogger;

  72. /**
  73.  * Timer che si occupa di re-inoltrare i messaggi in riconsegna
  74.  *
  75.  *  
  76.  * @author Poli Andrea (apoli@link.it)
  77.  * @author $Author$
  78.  * @version $Rev$, $Date$
  79.  */
  80. public class TimerConsegnaContenutiApplicativiSender implements IRunnableInstance{

  81.     private OpenSPCoop2Properties propertiesReader = null;
  82.     private RegistroServiziManager registroServiziReader;
  83.     private ConfigurazionePdDManager configurazionePdDReader;
  84.    
  85.     private MessaggioServizioApplicativo messaggioServizioApplicativo;
  86.    
  87.     private RunnableLogger log;
  88.     private RunnableLogger logSql;
  89.     private boolean debug;
  90.    
  91.     private String clusterId;
  92.    
  93.     private int minTimeoutResend;
  94.    
  95.     public TimerConsegnaContenutiApplicativiSender(MessaggioServizioApplicativo messaggioServizioApplicativo,
  96.             RegistroServiziManager registroServiziReader,
  97.             ConfigurazionePdDManager configurazionePdDReader,
  98.             String clusterId, ConfigurazioneCoda configurazioneCoda) {
  99.         this.messaggioServizioApplicativo = messaggioServizioApplicativo;
  100.         this.propertiesReader = OpenSPCoop2Properties.getInstance();
  101.         this.registroServiziReader = registroServiziReader;
  102.         this.configurazionePdDReader = configurazionePdDReader;
  103.         this.debug = configurazioneCoda.isDebug();
  104.         this.clusterId = clusterId;
  105.         this.minTimeoutResend = configurazioneCoda.getConsegnaFallita_intervalloMinimoRiconsegna();
  106.     }
  107.    
  108.     @Override
  109.     public String getIdentifier() {
  110.         return "("+this.messaggioServizioApplicativo.getIdTransazione()+"_"+this.messaggioServizioApplicativo.getServizioApplicativo()+"_"+this.messaggioServizioApplicativo.getIdMessaggio()+")";
  111.     }
  112.    
  113.     @Override
  114.     public boolean isContinuousRunning() {
  115.         return false; // deve effettuare solamente una consegna
  116.     }
  117.    
  118.     @Override
  119.     public void initialize(RunnableLogger log) throws UtilsException{
  120.         this.log = log;
  121.         this.logSql = new RunnableLogger(log.getThreadName(),  
  122.                 OpenSPCoop2Logger.getLoggerOpenSPCoopConsegnaContenutiSql(this.debug));
  123.     }
  124.    
  125.    
  126.     @Override
  127.     public void check() throws UtilsException {
  128.        
  129.         String idTransazione = this.messaggioServizioApplicativo.getIdTransazione();
  130.         String servizioApplicativo = this.messaggioServizioApplicativo.getServizioApplicativo();
  131.         String idMsgDaInoltrare = this.messaggioServizioApplicativo.getIdMessaggio();
  132.         String identificativo = "redelivery_"+idTransazione+"_"+servizioApplicativo+"_"+idMsgDaInoltrare;
  133.         Date oraRegistrazione = this.messaggioServizioApplicativo.getOraRegistrazione();
  134.        
  135.         MsgDiagnostico msgDiag = MsgDiagnostico.newInstance(TimerConsegnaContenutiApplicativiThread.ID_MODULO);
  136.         PdDContext pddContext = new PdDContext();
  137.         pddContext.addObject(org.openspcoop2.core.constants.Costanti.ID_TRANSAZIONE, idTransazione);
  138.         msgDiag.setPrefixMsgPersonalizzati(MsgDiagnosticiProperties.MSG_DIAG_TIMER_CONSEGNA_CONTENUTI_APPLICATIVI);
  139.         msgDiag.addKeyword(CostantiPdD.KEY_TIPO_MESSAGGIO,Costanti.INBOX);
  140.         msgDiag.addKeyword(CostantiPdD.KEY_ID_MESSAGGIO_DA_INOLTRARE,idMsgDaInoltrare);
  141.         msgDiag.addKeyword(CostantiPdD.KEY_SA_EROGATORE,servizioApplicativo);
  142.        
  143.         OpenSPCoopStateful openspcoopstateGestore = new OpenSPCoopStateful();
  144.         try {

  145.             this.log.debug("Riconsegna in corso del messaggio '"+idMsgDaInoltrare+"' per l'applicativo '"+servizioApplicativo+"' ...");
  146.            
  147.             openspcoopstateGestore.initResource(this.propertiesReader.getIdentitaPortaDefaultWithoutProtocol(),TimerConsegnaContenutiApplicativiThread.ID_MODULO, identificativo,
  148.                     OpenSPCoopStateDBManager.consegnePreseInCarico);
  149.                
  150.             GestoreMessaggi messaggioDaInviare = null;
  151.             try{
  152.    
  153.                 // FASE 1 PREPARAZIONE
  154.                
  155.                 RepositoryBuste repositoryBuste = new RepositoryBuste(openspcoopstateGestore.getStatoRichiesta(), true,null);
  156.                 Busta bustaToSend = repositoryBuste.getBustaFromInBox(idMsgDaInoltrare, true);
  157.                 msgDiag.addKeywords(bustaToSend, true);
  158.    
  159.                 IProtocolFactory<?> protocolFactory = ProtocolFactoryManager.getInstance().getProtocolFactoryByName(bustaToSend.getProtocollo());
  160.    
  161.                 // Per ottimizzare le chiamate
  162.                 RequestInfo requestInfoForMemoryOptimization = new RequestInfo();
  163.                 requestInfoForMemoryOptimization.setProtocolFactory(protocolFactory);
  164.                 msgDiag.updateRequestInfo(requestInfoForMemoryOptimization);
  165.                
  166.                 messaggioDaInviare = new GestoreMessaggi(openspcoopstateGestore,true,idMsgDaInoltrare,Costanti.INBOX,
  167.                         this.logSql.getLog(),msgDiag,null);
  168.                 pddContext = messaggioDaInviare.getPdDContext(true); // aggiorno anche l'istanza dentro l'oggetto messaggioDaInviare stesso.
  169.    
  170.                 pddContext.addObject(org.openspcoop2.core.constants.Costanti.REQUEST_INFO, requestInfoForMemoryOptimization);
  171.                 pddContext.addObject(org.openspcoop2.core.constants.Costanti.REQUEST_INFO_IN_MEMORY, true);
  172.                
  173.                 IDSoggetto soggettoFruitore = null;
  174.                 if(bustaToSend.getMittente()!=null) {
  175.                     soggettoFruitore = new IDSoggetto(bustaToSend.getTipoMittente(),
  176.                             bustaToSend.getMittente());
  177.                 }
  178.    
  179.                 IDServizio servizioBusta = IDServizioFactory.getInstance().getIDServizioFromValues(bustaToSend.getTipoServizio(),
  180.                         bustaToSend.getServizio(),
  181.                         bustaToSend.getTipoDestinatario(),
  182.                         bustaToSend.getDestinatario(),
  183.                         bustaToSend.getVersioneServizio());
  184.                 if(servizioBusta!=null) {
  185.                     servizioBusta.setAzione(bustaToSend.getAzione());
  186.                 }
  187.                
  188.                 // Set identità soggetti erogatori usati poi successivamente
  189.                 requestInfoForMemoryOptimization.setRequestConfig(new RequestConfig());
  190.                 if(servizioBusta!=null && servizioBusta.getSoggettoErogatore()!=null) {
  191.                     requestInfoForMemoryOptimization.getRequestConfig().setIdServizio(servizioBusta);
  192.                     try{
  193.                         org.openspcoop2.core.registry.Soggetto soggettoRegistry = this.registroServiziReader.getSoggetto(servizioBusta.getSoggettoErogatore(), null, null); // passo null volutamente, per accedere alla configurazione
  194.                         requestInfoForMemoryOptimization.getRequestConfig().setSoggettoErogatoreRegistry(soggettoRegistry);
  195.                     }catch(Exception e){
  196.                         this.log.getLog().debug("Recupero soggetto erogatore dal registro fallito: "+e.getMessage(),e);
  197.                     }
  198.                     try{
  199.                         org.openspcoop2.core.config.Soggetto soggettoConfig = this.configurazionePdDReader.getSoggetto(servizioBusta.getSoggettoErogatore(), null); // passo null volutamente, per accedere alla configurazione
  200.                         requestInfoForMemoryOptimization.getRequestConfig().setSoggettoErogatoreConfig(soggettoConfig);
  201.                     }catch(Exception e){
  202.                         this.log.getLog().debug("Recupero soggetto erogatore dal registro fallito: "+e.getMessage(),e);
  203.                     }
  204.                     try{
  205.                         String idPorta = this.configurazionePdDReader.getIdentificativoPorta(servizioBusta.getSoggettoErogatore(), protocolFactory, null); // passo null volutamente, per accedere alla configurazione
  206.                         requestInfoForMemoryOptimization.getRequestConfig().setSoggettoErogatoreIdentificativoPorta(idPorta);
  207.                     }catch(Exception e){
  208.                         this.log.getLog().debug("Recupero dati soggetto erogatore (identificativoPorta) dal registro fallito: "+e.getMessage(),e);
  209.                     }
  210.                     try{
  211.                         if(requestInfoForMemoryOptimization.getRequestConfig().getSoggettoErogatoreRegistry()!=null) {
  212.                             if(requestInfoForMemoryOptimization.getRequestConfig().getSoggettoErogatoreRegistry().getPortaDominio()!=null &&
  213.                                     StringUtils.isNotEmpty(requestInfoForMemoryOptimization.getRequestConfig().getSoggettoErogatoreRegistry().getPortaDominio())) {
  214.                                 PortaDominio pdd = this.registroServiziReader.getPortaDominio(requestInfoForMemoryOptimization.getRequestConfig().getSoggettoErogatoreRegistry().getPortaDominio(), null, null); // passo null volutamente, per accedere alla configurazione
  215.                                 requestInfoForMemoryOptimization.getRequestConfig().setSoggettoErogatorePddReaded(true);
  216.                                 requestInfoForMemoryOptimization.getRequestConfig().setSoggettoErogatorePdd(pdd);
  217.                             }
  218.                             else {
  219.                                 requestInfoForMemoryOptimization.getRequestConfig().setSoggettoErogatorePddReaded(true);
  220.                             }
  221.                         }
  222.                     }catch(Exception e){
  223.                         this.log.getLog().debug("Recupero dati soggetto erogatore (pdd) dal registro fallito: "+e.getMessage(),e);
  224.                     }
  225.                 }
  226.    
  227.                 String implementazioneDestinatario = this.registroServiziReader.getImplementazionePdD(new IDSoggetto(bustaToSend.getTipoDestinatario(),bustaToSend.getDestinatario()), null, requestInfoForMemoryOptimization);
  228.                 requestInfoForMemoryOptimization.getRequestConfig().setSoggettoErogatoreImplementazionePdd(implementazioneDestinatario);
  229.                
  230.                 String implementazioneMittente = null;
  231.                 if(bustaToSend.getTipoMittente()!=null && bustaToSend.getMittente()!=null) {
  232.                     implementazioneMittente = this.registroServiziReader.getImplementazionePdD(new IDSoggetto(bustaToSend.getTipoMittente(),bustaToSend.getMittente()), null, requestInfoForMemoryOptimization);
  233.                     requestInfoForMemoryOptimization.getRequestConfig().setSoggettoFruitoreImplementazionePdd(implementazioneMittente);
  234.                 }
  235.                
  236.                 IDAccordo idAccordo = null;
  237.                 AccordoServizioParteSpecifica asps = null;
  238.                 try{
  239.                     asps = this.registroServiziReader.getAccordoServizioParteSpecifica(servizioBusta, null, false, requestInfoForMemoryOptimization);
  240.                     idAccordo = IDAccordoFactory.getInstance().getIDAccordoFromUri(asps.getAccordoServizioParteComune());
  241.                     requestInfoForMemoryOptimization.getRequestConfig().setAsps(asps);
  242.                 }catch(Exception e){
  243.                     msgDiag.logErroreGenerico(e,"ConsegnaAsincrona getAccordoServizioParteSpecifica("+servizioBusta+")");
  244.                 }
  245.                    
  246.                 IDSoggetto identitaPdD = null;
  247.                 String dominioRD = null;
  248.                 try{
  249.                     if(servizioBusta!=null) {
  250.                         dominioRD = this.configurazionePdDReader.getIdentificativoPorta(servizioBusta.getSoggettoErogatore(),protocolFactory, requestInfoForMemoryOptimization);
  251.                     }
  252.                     if(dominioRD==null){
  253.                         throw new Exception("Dominio is null");
  254.                     }
  255.                 }catch(Exception e){
  256.                     msgDiag.logErroreGenerico(e,"ConsegnaAsincrona getDominio("+servizioBusta.getSoggettoErogatore()+")");
  257.                 }
  258.                 if(dominioRD==null){
  259.                     identitaPdD = this.propertiesReader.getIdentitaPortaDefault(null, requestInfoForMemoryOptimization);
  260.                 }else{
  261.                     identitaPdD = new IDSoggetto(bustaToSend.getTipoDestinatario(),
  262.                             bustaToSend.getDestinatario(),dominioRD);
  263.                 }
  264.                 requestInfoForMemoryOptimization.setIdentitaPdD(identitaPdD);
  265.                 requestInfoForMemoryOptimization.setIdServizio(servizioBusta);
  266.                 requestInfoForMemoryOptimization.setFruitore(soggettoFruitore);
  267.                    
  268.                 IDPortaApplicativa idPA = this.configurazionePdDReader.getIDPortaApplicativa(this.messaggioServizioApplicativo.getNomePorta(), requestInfoForMemoryOptimization, protocolFactory);
  269.                 requestInfoForMemoryOptimization.getRequestConfig().setIdPortaApplicativa(idPA);
  270.                 RichiestaApplicativa richiestaApplicativa = new RichiestaApplicativa(soggettoFruitore, identitaPdD, idPA);
  271.                 richiestaApplicativa.setServizioApplicativo(servizioApplicativo);
  272.                 richiestaApplicativa.setIdentitaServizioApplicativoFruitore(bustaToSend.getServizioApplicativoFruitore());
  273.                 richiestaApplicativa.setIdAccordo(idAccordo);
  274.    
  275.                 if(servizioBusta!=null) {
  276.                     IDServizioApplicativo idSA = new IDServizioApplicativo();
  277.                     idSA.setNome(richiestaApplicativa.getServizioApplicativo());
  278.                     idSA.setIdSoggettoProprietario(servizioBusta.getSoggettoErogatore());
  279.                     try {
  280.                         ServizioApplicativo sa = this.configurazionePdDReader.getServizioApplicativo(idSA, requestInfoForMemoryOptimization);
  281.                         requestInfoForMemoryOptimization.getRequestConfig().addServizioApplicativoErogatore(sa, idTransazione);
  282.                     }catch(Exception e){
  283.                         this.log.getLog().debug("Recupero dati soggetto erogatore (pdd) dal registro fallito: "+e.getMessage(),e);
  284.                     }
  285.                 }
  286.                
  287.                 ConsegnaContenutiApplicativiMessage consegnaMSG = new ConsegnaContenutiApplicativiMessage();
  288.                 consegnaMSG.setBusta(bustaToSend);
  289.                 consegnaMSG.setOneWayVersione11(false);
  290.                 consegnaMSG.setStateless(true);
  291.                 consegnaMSG.setImplementazionePdDSoggettoMittente(implementazioneMittente);
  292.                 consegnaMSG.setImplementazionePdDSoggettoDestinatario(implementazioneDestinatario);
  293.                 consegnaMSG.setPddContext(pddContext);
  294.                 consegnaMSG.setRichiestaApplicativa(richiestaApplicativa);
  295.                
  296.                 BehaviourForwardToConfiguration behaviourForwardToConfiguration = new BehaviourForwardToConfiguration();
  297.                 if(this.messaggioServizioApplicativo.isSbustamentoSoap())
  298.                     behaviourForwardToConfiguration.setSbustamentoSoap(StatoFunzionalita.ABILITATA);
  299.                 else
  300.                     behaviourForwardToConfiguration.setSbustamentoSoap(StatoFunzionalita.DISABILITATA);
  301.                 if(this.messaggioServizioApplicativo.isSbustamentoInformazioniProtocollo())
  302.                     behaviourForwardToConfiguration.setSbustamentoInformazioniProtocollo(StatoFunzionalita.ABILITATA);
  303.                 else
  304.                     behaviourForwardToConfiguration.setSbustamentoInformazioniProtocollo(StatoFunzionalita.DISABILITATA);
  305.                
  306.                 ConsegnaContenutiApplicativiBehaviourMessage behaviourMsg = new ConsegnaContenutiApplicativiBehaviourMessage();
  307.                 behaviourMsg.setIdMessaggioPreBehaviour(bustaToSend.getRiferimentoMessaggio());
  308.                 behaviourMsg.setBehaviourForwardToConfiguration(behaviourForwardToConfiguration);
  309.                 IdTransazioneApplicativoServer idTransazioneApplicativoServer = new IdTransazioneApplicativoServer();
  310.                 idTransazioneApplicativoServer.setIdTransazione(PdDContext.getValue(org.openspcoop2.core.constants.Costanti.ID_TRANSAZIONE, pddContext));
  311.                 idTransazioneApplicativoServer.setServizioApplicativoErogatore(servizioApplicativo);
  312.                 PortaApplicativa pa = this.configurazionePdDReader.getPortaApplicativaSafeMethod(idPA, requestInfoForMemoryOptimization);
  313.                 requestInfoForMemoryOptimization.getRequestConfig().setPortaApplicativa(pa);
  314.                 if(pa!=null && pa.getServizioApplicativoList()!=null) {
  315.                     for (PortaApplicativaServizioApplicativo pasa : pa.getServizioApplicativoList()) {
  316.                         if(pasa.getNome().equals(servizioApplicativo)) {
  317.                             if(pasa.getDatiConnettore()!=null) {
  318.                                 idTransazioneApplicativoServer.setConnettoreNome(pasa.getDatiConnettore().getNome());
  319.                             }
  320.                             ConfigurazioneGestioneConsegnaNotifiche configGestioneConsegna = MultiDeliverUtils.read(pasa);
  321.                             GestioneErrore gestioneErroreBehaviour = GestioneConsegnaNotificheUtils.toGestioneErrore(configGestioneConsegna);      
  322.                             behaviourMsg.setGestioneErrore(gestioneErroreBehaviour);
  323.                             break;
  324.                         }
  325.                     }
  326.                 }
  327.                 behaviourMsg.setIdTransazioneApplicativoServer(idTransazioneApplicativoServer);
  328.                 behaviourMsg.setOraRegistrazioneTransazioneApplicativoServer(oraRegistrazione);
  329.                 consegnaMSG.setBehaviour(behaviourMsg);
  330.                
  331.                
  332.                 // FASE 2 SPEDIZIONE
  333.                
  334.                 // rilasco connessione gestore
  335.                 openspcoopstateGestore.releaseResource();
  336.                
  337.                 EsitoLib result = null;
  338.                 OpenSPCoopStateful openspcoopstateMessaggio = null;
  339.                 try {
  340.                     ConsegnaContenutiApplicativi lib = new ConsegnaContenutiApplicativi(OpenSPCoop2Logger.getLoggerOpenSPCoopCore());
  341.                     openspcoopstateMessaggio = new OpenSPCoopStateful();
  342.                     // viene inizializzata dentro il modulo ConsegnaContenutiApplicativi
  343.                     //openspcoopstateMessaggio.initResource(identitaPdD,TimerConsegnaContenutiApplicativiThread.ID_MODULO, bustaToSend.getID());
  344.                     openspcoopstateMessaggio.setMessageLib(consegnaMSG);
  345.                     result = lib.onMessage(openspcoopstateMessaggio);
  346.                 }finally {
  347.                     try{
  348.                         if(openspcoopstateMessaggio!=null && !openspcoopstateMessaggio.resourceReleased()){
  349.                             openspcoopstateMessaggio.releaseResource();
  350.                         }
  351.                     }catch(Exception e){}
  352.                    
  353.                     // riprendo connessione gestore
  354.                     openspcoopstateGestore.updateResource(identificativo);
  355.                     messaggioDaInviare.updateOpenSPCoopState(openspcoopstateGestore);
  356.                 }
  357.                
  358.                
  359.                
  360.                 if(this.debug)
  361.                     this.log.debug("Invocato ConsegnaContenutiApplicativi per ["+bustaToSend.getID()+
  362.                             "] con esito: "+result.getStatoInvocazione(),result.getErroreNonGestito());
  363.                 if(EsitoLib.ERRORE_NON_GESTITO==result.getStatoInvocazione()){
  364.                     // per evitare i loop infinito
  365.                     Timestamp tMinTimeoutResend = new Timestamp(DateManager.getTimeMillis()+(this.minTimeoutResend*1000));
  366.                     if(result.getDataRispedizioneAggiornata()==null || result.getDataRispedizioneAggiornata().before(tMinTimeoutResend)){
  367.                         messaggioDaInviare.aggiornaDataRispedizione(tMinTimeoutResend, servizioApplicativo);
  368.                     }
  369.                     if(result.isErroreProcessamentoMessaggioAggiornato()==false){
  370.                         if(result.getErroreNonGestito()!=null){
  371.                             messaggioDaInviare.aggiornaErroreProcessamentoMessaggio("["+TimerConsegnaContenutiApplicativiThread.ID_MODULO+"] "+
  372.                                     result.getErroreNonGestito().getMessage(), servizioApplicativo);
  373.                         }
  374.                         else if(result.getMotivazioneErroreNonGestito()!=null){
  375.                             messaggioDaInviare.aggiornaErroreProcessamentoMessaggio("["+TimerConsegnaContenutiApplicativiThread.ID_MODULO+"] "+
  376.                                     result.getMotivazioneErroreNonGestito(), servizioApplicativo);
  377.                         }
  378.                         else{
  379.                             messaggioDaInviare.aggiornaErroreProcessamentoMessaggio("["+TimerConsegnaContenutiApplicativiThread.ID_MODULO+"] "+
  380.                                     "Invocato ConsegnaContenutiApplicativi per ["+bustaToSend.getID()+
  381.                                     "] con esito: "+result.getStatoInvocazione(), servizioApplicativo);
  382.                         }
  383.                     }
  384.                 }
  385.                 else{
  386.    
  387.                     msgDiag.logPersonalizzato("inoltroMessaggio");
  388.                     if(this.debug)
  389.                         this.log.debug(msgDiag.getMessaggio_replaceKeywords("inoltroMessaggio"));
  390.    
  391.                 }
  392.    
  393.             }catch(Exception e){
  394.                 msgDiag.logErroreGenerico(e,"InoltroMessaggioInbox("+idMsgDaInoltrare+")");
  395.                 this.log.error("ErroreInoltroMessaggioInbox("+idMsgDaInoltrare+"): "+e.getMessage(),e);
  396.                 // per evitare i loop infinito
  397.                 if(openspcoopstateGestore!=null && !openspcoopstateGestore.resourceReleased()){
  398.                     messaggioDaInviare.aggiornaDataRispedizione(new Timestamp(DateManager.getTimeMillis()+(this.minTimeoutResend*1000)), servizioApplicativo);
  399.                     messaggioDaInviare.aggiornaErroreProcessamentoMessaggio("["+TimerConsegnaContenutiApplicativiThread.ID_MODULO+"] "+e.getMessage(), servizioApplicativo);
  400.                 }
  401.             }finally{
  402.                 if(openspcoopstateGestore!=null && !openspcoopstateGestore.resourceReleased()){
  403.                     messaggioDaInviare.releaseMessaggioPresaInCosegna(servizioApplicativo, this.clusterId, this.debug, this.logSql); // può già essere stato eliminato
  404.                 }
  405.             }
  406.            
  407.             this.log.debug("Riconsegna in corso del messaggio '"+idMsgDaInoltrare+"' per l'applicativo '"+servizioApplicativo+"' terminata");
  408.         }
  409.         catch (Exception e) {
  410.             msgDiag.logErroreGenerico(e,"GestioneRiconsegnaMessaggio");
  411.             this.log.error("Riscontrato errore durante la consegna del messaggio '"+idMsgDaInoltrare+"' per l'applicativo '"+servizioApplicativo+"': "+ e.getMessage(),e);
  412.         }finally{
  413.             if(openspcoopstateGestore!=null)
  414.                 openspcoopstateGestore.releaseResource();
  415.         }
  416.     }

  417. }