TimerGestoreMessaggiLib.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.Connection;
  22. import java.util.Date;
  23. import java.util.List;

  24. import org.openspcoop2.core.config.constants.CostantiConfigurazione;
  25. import org.openspcoop2.core.id.IDPortaApplicativa;
  26. import org.openspcoop2.core.transazioni.TransazioneApplicativoServer;
  27. import org.openspcoop2.pdd.config.OpenSPCoop2Properties;
  28. import org.openspcoop2.pdd.core.CostantiPdD;
  29. import org.openspcoop2.pdd.core.GestoreCorrelazioneApplicativa;
  30. import org.openspcoop2.pdd.core.GestoreCorrelazioneApplicativaConfig;
  31. import org.openspcoop2.pdd.core.GestoreMessaggi;
  32. import org.openspcoop2.pdd.core.JMSReceiver;
  33. import org.openspcoop2.pdd.core.MessaggioServizioApplicativo;
  34. import org.openspcoop2.pdd.core.connettori.IConnettore;
  35. import org.openspcoop2.pdd.core.connettori.RepositoryConnettori;
  36. import org.openspcoop2.pdd.core.state.OpenSPCoopStateful;
  37. import org.openspcoop2.pdd.core.transazioni.GestoreConsegnaMultipla;
  38. import org.openspcoop2.pdd.logger.MsgDiagnostico;
  39. import org.openspcoop2.pdd.services.OpenSPCoop2Startup;
  40. import org.openspcoop2.pdd.services.core.RicezioneBuste;
  41. import org.openspcoop2.pdd.services.core.RicezioneContenutiApplicativi;
  42. import org.openspcoop2.protocol.engine.constants.Costanti;
  43. import org.openspcoop2.protocol.engine.driver.RollbackRepositoryBuste;
  44. import org.openspcoop2.protocol.sdk.state.StateMessage;
  45. import org.openspcoop2.utils.TipiDatabase;
  46. import org.openspcoop2.utils.Utilities;
  47. import org.openspcoop2.utils.date.DateManager;
  48. import org.openspcoop2.utils.id.serial.InfoStatistics;
  49. import org.openspcoop2.utils.semaphore.Semaphore;
  50. import org.openspcoop2.utils.semaphore.SemaphoreConfiguration;
  51. import org.openspcoop2.utils.semaphore.SemaphoreMapping;
  52. import org.slf4j.Logger;


  53. /**
  54.  * Implementazione dell'interfaccia {@link TimerGestoreMessaggi} del Gestore
  55.  * dei threads di servizio di OpenSPCoop.
  56.  *
  57.  *  
  58.  * @author Poli Andrea (apoli@link.it)
  59.  * @author $Author$
  60.  * @version $Rev$, $Date$
  61.  */

  62. public class TimerGestoreMessaggiLib  {

  63.     private static TimerState STATE_MESSAGGI_ELIMINATI = TimerState.OFF; // abilitato in OpenSPCoop2Startup al momento dell'avvio
  64.     public static TimerState getSTATE_MESSAGGI_ELIMINATI() {
  65.         return STATE_MESSAGGI_ELIMINATI;
  66.     }
  67.     public static void setSTATE_MESSAGGI_ELIMINATI(TimerState sTATE_MESSAGGI_ELIMINATI) {
  68.         STATE_MESSAGGI_ELIMINATI = sTATE_MESSAGGI_ELIMINATI;
  69.     }

  70.     private static TimerState STATE_MESSAGGI_SCADUTI = TimerState.OFF; // abilitato in OpenSPCoop2Startup al momento dell'avvio
  71.     public static TimerState getSTATE_MESSAGGI_SCADUTI() {
  72.         return STATE_MESSAGGI_SCADUTI;
  73.     }
  74.     public static void setSTATE_MESSAGGI_SCADUTI(TimerState sTATE_MESSAGGI_SCADUTI) {
  75.         STATE_MESSAGGI_SCADUTI = sTATE_MESSAGGI_SCADUTI;
  76.     }

  77.     private static TimerState STATE_MESSAGGI_NON_GESTITI = TimerState.OFF; // abilitato in OpenSPCoop2Startup al momento dell'avvio
  78.     public static TimerState getSTATE_MESSAGGI_NON_GESTITI() {
  79.         return STATE_MESSAGGI_NON_GESTITI;
  80.     }
  81.     public static void setSTATE_MESSAGGI_NON_GESTITI(TimerState sTATE_MESSAGGI_NON_GESTITI) {
  82.         STATE_MESSAGGI_NON_GESTITI = sTATE_MESSAGGI_NON_GESTITI;
  83.     }

  84.     private static TimerState STATE_CORRELAZIONE_APPLICATIVA = TimerState.OFF; // abilitato in OpenSPCoop2Startup al momento dell'avvio
  85.     public static TimerState getSTATE_CORRELAZIONE_APPLICATIVA() {
  86.         return STATE_CORRELAZIONE_APPLICATIVA;
  87.     }
  88.     public static void setSTATE_CORRELAZIONE_APPLICATIVA(TimerState sTATE_CORRELAZIONE_APPLICATIVA) {
  89.         STATE_CORRELAZIONE_APPLICATIVA = sTATE_CORRELAZIONE_APPLICATIVA;
  90.     }

  91.     private static TimerState STATE_VERIFICA_CONNESSIONI_ATTIVE = TimerState.OFF; // abilitato in OpenSPCoop2Startup al momento dell'avvio
  92.     public static TimerState getSTATE_VERIFICA_CONNESSIONI_ATTIVE() {
  93.         return STATE_VERIFICA_CONNESSIONI_ATTIVE;
  94.     }
  95.     public static void setSTATE_VERIFICA_CONNESSIONI_ATTIVE(TimerState sTATE_VERIFICA_CONNESSIONI_ATTIVE) {
  96.         STATE_VERIFICA_CONNESSIONI_ATTIVE = sTATE_VERIFICA_CONNESSIONI_ATTIVE;
  97.     }

  98.     private MsgDiagnostico msgDiag = null;
  99.     private Logger logTimer = null;
  100.     private OpenSPCoop2Properties propertiesReader = null;
  101.     private long scadenzaMessaggio = -1;
  102.     private boolean logQuery = false;
  103.     private int limit = CostantiPdD.LIMIT_MESSAGGI_GESTORI;
  104.     private boolean orderByQuery;
  105.     private long scadenzaCorrelazioneApplicativa;
  106.     private boolean filtraCorrelazioniApplicativeScaduteRispettoOraRegistrazione;
  107.     private boolean filtraCorrelazioniApplicativeScaduteRispettoOraRegistrazione_escludiCorrelazioniConScadenzaImpostata;

  108.     private TimerLock timerLock = null;
  109.     private TimerLock timerLockCorrelazioneApplicativa = null;

  110.     /** Semaforo */
  111.     private Semaphore semaphore = null;
  112.     private InfoStatistics semaphore_statistics;

  113.     public TimerGestoreMessaggiLib(MsgDiagnostico msgDiag,Logger log,OpenSPCoop2Properties p,
  114.             long scadenzaMessaggio,boolean logQuery,
  115.             int limit,boolean orderByQuery,
  116.             long scadenzaCorrelazioneApplicativa,
  117.             boolean filtraCorrelazioniApplicativeScaduteRispettoOraRegistrazione,
  118.             boolean filtraCorrelazioniApplicativeScaduteRispettoOraRegistrazione_escludiCorrelazioniConScadenzaImpostata) throws TimerException{
  119.         this.msgDiag = msgDiag;
  120.         this.logTimer = log;
  121.         this.propertiesReader = p;
  122.         this.scadenzaMessaggio = scadenzaMessaggio;
  123.         this.logQuery = logQuery;
  124.         this.limit = limit;
  125.         this.orderByQuery = orderByQuery;
  126.         this.scadenzaCorrelazioneApplicativa = scadenzaCorrelazioneApplicativa;
  127.         this.filtraCorrelazioniApplicativeScaduteRispettoOraRegistrazione = filtraCorrelazioniApplicativeScaduteRispettoOraRegistrazione;
  128.         this.filtraCorrelazioniApplicativeScaduteRispettoOraRegistrazione_escludiCorrelazioniConScadenzaImpostata =
  129.                 filtraCorrelazioniApplicativeScaduteRispettoOraRegistrazione_escludiCorrelazioniConScadenzaImpostata;

  130.         // deve essere utilizzato lo stesso lock per GestoreMessaggi, ConsegnaContenuti, GestoreBuste per risolvere problema di eliminazione descritto in GestoreMessaggi metodo deleteMessageWithLock
  131.         if(this.propertiesReader.isMsgGiaInProcessamentoUseLock()) {
  132.             this.timerLock = new TimerLock(TipoLock._getLockGestioneRepositoryMessaggi());
  133.         }
  134.         else {
  135.             this.timerLock = new TimerLock(TipoLock.GESTIONE_PULIZIA_REPOSITORY_MESSAGGI);
  136.         }

  137.         this.timerLockCorrelazioneApplicativa = new TimerLock(TipoLock.GESTIONE_CORRELAZIONE_APPLICATIVA);

  138.         if(this.propertiesReader.isTimerLockByDatabase()) {
  139.             this.semaphore_statistics = new InfoStatistics();

  140.             SemaphoreConfiguration config = GestoreMessaggi.newSemaphoreConfiguration(this.propertiesReader.getTimerGestoreMessaggiLockMaxLife(),
  141.                     this.propertiesReader.getTimerGestoreMessaggiLockIdleTime());

  142.             TipiDatabase databaseType = TipiDatabase.toEnumConstant(this.propertiesReader.getDatabaseType());
  143.             try {
  144.                 this.semaphore = new Semaphore(this.semaphore_statistics, SemaphoreMapping.newInstance(this.timerLock.getIdLock()),
  145.                         config, databaseType, this.logTimer);
  146.             }catch(Exception e) {
  147.                 throw new TimerException(e.getMessage(),e);
  148.             }
  149.         }
  150.     }


  151.     public void check() throws TimerException {

  152.         // Controllo che il sistema non sia andando in shutdown
  153.         if(OpenSPCoop2Startup.contextDestroyed){
  154.             this.logTimer.error("["+TimerGestoreMessaggi.ID_MODULO+"] Rilevato sistema in shutdown");
  155.             return;
  156.         }

  157.         // Controllo che l'inizializzazione corretta delle risorse sia effettuata
  158.         if(!OpenSPCoop2Startup.initialize){
  159.             this.msgDiag.logFatalError("inizializzazione di OpenSPCoop non effettuata", "Check Inizializzazione");
  160.             String msgErrore = "Riscontrato errore: inizializzazione del Timer o di OpenSPCoop non effettuata";
  161.             this.logTimer.error(msgErrore);
  162.             throw new TimerException(msgErrore);
  163.         }

  164.         // Controllo risorse di sistema disponibili
  165.         if( !TimerMonitoraggioRisorseThread.isRisorseDisponibili()){
  166.             this.logTimer.error("["+TimerGestoreMessaggi.ID_MODULO+"] Risorse di sistema non disponibili: "+TimerMonitoraggioRisorseThread.getRisorsaNonDisponibile().getMessage(),TimerMonitoraggioRisorseThread.getRisorsaNonDisponibile());
  167.             return;
  168.         }
  169.         if( !MsgDiagnostico.gestoreDiagnosticaDisponibile){
  170.             this.logTimer.error("["+TimerGestoreMessaggi.ID_MODULO+"] Sistema di diagnostica non disponibile: "+MsgDiagnostico.motivoMalfunzionamentoDiagnostici.getMessage(),MsgDiagnostico.motivoMalfunzionamentoDiagnostici);
  171.             return;
  172.         }
  173.        
  174.         // Controllo che il timer non sia stato momentaneamente disabilitato
  175.         if(!TimerState.ENABLED.equals(STATE_MESSAGGI_ELIMINATI) &&
  176.                 !TimerState.ENABLED.equals(STATE_MESSAGGI_SCADUTI) &&
  177.                 !TimerState.ENABLED.equals(STATE_MESSAGGI_NON_GESTITI) &&
  178.                 !TimerState.ENABLED.equals(STATE_CORRELAZIONE_APPLICATIVA) &&
  179.                 !TimerState.ENABLED.equals(STATE_VERIFICA_CONNESSIONI_ATTIVE)) {
  180.             this.msgDiag.logPersonalizzato("disabilitato");
  181.             this.logTimer.info(this.msgDiag.getMessaggio_replaceKeywords("disabilitato"));
  182.             return;
  183.         }

  184.         // Prendo la gestione
  185.         this.msgDiag.logPersonalizzato("controlloInCorso");
  186.         this.logTimer.info(this.msgDiag.getMessaggio_replaceKeywords("controlloInCorso"));
  187.         long startControlloRepositoryMessaggi = DateManager.getTimeMillis();

  188.         GestoreMessaggi gestoreMsg= null;
  189.         RollbackRepositoryBuste rollbackMessaggio = null;
  190.         RollbackRepositoryBuste rollbackRepository = null;


  191.         OpenSPCoopStateful openspcoopstate = new OpenSPCoopStateful();
  192.         try {
  193.             openspcoopstate.initResource(this.propertiesReader.getIdentitaPortaDefaultWithoutProtocol(),TimerGestoreMessaggi.ID_MODULO, null);
  194.             Connection connectionDB = ((StateMessage)openspcoopstate.getStatoRichiesta()).getConnectionDB();

  195.             // filtroJMS
  196.             JMSReceiver receiverJMS = null;
  197.             if(CostantiConfigurazione.COMUNICAZIONE_INFRASTRUTTURALE_JMS.equals(this.propertiesReader.getNodeReceiver()))
  198.                 receiverJMS = new JMSReceiver(this.propertiesReader.getIdentitaPortaDefaultWithoutProtocol(),"ForcedDeleteMessage",this.propertiesReader.singleConnectionNodeReceiver(),this.logTimer, null);

  199.             // Messaggi da eliminare
  200.             GestoreMessaggi gestoreMsgSearch = new GestoreMessaggi(openspcoopstate, true,this.logTimer,this.msgDiag, null);
  201.             long timeoutRicezioneContenutiApplicativiNonGestiti = this.propertiesReader.getNodeReceiverTimeoutRicezioneContenutiApplicativi() * 3;
  202.             long timeoutRicezioneBusteNonGestiti = this.propertiesReader.getNodeReceiverTimeoutRicezioneBuste() * 3;
  203.             boolean trovatiMessaggi = true;

  204.             while(trovatiMessaggi){

  205.                 trovatiMessaggi = false;


  206.                 Date now = null;
  207.                 if(!this.propertiesReader.isMsgGiaInProcessamentoUseLock()) {
  208.                     now = DateManager.getDate(); // vedi spiegazione nel metodo deleteMessageByOraRegistrazione di GestoreMessaggi
  209.                 }


  210.                 /* --- Messaggi da eliminare (non scaduti) --- */
  211.                
  212.                 List<String> idMsgInutiliINBOX = null;
  213.                 List<String> idMsgInutiliOUTBOX = null;
  214.                
  215.                 if(TimerState.ENABLED.equals(STATE_MESSAGGI_ELIMINATI)) {
  216.                
  217.                     // Eliminazione Messaggi from INBOX
  218.                     String causaMessaggiINBOXDaEliminareNonScaduti = "Eliminazione messaggi INBOX marcati logicamente da eliminare";
  219.                     try{
  220.                         GestoreMessaggi.acquireLock(
  221.                                 this.semaphore, connectionDB, this.timerLock,
  222.                                 this.msgDiag, causaMessaggiINBOXDaEliminareNonScaduti,
  223.                                 this.propertiesReader.getTimerGestoreMessaggi_getLockAttesaAttiva(),
  224.                                 this.propertiesReader.getTimerGestoreMessaggi_getLockCheckInterval());
  225.    
  226.                         idMsgInutiliINBOX = gestoreMsgSearch.readMessaggiInutiliIntoInbox(TimerGestoreMessaggi.ID_MODULO,this.limit,this.logQuery,this.orderByQuery,now);
  227.                         int gestiti = 0;
  228.                         if(idMsgInutiliINBOX.size()>0){
  229.                             if(this.logQuery)
  230.                                 this.logTimer.info("Trovati "+idMsgInutiliINBOX.size()+" messaggi (cancellazione logica) da eliminare nel repository (INBOX) ...");
  231.                             trovatiMessaggi = true;
  232.    
  233.                             this.msgDiag.addKeyword(CostantiPdD.KEY_TIMER_GESTORE_MESSAGGI_TIPO_RICERCA_MSG_DA_ELIMINARE,"MessaggiCompletati");
  234.                             this.msgDiag.addKeyword(CostantiPdD.KEY_TIPO_MESSAGGIO,Costanti.INBOX);
  235.                             for(int i=0; i<idMsgInutiliINBOX.size(); i++){
  236.    
  237.                                 String idMsgDaEliminare = idMsgInutiliINBOX.get(i);
  238.                                 this.msgDiag.addKeyword(CostantiPdD.KEY_ID_MESSAGGIO_DA_ELIMINARE,idMsgDaEliminare);
  239.    
  240.                                 try{
  241.                                     try{
  242.                                         GestoreMessaggi.updateLock(
  243.                                                 this.semaphore, connectionDB, this.timerLock,
  244.                                                 this.msgDiag, "Eliminazione messaggio INBOX con id ["+idMsgDaEliminare+"] ...");
  245.                                     }catch(Throwable e){
  246.                                         this.msgDiag.logErroreGenerico(e,"EliminazioneMessaggioInbox("+idMsgDaEliminare+")-UpdateLock");
  247.                                         this.logTimer.error("ErroreEliminazioneMessaggioInbox("+idMsgDaEliminare+")-UpdateLock: "+e.getMessage(),e);
  248.                                         break;
  249.                                     }
  250.    
  251.                                     // eliminazione messaggio
  252.                                     gestoreMsg = new GestoreMessaggi(openspcoopstate, true
  253.                                             ,idMsgDaEliminare,Costanti.INBOX,this.msgDiag,null);
  254.                                     if(this.propertiesReader.isMsgGiaInProcessamentoUseLock()) {
  255.                                         gestoreMsg._deleteMessageWithoutLock();
  256.                                     }
  257.                                     else {
  258.                                         gestoreMsg.deleteMessageByOraRegistrazione(now);
  259.                                     }
  260.    
  261.                                     this.msgDiag.logPersonalizzato("eliminazioneMessaggio");
  262.                                     if(this.logQuery)
  263.                                         this.logTimer.debug(this.msgDiag.getMessaggio_replaceKeywords("eliminazioneMessaggio"));
  264.    
  265.                                     gestiti++;
  266.    
  267.                                 }catch(Exception e){
  268.                                     this.msgDiag.logErroreGenerico(e,"EliminazioneMessaggioInbox("+idMsgDaEliminare+")");
  269.                                     this.logTimer.error("ErroreEliminazioneMessaggioInbox("+idMsgDaEliminare+"): "+e.getMessage(),e);
  270.                                 }
  271.                             }
  272.    
  273.                             if(this.logQuery)
  274.                                 this.logTimer.info("Eliminati "+gestiti+" messaggi (cancellazione logica) nel repository (INBOX)");
  275.                         }
  276.                         else{
  277.                             if(this.logQuery)
  278.                                 this.logTimer.info("Non sono stati trovati messaggi (cancellazione logica) da eliminare nel repository (INBOX)");
  279.                         }
  280.                     }finally{
  281.                         try{
  282.                             GestoreMessaggi.releaseLock(
  283.                                     this.semaphore, connectionDB, this.timerLock,
  284.                                     this.msgDiag, causaMessaggiINBOXDaEliminareNonScaduti);
  285.                         }catch(Exception e){
  286.                             // ignore
  287.                         }
  288.                     }
  289.    
  290.                     //  Eliminazione Messaggi from OUTBOX
  291.                     String causaMessaggiOUTBOXDaEliminareNonScaduti = "Eliminazione messaggi OUTBOX marcati logicamente da eliminare";
  292.                     try{
  293.                         GestoreMessaggi.acquireLock(
  294.                                 this.semaphore, connectionDB, this.timerLock,
  295.                                 this.msgDiag, causaMessaggiOUTBOXDaEliminareNonScaduti,
  296.                                 this.propertiesReader.getTimerGestoreMessaggi_getLockAttesaAttiva(),
  297.                                 this.propertiesReader.getTimerGestoreMessaggi_getLockCheckInterval());
  298.    
  299.                         idMsgInutiliOUTBOX = gestoreMsgSearch.readMessaggiInutiliIntoOutbox(TimerGestoreMessaggi.ID_MODULO,this.limit,this.logQuery,this.orderByQuery,now);
  300.                         int gestiti = 0;
  301.                         if(idMsgInutiliOUTBOX.size()>0){
  302.                             if(this.logQuery)
  303.                                 this.logTimer.info("Trovati "+idMsgInutiliOUTBOX.size()+" messaggi (cancellazione logica) da eliminare nel repository (OUTBOX) ...");
  304.                             trovatiMessaggi = true;
  305.    
  306.                             this.msgDiag.addKeyword(CostantiPdD.KEY_TIMER_GESTORE_MESSAGGI_TIPO_RICERCA_MSG_DA_ELIMINARE,"MessaggiCompletati");
  307.                             this.msgDiag.addKeyword(CostantiPdD.KEY_TIPO_MESSAGGIO,Costanti.OUTBOX);
  308.                             for(int i=0; i<idMsgInutiliOUTBOX.size(); i++){
  309.    
  310.                                 String idMsgDaEliminare = idMsgInutiliOUTBOX.get(i);
  311.                                 this.msgDiag.addKeyword(CostantiPdD.KEY_ID_MESSAGGIO_DA_ELIMINARE,idMsgDaEliminare);
  312.    
  313.                                 try{
  314.                                     try{
  315.                                         GestoreMessaggi.updateLock(
  316.                                                 this.semaphore, connectionDB, this.timerLock,
  317.                                                 this.msgDiag, "Eliminazione messaggio OUTBOX con id ["+idMsgDaEliminare+"] ...");
  318.                                     }catch(Throwable e){
  319.                                         this.msgDiag.logErroreGenerico(e,"EliminazioneMessaggioOutbox("+idMsgDaEliminare+")-UpdateLock");
  320.                                         this.logTimer.error("ErroreEliminazioneMessaggioOutbox("+idMsgDaEliminare+")-UpdateLock: "+e.getMessage(),e);
  321.                                         break;
  322.                                     }
  323.    
  324.                                     // eliminazione messaggio
  325.                                     gestoreMsg = new GestoreMessaggi(openspcoopstate, true,idMsgDaEliminare,Costanti.OUTBOX,this.msgDiag,null);
  326.                                     if(this.propertiesReader.isMsgGiaInProcessamentoUseLock()) {
  327.                                         gestoreMsg._deleteMessageWithoutLock();
  328.                                     }
  329.                                     else {
  330.                                         gestoreMsg.deleteMessageByOraRegistrazione(now);
  331.                                     }
  332.    
  333.                                     this.msgDiag.logPersonalizzato("eliminazioneMessaggio");
  334.                                     if(this.logQuery)
  335.                                         this.logTimer.debug(this.msgDiag.getMessaggio_replaceKeywords("eliminazioneMessaggio"));
  336.    
  337.                                     gestiti++;
  338.    
  339.                                 }catch(Exception e){
  340.                                     this.msgDiag.logErroreGenerico(e,"EliminazioneMessaggioOutbox("+idMsgDaEliminare+")");
  341.                                     this.logTimer.error("ErroreEliminazioneMessaggioOutbox("+idMsgDaEliminare+"): "+e.getMessage(),e);
  342.                                 }      
  343.                             }
  344.    
  345.                             if(this.logQuery)
  346.                                 this.logTimer.info("Eliminati "+gestiti+" messaggi (cancellazione logica) nel repository (OUTBOX)");
  347.                         }
  348.                         else{
  349.                             if(this.logQuery)
  350.                                 this.logTimer.info("Non sono stati trovati messaggi (cancellazione logica) da eliminare nel repository (OUTBOX)");
  351.                         }
  352.                     }finally{
  353.                         try{
  354.                             GestoreMessaggi.releaseLock(
  355.                                     this.semaphore, connectionDB, this.timerLock,
  356.                                     this.msgDiag, causaMessaggiOUTBOXDaEliminareNonScaduti);
  357.                         }catch(Exception e){
  358.                             // ignore
  359.                         }
  360.                     }
  361.                    
  362.                 }
  363.                 else {
  364.                     if(this.logQuery) {
  365.                         this.logTimer.info("Gestione messaggi (cancellazione logica) disabilitata");
  366.                     }  
  367.                 }






  368.                 /* --- Messaggi scaduti, verra' effettuato anche un rollback delle Buste. --- */

  369.                 List<String> idMsgScadutiINBOX = null;
  370.                 List<String> idMsgScadutiOUTBOX = null;
  371.                
  372.                 if(TimerState.ENABLED.equals(STATE_MESSAGGI_SCADUTI)) {
  373.                
  374.                     //  Eliminazione Messaggi from INBOX
  375.                     String causaMessaggiINBOXScaduti = "Eliminazione messaggi INBOX scaduti";
  376.                     try{
  377.                         GestoreMessaggi.acquireLock(
  378.                                 this.semaphore, connectionDB, this.timerLock,
  379.                                 this.msgDiag, causaMessaggiINBOXScaduti,
  380.                                 this.propertiesReader.getTimerGestoreMessaggi_getLockAttesaAttiva(),
  381.                                 this.propertiesReader.getTimerGestoreMessaggi_getLockCheckInterval());
  382.    
  383.                         idMsgScadutiINBOX = gestoreMsgSearch.readMessaggiScadutiIntoInbox(this.scadenzaMessaggio,this.limit,this.logQuery,this.orderByQuery,now);
  384.                         int gestiti = 0;
  385.                         if(idMsgScadutiINBOX.size()>0){
  386.                             if(this.logQuery)
  387.                                 this.logTimer.info("Trovati "+idMsgScadutiINBOX.size()+" messaggi (scaduti) da eliminare nel repository (INBOX) ...");
  388.                             trovatiMessaggi = true;
  389.    
  390.                             this.msgDiag.addKeyword(CostantiPdD.KEY_TIMER_GESTORE_MESSAGGI_TIPO_RICERCA_MSG_DA_ELIMINARE,"MessaggiScaduti");
  391.                             this.msgDiag.addKeyword(CostantiPdD.KEY_TIPO_MESSAGGIO,Costanti.INBOX);
  392.                             for(int i=0; i<idMsgScadutiINBOX.size(); i++){
  393.    
  394.                                 String idMsgDaEliminare = idMsgScadutiINBOX.get(i);
  395.                                 this.msgDiag.addKeyword(CostantiPdD.KEY_ID_MESSAGGIO_DA_ELIMINARE,idMsgDaEliminare);
  396.    
  397.                                 try{
  398.                                     try{
  399.                                         GestoreMessaggi.updateLock(
  400.                                                 this.semaphore, connectionDB, this.timerLock,
  401.                                                 this.msgDiag, "Eliminazione messaggio scaduto INBOX con id ["+idMsgDaEliminare+"] ...");
  402.                                     }catch(Throwable e){
  403.                                         this.msgDiag.logErroreGenerico(e,"EliminazioneMessaggioScadutoInbox("+idMsgDaEliminare+")-UpdateLock");
  404.                                         this.logTimer.error("ErroreEliminazioneMessaggioScadutoInbox("+idMsgDaEliminare+")-UpdateLock: "+e.getMessage(),e);
  405.                                         break;
  406.                                     }
  407.    
  408.                                     gestoreMsg = new GestoreMessaggi(openspcoopstate, true,idMsgDaEliminare,Costanti.INBOX,this.msgDiag,null);
  409.    
  410.                                     //  rollback messaggio scaduto (eventuale profilo + accesso_pdd)
  411.                                     rollbackMessaggio = new RollbackRepositoryBuste(idMsgDaEliminare,openspcoopstate.getStatoRichiesta(),true);
  412.                                     rollbackMessaggio.rollbackBustaIntoInBox();
  413.    
  414.                                     // rollback repository + // rollback jms receiver
  415.                                     String rifMsg = gestoreMsg.getRiferimentoMessaggio();
  416.                                     if(rifMsg==null){
  417.                                         if(receiverJMS!=null){
  418.                                             // rollback jms receiver
  419.                                             String strMessageSelector = "ID = '"+idMsgDaEliminare+"'";
  420.                                             if (receiverJMS.clean(RicezioneBuste.ID_MODULO,strMessageSelector)){
  421.                                                 this.msgDiag.addKeyword(CostantiPdD.KEY_TIMER_GESTORE_MESSAGGI_CODA_JMS_FILTRO_MSG_DA_ELIMINARE,
  422.                                                         RicezioneBuste.ID_MODULO);
  423.                                                 this.msgDiag.addKeyword(CostantiPdD.KEY_TIMER_GESTORE_MESSAGGI_RICERCA_MSG_DA_ELIMINARE_PER_RIFERIMENTO,"false");
  424.                                                 this.msgDiag.logPersonalizzato("messaggioNonConsumato.codaJMS");
  425.                                             }
  426.                                         }
  427.                                     }else{
  428.                                         // rollback repository
  429.                                         rollbackRepository = new RollbackRepositoryBuste(rifMsg,openspcoopstate.getStatoRichiesta(),true);
  430.                                         rollbackRepository.rollbackBustaIntoOutBox(false); // non effettuo il rollback dell'history (riscontro/ricevuta arrivera...)
  431.    
  432.                                         if(receiverJMS!=null){
  433.                                             // rollback jms receiver
  434.                                             String strMessageSelector = "ID = '"+rifMsg+"'";
  435.                                             if (receiverJMS.clean(RicezioneContenutiApplicativi.ID_MODULO,strMessageSelector)){
  436.                                                 this.msgDiag.addKeyword(CostantiPdD.KEY_TIMER_GESTORE_MESSAGGI_CODA_JMS_FILTRO_MSG_DA_ELIMINARE,
  437.                                                         RicezioneContenutiApplicativi.ID_MODULO);
  438.                                                 this.msgDiag.addKeyword(CostantiPdD.KEY_TIMER_GESTORE_MESSAGGI_RICERCA_MSG_DA_ELIMINARE_PER_RIFERIMENTO,"true");
  439.                                                 this.msgDiag.logPersonalizzato("messaggioNonConsumato.codaJMS");
  440.                                             }
  441.                                         }
  442.                                     }
  443.    
  444.                                     // aggiorno eventuali destinatari nella transazione prima di eliminare il messaggio
  445.                                     try {
  446.                                         List<MessaggioServizioApplicativo> listMsgServiziApplicativi = gestoreMsg.readInfoDestinatari(this.logQuery, this.logTimer);
  447.                                         if(listMsgServiziApplicativi!=null && !listMsgServiziApplicativi.isEmpty()) {
  448.                                            
  449.                                             for (MessaggioServizioApplicativo messaggioServizioApplicativo : listMsgServiziApplicativi) {
  450.                                                 TransazioneApplicativoServer transazioneApplicativoServer = new TransazioneApplicativoServer();
  451.                                                 transazioneApplicativoServer.setIdTransazione(messaggioServizioApplicativo.getIdTransazione());
  452.                                                 transazioneApplicativoServer.setServizioApplicativoErogatore(messaggioServizioApplicativo.getServizioApplicativo());
  453.                                                 transazioneApplicativoServer.setDataRegistrazione(messaggioServizioApplicativo.getOraRegistrazione());
  454.                                                 transazioneApplicativoServer.setDataMessaggioScaduto(DateManager.getDate());
  455.                                                 transazioneApplicativoServer.setProtocollo(this.propertiesReader.getDefaultProtocolName()); // non è importante per impostare la scadenza
  456.                                                 IDPortaApplicativa idPA = new IDPortaApplicativa();
  457.                                                 idPA.setNome(messaggioServizioApplicativo.getNomePorta());
  458.                                                 try {
  459.                                                     GestoreConsegnaMultipla.getInstance().safeUpdateMessaggioScaduto(transazioneApplicativoServer, idPA, openspcoopstate);
  460.                                                 }catch(Throwable t) {
  461.                                                     this.logTimer.error("["+transazioneApplicativoServer.getIdTransazione()+"]["+transazioneApplicativoServer.getServizioApplicativoErogatore()+"] Errore durante il salvataggio delle informazioni relative al servizio applicativo: "+t.getMessage(),t);
  462.                                                 }
  463.                                             }
  464.                                         }
  465.                                     }catch(Throwable t) {
  466.                                         this.logTimer.error("Errore durante l'aggiornamento dello stato degli applicativi nelle transazioni: "+t.getMessage(),t);
  467.                                     }
  468.                                    
  469.                                     // Eliminazione effettiva
  470.                                     ((StateMessage)openspcoopstate.getStatoRichiesta()).executePreparedStatement();
  471.                                     //  eliminazione messaggio
  472.                                     if(this.propertiesReader.isMsgGiaInProcessamentoUseLock()) {
  473.                                         gestoreMsg._deleteMessageWithoutLock();
  474.                                     }
  475.                                     else {
  476.                                         gestoreMsg.deleteMessageByOraRegistrazione(now);
  477.                                     }
  478.    
  479.                                     this.msgDiag.logPersonalizzato("eliminazioneMessaggio");
  480.                                     if(this.logQuery)
  481.                                         this.logTimer.debug(this.msgDiag.getMessaggio_replaceKeywords("eliminazioneMessaggio"));
  482.    
  483.                                     gestiti++;
  484.    
  485.                                 }catch(Exception e){
  486.    
  487.                                     ((StateMessage)openspcoopstate.getStatoRichiesta()).closePreparedStatement();
  488.                                     this.msgDiag.logErroreGenerico(e,"EliminazioneMessaggioScadutoInbox("+idMsgDaEliminare+")");
  489.                                     this.logTimer.error("ErroreEliminazioneMessaggioScadutoInbox("+idMsgDaEliminare+"): "+e.getMessage(),e);
  490.                                 }
  491.                             }
  492.    
  493.                             if(this.logQuery)
  494.                                 this.logTimer.info("Eliminati "+gestiti+" messaggi (scaduti) nel repository (INBOX)");
  495.                         }
  496.                         else{
  497.                             if(this.logQuery)
  498.                                 this.logTimer.info("Non sono stati trovati messaggi (scaduti) da eliminare nel repository (INBOX)");
  499.                         }
  500.                     }finally{
  501.                         try{
  502.                             GestoreMessaggi.releaseLock(
  503.                                     this.semaphore, connectionDB, this.timerLock,
  504.                                     this.msgDiag, causaMessaggiINBOXScaduti);
  505.                         }catch(Exception e){
  506.                             // ignore
  507.                         }
  508.                     }
  509.    
  510.                     // Eliminazione Messaggi from OUTBOX
  511.                     String causaMessaggiOUTBOXScaduti = "Eliminazione messaggi OUTBOX scaduti";
  512.                     try{
  513.                         GestoreMessaggi.acquireLock(
  514.                                 this.semaphore, connectionDB, this.timerLock,
  515.                                 this.msgDiag, causaMessaggiOUTBOXScaduti,
  516.                                 this.propertiesReader.getTimerGestoreMessaggi_getLockAttesaAttiva(),
  517.                                 this.propertiesReader.getTimerGestoreMessaggi_getLockCheckInterval());
  518.    
  519.                         idMsgScadutiOUTBOX = gestoreMsgSearch.readMessaggiScadutiIntoOutbox(this.scadenzaMessaggio,this.limit,this.logQuery,this.orderByQuery, now);
  520.                         int gestiti = 0;
  521.                         if(idMsgScadutiOUTBOX.size()>0){
  522.                             if(this.logQuery)
  523.                                 this.logTimer.info("Trovati "+idMsgScadutiOUTBOX.size()+" messaggi (scaduti) da eliminare nel repository (OUTBOX) ...");
  524.                             trovatiMessaggi = true;
  525.    
  526.                             this.msgDiag.addKeyword(CostantiPdD.KEY_TIMER_GESTORE_MESSAGGI_TIPO_RICERCA_MSG_DA_ELIMINARE,"MessaggiScaduti");
  527.                             this.msgDiag.addKeyword(CostantiPdD.KEY_TIPO_MESSAGGIO,Costanti.OUTBOX);
  528.                             for(int i=0; i<idMsgScadutiOUTBOX.size(); i++){
  529.    
  530.                                 String idMsgDaEliminare = idMsgScadutiOUTBOX.get(i);
  531.                                 this.msgDiag.addKeyword(CostantiPdD.KEY_ID_MESSAGGIO_DA_ELIMINARE,idMsgDaEliminare);
  532.    
  533.                                 try{
  534.                                     try{
  535.                                         GestoreMessaggi.updateLock(
  536.                                                 this.semaphore, connectionDB, this.timerLock,
  537.                                                 this.msgDiag, "Eliminazione messaggio scaduto OUTBOX con id ["+idMsgDaEliminare+"] ...");
  538.                                     }catch(Throwable e){
  539.                                         this.msgDiag.logErroreGenerico(e,"EliminazioneMessaggioScadutoOutbox("+idMsgDaEliminare+")-UpdateLock");
  540.                                         this.logTimer.error("ErroreEliminazioneMessaggioScadutoOutbox("+idMsgDaEliminare+")-UpdateLock: "+e.getMessage(),e);
  541.                                         break;
  542.                                     }
  543.    
  544.                                     gestoreMsg = new GestoreMessaggi(openspcoopstate, true,idMsgDaEliminare,Costanti.OUTBOX,this.msgDiag,null);
  545.    
  546.                                     //  rollback messaggio scaduto (eventuale profilo + accesso_pdd)
  547.                                     rollbackMessaggio = new RollbackRepositoryBuste(idMsgDaEliminare,openspcoopstate.getStatoRichiesta(),true);
  548.                                     rollbackMessaggio.rollbackBustaIntoOutBox();
  549.    
  550.                                     //  rollback repository + // rollback jms receiver
  551.                                     String rifMsg = gestoreMsg.getRiferimentoMessaggio();
  552.                                     if(rifMsg==null){
  553.                                         if(receiverJMS!=null){
  554.                                             //  rollback jms receiver
  555.                                             String strMessageSelector = "ID = '"+idMsgDaEliminare+"'";
  556.                                             if (receiverJMS.clean(RicezioneContenutiApplicativi.ID_MODULO,strMessageSelector)){
  557.                                                 this.msgDiag.addKeyword(CostantiPdD.KEY_TIMER_GESTORE_MESSAGGI_CODA_JMS_FILTRO_MSG_DA_ELIMINARE,
  558.                                                         RicezioneContenutiApplicativi.ID_MODULO);
  559.                                                 this.msgDiag.addKeyword(CostantiPdD.KEY_TIMER_GESTORE_MESSAGGI_RICERCA_MSG_DA_ELIMINARE_PER_RIFERIMENTO,"false");
  560.                                                 this.msgDiag.logPersonalizzato("messaggioNonConsumato.codaJMS");
  561.                                             }
  562.                                         }
  563.                                     }else{
  564.                                         // rollback repository
  565.                                         rollbackRepository = new RollbackRepositoryBuste(rifMsg,openspcoopstate.getStatoRichiesta(),true);
  566.                                         rollbackRepository.rollbackBustaIntoInBox(false); // non effettuo il rollback dell'history (busta e' ricevuta)
  567.    
  568.                                         if(receiverJMS!=null){
  569.                                             //  rollback jms receiver
  570.                                             String strMessageSelector = "ID = '"+rifMsg+"'";
  571.                                             if (receiverJMS.clean(RicezioneBuste.ID_MODULO,strMessageSelector)){
  572.                                                 this.msgDiag.addKeyword(CostantiPdD.KEY_TIMER_GESTORE_MESSAGGI_CODA_JMS_FILTRO_MSG_DA_ELIMINARE,
  573.                                                         RicezioneBuste.ID_MODULO);
  574.                                                 this.msgDiag.addKeyword(CostantiPdD.KEY_TIMER_GESTORE_MESSAGGI_RICERCA_MSG_DA_ELIMINARE_PER_RIFERIMENTO,"true");
  575.                                                 this.msgDiag.logPersonalizzato("messaggioNonConsumato.codaJMS");
  576.                                             }
  577.                                         }
  578.                                     }
  579.                                     ((StateMessage)openspcoopstate.getStatoRichiesta()).executePreparedStatement();
  580.                                     //  eliminazione messaggio
  581.                                     if(this.propertiesReader.isMsgGiaInProcessamentoUseLock()) {
  582.                                         gestoreMsg._deleteMessageWithoutLock();
  583.                                     }
  584.                                     else {
  585.                                         gestoreMsg.deleteMessageByOraRegistrazione(now);
  586.                                     }
  587.    
  588.                                     this.msgDiag.logPersonalizzato("eliminazioneMessaggio");
  589.                                     if(this.logQuery)
  590.                                         this.logTimer.debug(this.msgDiag.getMessaggio_replaceKeywords("eliminazioneMessaggio"));
  591.    
  592.                                     gestiti++;
  593.    
  594.                                 }catch(Exception e){
  595.                                     ((StateMessage)openspcoopstate.getStatoRichiesta()).closePreparedStatement();
  596.                                     this.msgDiag.logErroreGenerico(e,"EliminazioneMessaggioScadutoOutbox("+idMsgDaEliminare+")");
  597.                                     this.logTimer.error("ErroreEliminazioneMessaggioScadutoOutbox("+idMsgDaEliminare+"): "+e.getMessage(),e);
  598.                                 }      
  599.                             }
  600.    
  601.                             if(this.logQuery)
  602.                                 this.logTimer.info("Eliminati "+gestiti+" messaggi (scaduti) nel repository (OUTBOX)");
  603.    
  604.                         }
  605.                         else{
  606.                             if(this.logQuery)
  607.                                 this.logTimer.info("Non sono stati trovati messaggi (scaduti) da eliminare nel repository (OUTBOX)");
  608.                         }
  609.                     }finally{
  610.                         try{
  611.                             GestoreMessaggi.releaseLock(
  612.                                     this.semaphore, connectionDB, this.timerLock,
  613.                                     this.msgDiag, causaMessaggiOUTBOXScaduti);
  614.                         }catch(Exception e){
  615.                             // ignore
  616.                         }
  617.                     }

  618.                 }
  619.                 else {
  620.                     if(this.logQuery) {
  621.                         this.logTimer.info("Gestione messaggi (scaduti) disabilitata");
  622.                     }  
  623.                 }




  624.                 List<String> idMsgServizioRicezioneContenutiApplicativiNonGestiti = null;
  625.                 List<String> idMsgServizioRicezioneBusteNonGestiti = null;
  626.                
  627.                 if(TimerState.ENABLED.equals(STATE_MESSAGGI_NON_GESTITI)) {

  628.                     /* --- Messaggi non gestiti dal servizio web RicezioneContenutiApplicativi, verra' effettuato anche un rollback delle Buste. ---*/
  629.    
  630.                     //  Eliminazione Messaggi from INBOX
  631.                     String causaMessaggiINBOXNonGestitiRicezioneContenutiApplicativi = "Eliminazione messaggi INBOX non gestiti dal servizio RicezioneContenutiApplicativi";
  632.                     try{
  633.                         GestoreMessaggi.acquireLock(
  634.                                 this.semaphore, connectionDB, this.timerLock,
  635.                                 this.msgDiag, causaMessaggiINBOXNonGestitiRicezioneContenutiApplicativi,
  636.                                 this.propertiesReader.getTimerGestoreMessaggi_getLockAttesaAttiva(),
  637.                                 this.propertiesReader.getTimerGestoreMessaggi_getLockCheckInterval());
  638.    
  639.                         idMsgServizioRicezioneContenutiApplicativiNonGestiti =
  640.                                 gestoreMsgSearch.readMsgForRicezioneContenutiApplicativiNonGestiti(timeoutRicezioneContenutiApplicativiNonGestiti, this.limit,this.logQuery,this.orderByQuery);
  641.                         int gestiti = 0;
  642.                         if(idMsgServizioRicezioneContenutiApplicativiNonGestiti.size()>0){
  643.                             if(this.logQuery)
  644.                                 this.logTimer.info("Trovati "+idMsgServizioRicezioneContenutiApplicativiNonGestiti.size()+" messaggi (non gestiti da 'RicezioneContenutiApplicativi') da eliminare nel repository (INBOX) ...");
  645.                             trovatiMessaggi = true;
  646.    
  647.                             this.msgDiag.addKeyword(CostantiPdD.KEY_TIMER_GESTORE_MESSAGGI_TIPO_RICERCA_MSG_DA_ELIMINARE,"MessaggiNonGestitiRicezioneContenutiApplicativi");
  648.                             this.msgDiag.addKeyword(CostantiPdD.KEY_TIPO_MESSAGGIO,Costanti.INBOX);
  649.                             for(int i=0; i<idMsgServizioRicezioneContenutiApplicativiNonGestiti.size(); i++){
  650.                                 String idMsgDaEliminare = idMsgServizioRicezioneContenutiApplicativiNonGestiti.get(i);
  651.                                 String idBustaDaEliminare = idMsgDaEliminare.split("@")[0];
  652.                                 String servizioApplicativoDaEliminare = idMsgDaEliminare.split("@")[1];
  653.                                 this.msgDiag.addKeyword(CostantiPdD.KEY_ID_MESSAGGIO_DA_ELIMINARE,idBustaDaEliminare);
  654.    
  655.                                 try{
  656.                                     try{
  657.                                         GestoreMessaggi.updateLock(
  658.                                                 this.semaphore, connectionDB, this.timerLock,
  659.                                                 this.msgDiag, "Eliminazione messaggio INBOX non gestiti dal servizio RicezioneContenutiApplicativi con id ["+idMsgDaEliminare+"] ...");
  660.                                     }catch(Throwable e){
  661.                                         this.msgDiag.logErroreGenerico(e,"EliminazioneMessaggioRicezioneContenutiApplicativiNonGestiti("+idMsgDaEliminare+")-UpdateLock");
  662.                                         this.logTimer.error("ErroreEliminazioneMessaggioRicezioneContenutiApplicativiNonGestiti("+idMsgDaEliminare+")-UpdateLock: "+e.getMessage(),e);
  663.                                         break;
  664.                                     }
  665.    
  666.                                     gestoreMsg = new GestoreMessaggi(openspcoopstate, true,idBustaDaEliminare,Costanti.INBOX,this.msgDiag,null);
  667.    
  668.                                     // pulizia jms receiver
  669.                                     if(receiverJMS!=null){
  670.                                         String rifMsg = gestoreMsg.getRiferimentoMessaggio();
  671.                                         if(rifMsg!=null){
  672.                                             // rollback jms receiver
  673.                                             String strMessageSelector = "ID = '"+rifMsg+"'";
  674.                                             if (receiverJMS.clean(RicezioneContenutiApplicativi.ID_MODULO,strMessageSelector)){
  675.                                                 this.msgDiag.addKeyword(CostantiPdD.KEY_TIMER_GESTORE_MESSAGGI_CODA_JMS_FILTRO_MSG_DA_ELIMINARE,
  676.                                                         RicezioneContenutiApplicativi.ID_MODULO);
  677.                                                 this.msgDiag.addKeyword(CostantiPdD.KEY_TIMER_GESTORE_MESSAGGI_RICERCA_MSG_DA_ELIMINARE_PER_RIFERIMENTO,"true");
  678.                                                 this.msgDiag.logPersonalizzato("messaggioNonConsumato.codaJMS");
  679.                                             }
  680.                                         }
  681.                                     }
  682.    
  683.                                     //  eliminazione servizioApplicativo
  684.                                     gestoreMsg.eliminaDestinatarioMessaggio(servizioApplicativoDaEliminare,gestoreMsg.getRiferimentoMessaggio());
  685.    
  686.                                     // Se non ci sono altri destinatari effettua rollback
  687.                                     if(gestoreMsg.existsServiziApplicativiDestinatariMessaggio()==false){
  688.                                         rollbackMessaggio = new RollbackRepositoryBuste(idBustaDaEliminare,openspcoopstate.getStatoRichiesta(),true);
  689.                                         rollbackMessaggio.rollbackBustaIntoInBox();
  690.                                         ((StateMessage)openspcoopstate.getStatoRichiesta()).executePreparedStatement();
  691.                                     }
  692.    
  693.                                     this.msgDiag.logPersonalizzato("eliminazioneDestinatarioMessaggio");
  694.                                     if(this.logQuery)
  695.                                         this.logTimer.debug(this.msgDiag.getMessaggio_replaceKeywords("eliminazioneDestinatarioMessaggio"));
  696.    
  697.                                     gestiti++;
  698.    
  699.                                 }catch(Exception e){
  700.                                     if(rollbackMessaggio!=null){
  701.                                         ((StateMessage)openspcoopstate.getStatoRichiesta()).closePreparedStatement();
  702.                                         rollbackMessaggio = null;
  703.                                     }
  704.                                     this.msgDiag.logErroreGenerico(e,"EliminazioneMessaggioRicezioneContenutiApplicativiNonGestiti("+idMsgDaEliminare+")");
  705.                                     this.logTimer.error("ErroreEliminazioneMessaggioRicezioneContenutiApplicativiNonGestiti("+idMsgDaEliminare+"): "+e.getMessage(),e);
  706.                                 }
  707.                             }
  708.    
  709.                             if(this.logQuery)
  710.                                 this.logTimer.info("Eliminati "+gestiti+" messaggi (non gestiti da 'RicezioneContenutiApplicativi') nel repository (INBOX)");
  711.    
  712.                         }
  713.                         else{
  714.                             if(this.logQuery)
  715.                                 this.logTimer.info("Non sono stati trovati messaggi (non gestiti da 'RicezioneContenutiApplicativi') da eliminare nel repository (INBOX)");
  716.                         }
  717.                     }finally{
  718.                         try{
  719.                             GestoreMessaggi.releaseLock(
  720.                                     this.semaphore, connectionDB, this.timerLock,
  721.                                     this.msgDiag, causaMessaggiINBOXNonGestitiRicezioneContenutiApplicativi);
  722.                         }catch(Exception e){
  723.                             // ignore
  724.                         }
  725.                     }
  726.    
  727.    
  728.    
  729.                     /* --- Messaggi non gestiti dal servizio web RicezioneBuste, verra' effettuato anche un rollback delle Buste. --- */
  730.    
  731.                     //  Eliminazione Messaggi from OUTBOX
  732.                     String causaMessaggiOUTBOXNonGestitiRicezioneBuste = "Eliminazione messaggi OUTBOX non gestiti dal servizio RicezioneBuste";
  733.                     try{
  734.                         GestoreMessaggi.acquireLock(
  735.                                 this.semaphore, connectionDB, this.timerLock,
  736.                                 this.msgDiag, causaMessaggiOUTBOXNonGestitiRicezioneBuste,
  737.                                 this.propertiesReader.getTimerGestoreMessaggi_getLockAttesaAttiva(),
  738.                                 this.propertiesReader.getTimerGestoreMessaggi_getLockCheckInterval());
  739.    
  740.                         idMsgServizioRicezioneBusteNonGestiti =
  741.                                 gestoreMsgSearch.readMsgForRicezioneBusteNonGestiti(timeoutRicezioneBusteNonGestiti, this.limit,this.logQuery,this.orderByQuery);
  742.                         int gestiti = 0;
  743.                         if(idMsgServizioRicezioneBusteNonGestiti.size()>0){
  744.                             if(this.logQuery)
  745.                                 this.logTimer.info("Trovati "+idMsgServizioRicezioneBusteNonGestiti.size()+" messaggi (non gestiti da 'RicezioneBuste') da eliminare nel repository (OUTBOX) ...");
  746.                             trovatiMessaggi = true;
  747.    
  748.                             this.msgDiag.addKeyword(CostantiPdD.KEY_TIMER_GESTORE_MESSAGGI_TIPO_RICERCA_MSG_DA_ELIMINARE,"MessaggiNonGestitiRicezioneBuste");
  749.                             this.msgDiag.addKeyword(CostantiPdD.KEY_TIPO_MESSAGGIO,Costanti.OUTBOX);
  750.                             for(int i=0; i<idMsgServizioRicezioneBusteNonGestiti.size(); i++){
  751.                                 String idMsgDaEliminare = idMsgServizioRicezioneBusteNonGestiti.get(i);
  752.                                 this.msgDiag.addKeyword(CostantiPdD.KEY_ID_MESSAGGIO_DA_ELIMINARE,idMsgDaEliminare);
  753.                                 try{
  754.                                     try{
  755.                                         GestoreMessaggi.updateLock(
  756.                                                 this.semaphore, connectionDB, this.timerLock,
  757.                                                 this.msgDiag, "Eliminazione messaggio OUTBOX non gestiti dal servizio RicezioneBuste con id ["+idMsgDaEliminare+"] ...");
  758.                                     }catch(Throwable e){
  759.                                         this.msgDiag.logErroreGenerico(e,"EliminazioneMessaggioRicezioneBusteNonGestiti("+idMsgDaEliminare+")-UpdateLock");
  760.                                         this.logTimer.error("ErroreEliminazioneMessaggioRicezioneBusteNonGestiti("+idMsgDaEliminare+")-UpdateLock: "+e.getMessage(),e);
  761.                                         break;
  762.                                     }
  763.    
  764.                                     gestoreMsg = new GestoreMessaggi(openspcoopstate, true,idMsgDaEliminare,Costanti.OUTBOX,this.msgDiag,null);
  765.    
  766.                                     //  rollback messaggio scaduto (eventuale profilo + accesso_pdd)
  767.                                     rollbackMessaggio = new RollbackRepositoryBuste(idMsgDaEliminare,openspcoopstate.getStatoRichiesta(),true);
  768.                                     rollbackMessaggio.rollbackBustaIntoOutBox();
  769.                                     ((StateMessage)openspcoopstate.getStatoRichiesta()).executePreparedStatement();
  770.    
  771.                                     // ollback jms receiver
  772.                                     if(receiverJMS!=null){
  773.                                         String rifMsg = gestoreMsg.getRiferimentoMessaggio();
  774.                                         if(rifMsg!=null){
  775.                                             // rollback jms receiver
  776.                                             String strMessageSelector = "ID = '"+rifMsg+"'";
  777.                                             if (receiverJMS.clean(RicezioneBuste.ID_MODULO,strMessageSelector)){
  778.                                                 this.msgDiag.addKeyword(CostantiPdD.KEY_TIMER_GESTORE_MESSAGGI_CODA_JMS_FILTRO_MSG_DA_ELIMINARE,
  779.                                                         RicezioneBuste.ID_MODULO);
  780.                                                 this.msgDiag.addKeyword(CostantiPdD.KEY_TIMER_GESTORE_MESSAGGI_RICERCA_MSG_DA_ELIMINARE_PER_RIFERIMENTO,"false");
  781.                                                 this.msgDiag.logPersonalizzato("messaggioNonConsumato.codaJMS");
  782.                                             }
  783.                                         }
  784.                                     }
  785.    
  786.                                     //  eliminazione messaggio
  787.                                     if(this.propertiesReader.isMsgGiaInProcessamentoUseLock()) {
  788.                                         gestoreMsg._deleteMessageWithoutLock();
  789.                                     }
  790.                                     else {
  791.                                         gestoreMsg.deleteMessageByOraRegistrazione(now);
  792.                                     }
  793.    
  794.                                     this.msgDiag.logPersonalizzato("eliminazioneMessaggio");
  795.                                     if(this.logQuery)
  796.                                         this.logTimer.debug(this.msgDiag.getMessaggio_replaceKeywords("eliminazioneMessaggio"));
  797.    
  798.                                     gestiti++;
  799.    
  800.                                 }catch(Exception e){
  801.                                     if(rollbackMessaggio!=null){
  802.                                         ((StateMessage)openspcoopstate.getStatoRichiesta()).closePreparedStatement();
  803.                                         rollbackMessaggio = null;
  804.                                     }
  805.                                     this.msgDiag.logErroreGenerico(e,"EliminazioneMessaggioRicezioneBusteNonGestiti("+idMsgDaEliminare+")");
  806.                                     this.logTimer.error("ErroreEliminazioneMessaggioRicezioneBusteNonGestiti("+idMsgDaEliminare+"): "+e.getMessage(),e);
  807.                                 }
  808.                             }
  809.    
  810.                             if(this.logQuery)
  811.                                 this.logTimer.info("Eliminati "+gestiti+" messaggi (non gestiti da 'RicezioneBuste') nel repository (OUTBOX)");
  812.    
  813.                         }
  814.                         else{
  815.                             if(this.logQuery)
  816.                                 this.logTimer.info("Non sono stati trovati messaggi (non gestiti da 'RicezioneBuste') da eliminare nel repository (OUTBOX)");
  817.                         }
  818.                     }finally{
  819.                         try{
  820.                             GestoreMessaggi.releaseLock(
  821.                                     this.semaphore, connectionDB, this.timerLock,
  822.                                     this.msgDiag, causaMessaggiOUTBOXNonGestitiRicezioneBuste);
  823.                         }catch(Exception e){
  824.                             // ignore
  825.                         }
  826.                     }
  827.                    
  828.                 }
  829.                 else {
  830.                     if(this.logQuery) {
  831.                         this.logTimer.info("Gestione messaggi (non gestiti) disabilitata");
  832.                     }  
  833.                 }
  834.                
  835.                

  836.                 // log finale  
  837.                 if(trovatiMessaggi){
  838.                     this.msgDiag.addKeyword(CostantiPdD.KEY_TIMER_GESTORE_MESSAGGI_NUM_MSG_INBOX_COMPLETATI, idMsgInutiliINBOX!=null ? idMsgInutiliINBOX.size()+"" : 0+"");
  839.                     this.msgDiag.addKeyword(CostantiPdD.KEY_TIMER_GESTORE_MESSAGGI_NUM_MSG_OUTBOX_COMPLETATI, idMsgInutiliOUTBOX!=null ? idMsgInutiliOUTBOX.size()+"" : 0+"");
  840.                     this.msgDiag.addKeyword(CostantiPdD.KEY_TIMER_GESTORE_MESSAGGI_NUM_MSG_INBOX_SCADUTI, idMsgScadutiINBOX!=null ? idMsgScadutiINBOX.size()+"" : 0+"");
  841.                     this.msgDiag.addKeyword(CostantiPdD.KEY_TIMER_GESTORE_MESSAGGI_NUM_MSG_OUTBOX_SCADUTI, idMsgScadutiOUTBOX!=null ? idMsgScadutiOUTBOX.size()+"" : 0+"");
  842.                     this.msgDiag.addKeyword(CostantiPdD.KEY_TIMER_GESTORE_MESSAGGI_NUM_MSG_NON_GESTITI_RICEZIONE_CONTENUTI_APPLICATIVI,
  843.                             idMsgServizioRicezioneContenutiApplicativiNonGestiti!=null ? idMsgServizioRicezioneContenutiApplicativiNonGestiti.size()+"" : 0+"");
  844.                     this.msgDiag.addKeyword(CostantiPdD.KEY_TIMER_GESTORE_MESSAGGI_NUM_MSG_NON_GESTITI_RICEZIONE_BUSTE,
  845.                             idMsgServizioRicezioneBusteNonGestiti!=null ? idMsgServizioRicezioneBusteNonGestiti.size()+"" : 0+"");
  846.                     this.msgDiag.logPersonalizzato("ricercaMessaggiDaEliminare");
  847.                 }

  848.             }







  849.             if(TimerState.ENABLED.equals(STATE_CORRELAZIONE_APPLICATIVA)) {

  850.                 //  CorrelazioniApplicative da eliminare
  851.                 GestoreCorrelazioneApplicativaConfig caConfig = new GestoreCorrelazioneApplicativaConfig();
  852.                 caConfig.setState(openspcoopstate.getStatoRichiesta());
  853.                 caConfig.setAlog(this.logTimer);
  854.                 GestoreCorrelazioneApplicativa gestoreCorrelazioneApplicativa = new GestoreCorrelazioneApplicativa(caConfig);
  855.    
  856.    
  857.                 // -- Scadute (Correlazioni per cui era stata impostata una scadenza) --
  858.                 String causaCorrelazioniApplicativeScadute = "Eliminazione correlazioni applicative scadute";
  859.                 List<Long> correlazioniScadute;
  860.                 try{
  861.                     GestoreMessaggi.acquireLock(
  862.                             this.semaphore, connectionDB, this.timerLockCorrelazioneApplicativa,
  863.                             this.msgDiag, causaCorrelazioniApplicativeScadute,
  864.                             this.propertiesReader.getGestioneSerializableDBAttesaAttiva(),
  865.                             this.propertiesReader.getGestioneSerializableDBCheckInterval());
  866.    
  867.                     correlazioniScadute = gestoreCorrelazioneApplicativa.getCorrelazioniScadute(this.limit,this.logQuery,this.orderByQuery);
  868.                     this.msgDiag.addKeyword(CostantiPdD.KEY_TIMER_GESTORE_MESSAGGI_TIPO_RICERCA_MSG_DA_ELIMINARE,"CorrelazioniApplicative");
  869.                     if(this.logQuery){
  870.                         if(correlazioniScadute.size()<=0){
  871.                             this.logTimer.info("Non sono state trovate correlazioni applicative (scadute) da eliminare");
  872.                         }
  873.                     }
  874.    
  875.                     while(correlazioniScadute.size()>0){
  876.    
  877.                         if(this.logQuery)
  878.                             this.logTimer.info("Trovate "+correlazioniScadute.size()+" correlazioni applicative (scadute) da eliminare ...");
  879.    
  880.                         this.msgDiag.addKeyword(CostantiPdD.KEY_TIMER_GESTORE_MESSAGGI_NUM_CORRELAZIONI_APPLICATIVE_SCADUTE, correlazioniScadute.size()+"");
  881.                         this.msgDiag.logPersonalizzato("ricercaCorrelazioniApplicativeScadute");
  882.    
  883.                         int gestiti = 0;
  884.                         while(correlazioniScadute.size()>0){
  885.                             Long idCorrelazioneScaduta = correlazioniScadute.remove(0);
  886.    
  887.                             String idCorrelato = null;
  888.                             String idApplicativo = null;
  889.    
  890.                             try{    
  891.                                 String [] id = gestoreCorrelazioneApplicativa.getIDMappingCorrelazioneApplicativa(idCorrelazioneScaduta);
  892.                                 idCorrelato = id[0];
  893.                                 idApplicativo = id[1];
  894.                                 try{
  895.                                     GestoreMessaggi.updateLock(
  896.                                             this.semaphore, connectionDB, this.timerLockCorrelazioneApplicativa,
  897.                                             this.msgDiag, "Eliminazione correlazione applicativa scaduta (id_applicativo:"+idApplicativo+",id_busta:"+idCorrelato+") ...");
  898.                                 }catch(Throwable e){
  899.                                     this.msgDiag.logErroreGenerico(e,"EliminazioneCorrelazioni(id_applicativo:"+idApplicativo+",id_busta:"+idCorrelato+")-UpdateLock");
  900.                                     this.logTimer.error("ErroreEliminazioneCorrelazioni(id_applicativo:"+idApplicativo+",id_busta:"+idCorrelato+")-UpdateLock: "+e.getMessage(),e);
  901.                                     break;
  902.                                 }
  903.    
  904.                                 this.msgDiag.addKeyword(CostantiPdD.KEY_ID_MESSAGGIO_DA_ELIMINARE,idCorrelato);
  905.                                 this.msgDiag.addKeyword(CostantiPdD.KEY_ID_CORRELAZIONE_APPLICATIVA,idApplicativo);
  906.    
  907.                                 gestoreCorrelazioneApplicativa.deleteCorrelazioneApplicativa(idCorrelazioneScaduta);
  908.                                 this.msgDiag.logPersonalizzato("eliminazioneCorrelazioneApplicativaScaduta");
  909.                                 if(this.logQuery)
  910.                                     this.logTimer.debug(this.msgDiag.getMessaggio_replaceKeywords("eliminazioneCorrelazioneApplicativaScaduta"));
  911.    
  912.                                 gestiti++;
  913.    
  914.                             }catch(Exception e){
  915.                                 this.msgDiag.logErroreGenerico(e,"EliminazioneCorrelazioni(id_applicativo:"+idApplicativo+",id_busta:"+idCorrelato+")");
  916.                                 this.logTimer.error("ErroreEliminazioneCorrelazioni(id_applicativo:"+idApplicativo+",id_busta:"+idCorrelato+"): "+e.getMessage(),e);
  917.                             }
  918.                         }
  919.    
  920.                         if(this.logQuery)
  921.                             this.logTimer.info("Eliminate "+gestiti+" correlazioni applicative (scadute)");
  922.    
  923.                         boolean cerca = true;
  924.                         try{
  925.                             GestoreMessaggi.updateLock(
  926.                                     this.semaphore, connectionDB, this.timerLockCorrelazioneApplicativa,
  927.                                     this.msgDiag, "Ricerca nuove correlazioni scadute  ...");
  928.                         }catch(Throwable e){
  929.                             this.msgDiag.logErroreGenerico(e,"RicercaNuoveCorrelazioni-UpdateLock");
  930.                             this.logTimer.error("RicercaNuoveCorrelazioni-UpdateLock: "+e.getMessage(),e);
  931.                             cerca = false;
  932.                         }
  933.                        
  934.                         if(cerca) {
  935.                             // Check altre correlazioni da eliminare
  936.                             correlazioniScadute = gestoreCorrelazioneApplicativa.getCorrelazioniScadute(this.limit,this.logQuery,this.orderByQuery);
  937.                         }
  938.                         else {
  939.                             correlazioniScadute = new java.util.ArrayList<Long>(); // per uscire dal while
  940.                         }
  941.                     }
  942.                 }finally{
  943.                     try{
  944.                         GestoreMessaggi.releaseLock(
  945.                                 this.semaphore, connectionDB, this.timerLockCorrelazioneApplicativa,
  946.                                 this.msgDiag, causaCorrelazioniApplicativeScadute);
  947.                     }catch(Exception e){
  948.                         // ignore
  949.                     }
  950.                 }
  951.    
  952.    
  953.                 // -- Scadute rispetto ora registrazione
  954.                 if(this.filtraCorrelazioniApplicativeScaduteRispettoOraRegistrazione){
  955.                     String causaCorrelazioniApplicativeScaduteRispettoOraRegistrazione = "Eliminazione correlazioni applicative scadute rispetto ora registrazione";
  956.                     List<Long> correlazioniScaduteRispettoOraRegistrazione = null;
  957.                     try{
  958.                         GestoreMessaggi.acquireLock(
  959.                                 this.semaphore, connectionDB, this.timerLockCorrelazioneApplicativa,
  960.                                 this.msgDiag, causaCorrelazioniApplicativeScaduteRispettoOraRegistrazione,
  961.                                 this.propertiesReader.getGestioneSerializableDBAttesaAttiva(),
  962.                                 this.propertiesReader.getGestioneSerializableDBCheckInterval());
  963.    
  964.                         correlazioniScaduteRispettoOraRegistrazione = gestoreCorrelazioneApplicativa.getCorrelazioniScaduteRispettoOraRegistrazione(this.limit, this.scadenzaCorrelazioneApplicativa,
  965.                                 this.logQuery,this.orderByQuery,this.filtraCorrelazioniApplicativeScaduteRispettoOraRegistrazione_escludiCorrelazioniConScadenzaImpostata);
  966.                         if(this.logQuery){
  967.                             if(correlazioniScaduteRispettoOraRegistrazione.size()<=0){
  968.                                 this.logTimer.info("Non sono state trovate correlazioni applicative (scadute rispetto ora registrazione) da eliminare");
  969.                             }
  970.                         }
  971.                         while(correlazioniScaduteRispettoOraRegistrazione.size()>0){
  972.    
  973.                             if(this.logQuery)
  974.                                 this.logTimer.info("Trovate "+correlazioniScaduteRispettoOraRegistrazione.size()+" correlazioni applicative (scadute rispetto ora registrazione) da eliminare ...");
  975.    
  976.                             this.msgDiag.addKeyword(CostantiPdD.KEY_TIMER_GESTORE_MESSAGGI_NUM_CORRELAZIONI_APPLICATIVE_SCADUTE, correlazioniScaduteRispettoOraRegistrazione.size()+"");
  977.                             this.msgDiag.logPersonalizzato("ricercaCorrelazioniApplicativeScaduteRispettoOraRegistrazione");
  978.    
  979.                             int gestiti = 0;
  980.                             while(correlazioniScaduteRispettoOraRegistrazione.size()>0){
  981.                                 Long idCorrelazioneScaduta = correlazioniScaduteRispettoOraRegistrazione.remove(0);
  982.    
  983.                                 String idCorrelato = null;
  984.                                 String idApplicativo = null;
  985.    
  986.                                 try{
  987.                                     String [] id = gestoreCorrelazioneApplicativa.getIDMappingCorrelazioneApplicativa(idCorrelazioneScaduta);
  988.                                     idCorrelato = id[0];
  989.                                     idApplicativo = id[1];
  990.                                     try{
  991.                                         GestoreMessaggi.updateLock(
  992.                                                 this.semaphore, connectionDB, this.timerLockCorrelazioneApplicativa,
  993.                                                 this.msgDiag, "Eliminazione correlazione applicativa scaduta rispetto ora registrazione (id_applicativo:"+idApplicativo+",id_busta:"+idCorrelato+") ...");
  994.                                     }catch(Throwable e){
  995.                                         this.msgDiag.logErroreGenerico(e,"EliminazioneCorrelazioniRispettoOraRegistrazione(id_applicativo:"+idApplicativo+",id_busta:"+idCorrelato+")-UpdateLock");
  996.                                         this.logTimer.error("ErroreEliminazioneCorrelazioniRispettoOraRegistrazione(id_applicativo:"+idApplicativo+",id_busta:"+idCorrelato+")-UpdateLock: "+e.getMessage(),e);
  997.                                         break;
  998.                                     }
  999.    
  1000.                                     this.msgDiag.addKeyword(CostantiPdD.KEY_ID_MESSAGGIO_DA_ELIMINARE,idCorrelato);
  1001.                                     this.msgDiag.addKeyword(CostantiPdD.KEY_ID_CORRELAZIONE_APPLICATIVA,idApplicativo);
  1002.    
  1003.                                     gestoreCorrelazioneApplicativa.deleteCorrelazioneApplicativa(idCorrelazioneScaduta);
  1004.                                     this.msgDiag.logPersonalizzato("eliminazioneCorrelazioneApplicativaScaduta");
  1005.                                     if(this.logQuery)
  1006.                                         this.logTimer.debug(this.msgDiag.getMessaggio_replaceKeywords("eliminazioneCorrelazioneApplicativaScaduta"));
  1007.    
  1008.                                     gestiti++;
  1009.                                    
  1010.                                 }catch(Exception e){
  1011.                                     this.msgDiag.logErroreGenerico(e,"EliminazioneCorrelazioniRispettoOraRegistrazione(id_applicativo:"+idApplicativo+",id_busta:"+idCorrelato+")");
  1012.                                     this.logTimer.error("ErroreEliminazioneCorrelazioniRispettoOraRegistrazione(id_applicativo:"+idApplicativo+",id_busta:"+idCorrelato+"): "+e.getMessage(),e);
  1013.                                 }
  1014.                             }
  1015.    
  1016.                             if(this.logQuery)
  1017.                                 this.logTimer.info("Eliminate "+gestiti+" correlazioni applicative (scadute rispetto ora registrazione)");
  1018.    
  1019.                             boolean cerca = true;
  1020.                             try{
  1021.                                 GestoreMessaggi.updateLock(
  1022.                                         this.semaphore, connectionDB, this.timerLockCorrelazioneApplicativa,
  1023.                                         this.msgDiag, "Ricerca nuove correlazioni scadute rispetto ora registrazione ...");                                                
  1024.                             }catch(Throwable e){
  1025.                                 this.msgDiag.logErroreGenerico(e,"RicercaNuoveCorrelazioni-UpdateLock");
  1026.                                 this.logTimer.error("RicercaNuoveCorrelazioni-UpdateLock: "+e.getMessage(),e);
  1027.                                 cerca = false;
  1028.                             }
  1029.                            
  1030.                             if(cerca) {
  1031.                                 // Check altre correlazioni da eliminare
  1032.                                 correlazioniScaduteRispettoOraRegistrazione =
  1033.                                         gestoreCorrelazioneApplicativa.getCorrelazioniScaduteRispettoOraRegistrazione(this.limit, this.scadenzaCorrelazioneApplicativa,
  1034.                                                 this.logQuery,this.orderByQuery,this.filtraCorrelazioniApplicativeScaduteRispettoOraRegistrazione_escludiCorrelazioniConScadenzaImpostata);
  1035.                             }
  1036.                             else {
  1037.                                 correlazioniScaduteRispettoOraRegistrazione = new java.util.ArrayList<Long>(); // per uscire dal while
  1038.                             }
  1039.                         }
  1040.                     }finally{
  1041.                         try{
  1042.                             GestoreMessaggi.releaseLock(
  1043.                                     this.semaphore, connectionDB, this.timerLockCorrelazioneApplicativa,
  1044.                                     this.msgDiag, causaCorrelazioniApplicativeScaduteRispettoOraRegistrazione);
  1045.                         }catch(Exception e){
  1046.                             // ignore
  1047.                         }
  1048.                     }
  1049.                 }
  1050.             }
  1051.             else {
  1052.                 if(this.logQuery) {
  1053.                     this.logTimer.info("Gestione correlazione applicativa disabilitata");
  1054.                 }  
  1055.             }


  1056.             // end
  1057.             long endControlloRepositoryMessaggi = DateManager.getTimeMillis();
  1058.             long diff = (endControlloRepositoryMessaggi-startControlloRepositoryMessaggi);
  1059.             this.logTimer.info("Controllo Repository Messaggi terminato in "+Utilities.convertSystemTimeIntoStringMillisecondi(diff, true));

  1060.         }
  1061.         catch(TimerLockNotAvailableException t) {
  1062.             // msg diagnostico emesso durante l'emissione dell'eccezione
  1063.             this.logTimer.info(t.getMessage(),t);
  1064.         }
  1065.         catch (Exception e) {
  1066.             this.msgDiag.logErroreGenerico(e,"GestioneMessaggi");
  1067.             this.logTimer.error("Riscontrato errore durante la gestione del repository dei messaggi: "+ e.getMessage(),e);
  1068.         }finally{
  1069.             if(openspcoopstate!=null)
  1070.                 openspcoopstate.releaseResource();
  1071.         }


  1072.         try {
  1073.             if(TimerState.ENABLED.equals(STATE_VERIFICA_CONNESSIONI_ATTIVE)) {

  1074.                 startControlloRepositoryMessaggi = DateManager.getTimeMillis();
  1075.                 this.logTimer.info("Verifico connessioni attive...");

  1076.                 // Connettori: porta delegata
  1077.                 List<String> identificatoriConnettoriPD = RepositoryConnettori.getIdentificatoriConnettori_pd();
  1078.                 if(this.logQuery){
  1079.                     if(identificatoriConnettoriPD==null || identificatoriConnettoriPD.isEmpty()){
  1080.                         this.logTimer.info("Non sono state trovate connessioni attive sulle PorteDelegate");
  1081.                     }
  1082.                 }
  1083.                 if(identificatoriConnettoriPD!=null){

  1084.                     boolean verificaEffettuata = false;
  1085.                     if(this.logQuery){
  1086.                         if(!identificatoriConnettoriPD.isEmpty()){
  1087.                             this.logTimer.info("Sono state trovate connessioni attive sulle PorteDelegate, verifica in corso ...");
  1088.                         }
  1089.                     }

  1090.                     for (String identificatoreConnessione : identificatoriConnettoriPD) {
  1091.                         verificaEffettuata = true;
  1092.                         String tipoConnettore = null;
  1093.                         IConnettore connettore = null;
  1094.                         try{
  1095.                             connettore = RepositoryConnettori.getConnettorePD(identificatoreConnessione);
  1096.                             // puo' essere stato eliminato nel frattempo
  1097.                             if(connettore!=null){
  1098.                                 tipoConnettore = connettore.getClass().getSimpleName();
  1099.                             }
  1100.                             int millisecondiScadenza = this.propertiesReader.getConnectionLife_inoltroBuste();
  1101.                             Date now = DateManager.getDate();
  1102.                             Date scadenza = new Date(now.getTime()-millisecondiScadenza);
  1103.                             String tipoConnessione = "tipo:"+tipoConnettore+" porta:delegata id_busta:"+identificatoreConnessione;
  1104.                             this.logTimer.debug("--------------------------------------");
  1105.                             this.logTimer.debug(tipoConnessione);
  1106.                             this.logTimer.debug("SCADENZA ["+scadenza.toString()+"]   CONNETTORE ["+((connettore!=null && connettore.getCreationDate()!=null) ? connettore.getCreationDate().toString() : null)+"]");
  1107.                             if(connettore!=null && connettore.getCreationDate()!=null && connettore.getCreationDate().before(scadenza)){
  1108.                                 this.logTimer.info("SCADUTO");
  1109.                                 this.msgDiag.addKeyword(CostantiPdD.KEY_TIMER_GESTORE_MESSAGGI_TIPO_CONNESSIONE,tipoConnessione);
  1110.                                 this.msgDiag.addKeyword(CostantiPdD.KEY_TIMER_GESTORE_MESSAGGI_DATA_CREAZIONE_CONNESSIONE,connettore.getCreationDate().toString());
  1111.                                 this.msgDiag.logPersonalizzato("connessioneScaduta.EliminazioneInCorso");

  1112.                                 connettore = RepositoryConnettori.removeConnettorePD(identificatoreConnessione);
  1113.                                 if(connettore!=null){
  1114.                                     connettore.disconnect();
  1115.                                 }

  1116.                                 this.msgDiag.logPersonalizzato("connessioneScaduta.EliminazioneEffettuata");
  1117.                             }
  1118.                             else{
  1119.                                 if(connettore==null) {
  1120.                                     this.logTimer.debug("NON PIU' PRESENTE");
  1121.                                 }
  1122.                                 else if(connettore.getCreationDate()==null) {
  1123.                                     this.logTimer.debug("SENZA DATA DI CREAZIONE");
  1124.                                 }
  1125.                                 else {
  1126.                                     this.logTimer.debug("NON SCADUTO");
  1127.                                 }
  1128.                             }

  1129.                             this.logTimer.debug("--------------------------------------");

  1130.                         }catch(Exception e){
  1131.                             // non mi interessa gestire l'eventuale eccezione, a parte registrarla
  1132.                             if(tipoConnettore!=null){
  1133.                                 String msgErrore = "EliminazioneConnessione(tipo:"+tipoConnettore+" porta:delegata id_busta:"+identificatoreConnessione+")";
  1134.                                 this.msgDiag.logErroreGenerico(e,msgErrore);
  1135.                                 this.logTimer.error("Errore"+msgErrore+": "+e.getMessage(),e);
  1136.                             }
  1137.                             else{
  1138.                                 String msgErrore = "EliminazioneConnessione(porta:delegata id_busta:"+identificatoreConnessione+")";
  1139.                                 this.msgDiag.logErroreGenerico(e,msgErrore);
  1140.                                 this.logTimer.error("Errore"+msgErrore+": "+e.getMessage(),e);
  1141.                             }
  1142.                         }
  1143.                         catch(Throwable e){
  1144.                             // non mi interessa gestire l'eventuale eccezione, a parte registrarla
  1145.                             if(tipoConnettore!=null){
  1146.                                 String msgErrore = "EliminazioneConnessione(tipo:"+tipoConnettore+" porta:delegata id_busta:"+identificatoreConnessione+")";
  1147.                                 this.msgDiag.logErroreGenerico(e,msgErrore);
  1148.                                 this.logTimer.error("Errore"+msgErrore+": "+e.getMessage(),e);
  1149.                             }
  1150.                             else{
  1151.                                 String msgErrore = "EliminazioneConnessione(porta:delegata id_busta:"+identificatoreConnessione+")";
  1152.                                 this.msgDiag.logErroreGenerico(e,msgErrore);
  1153.                                 this.logTimer.error("Errore"+msgErrore+": "+e.getMessage(),e);
  1154.                             }
  1155.                         }
  1156.                     }

  1157.                     if(this.logQuery){
  1158.                         if(verificaEffettuata){
  1159.                             this.logTimer.info("Terminata verifica connessioni attive sulle PorteDelegate");
  1160.                         }
  1161.                     }
  1162.                 }


  1163.                 // Connettori: porta applicativa
  1164.                 List<String> identificatoriConnettoriPA = RepositoryConnettori.getIdentificatoriConnettori_pa();
  1165.                 if(this.logQuery){
  1166.                     if(identificatoriConnettoriPA==null || identificatoriConnettoriPA.isEmpty()==false){
  1167.                         this.logTimer.info("Non sono state trovate connessioni attive sulle PorteApplicative");
  1168.                     }
  1169.                 }
  1170.                 if(identificatoriConnettoriPA!=null){

  1171.                     boolean verificaEffettuata = false;
  1172.                     if(this.logQuery){
  1173.                         if(!identificatoriConnettoriPA.isEmpty()){
  1174.                             this.logTimer.info("Sono state trovate connessioni attive sulle PorteApplicative, verifica in corso ...");
  1175.                         }
  1176.                     }

  1177.                     for (String identificatoreConnessione : identificatoriConnettoriPA) {
  1178.                         verificaEffettuata = true;
  1179.                         String tipoConnettore = null;
  1180.                         IConnettore connettore = null;
  1181.                         try{
  1182.                             connettore = RepositoryConnettori.getConnettorePA(identificatoreConnessione);
  1183.                             // puo' essere stato eliminato nel frattempo
  1184.                             if(connettore!=null){
  1185.                                 tipoConnettore = connettore.getClass().getSimpleName();
  1186.                             }
  1187.                             int millisecondiScadenza = this.propertiesReader.getConnectionLife_consegnaContenutiApplicativi();
  1188.                             Date now = DateManager.getDate();
  1189.                             Date scadenza = new Date(now.getTime()-millisecondiScadenza);
  1190.                             String tipoConnessione = "tipo:"+tipoConnettore+" porta:applicativa id_busta:"+identificatoreConnessione;
  1191.                             this.logTimer.debug("--------------------------------------");
  1192.                             this.logTimer.debug(tipoConnessione);
  1193.                             this.logTimer.debug("SCADENZA ["+scadenza.toString()+"]   CONNETTORE ["+((connettore!=null && connettore.getCreationDate()!=null) ? connettore.getCreationDate().toString() : null)+"]");
  1194.                             if(connettore!=null && connettore.getCreationDate()!=null && connettore.getCreationDate().before(scadenza)){
  1195.                                 this.logTimer.info("SCADUTO");
  1196.                                 this.msgDiag.addKeyword(CostantiPdD.KEY_TIMER_GESTORE_MESSAGGI_TIPO_CONNESSIONE,tipoConnessione);
  1197.                                 this.msgDiag.addKeyword(CostantiPdD.KEY_TIMER_GESTORE_MESSAGGI_DATA_CREAZIONE_CONNESSIONE,connettore.getCreationDate().toString());
  1198.                                 this.msgDiag.logPersonalizzato("connessioneScaduta.EliminazioneInCorso");

  1199.                                 connettore = RepositoryConnettori.removeConnettorePA(identificatoreConnessione);
  1200.                                 if(connettore!=null){
  1201.                                     connettore.disconnect();
  1202.                                 }

  1203.                                 this.msgDiag.logPersonalizzato("connessioneScaduta.EliminazioneEffettuata");
  1204.                             }
  1205.                             else{
  1206.                                 if(connettore==null) {
  1207.                                     this.logTimer.debug("NON PIU' PRESENTE");
  1208.                                 }
  1209.                                 else if(connettore.getCreationDate()==null) {
  1210.                                     this.logTimer.debug("SENZA DATA DI CREAZIONE");
  1211.                                 }
  1212.                                 else {
  1213.                                     this.logTimer.debug("NON SCADUTO");
  1214.                                 }
  1215.                             }

  1216.                             this.logTimer.debug("--------------------------------------");

  1217.                         }catch(Exception e){
  1218.                             // non mi interessa gestire l'eventuale eccezione, a parte registrarla
  1219.                             if(tipoConnettore!=null){
  1220.                                 String msgErrore = "EliminazioneConnessione(tipo:"+tipoConnettore+" porta:applicativa id_busta:"+identificatoreConnessione+")";
  1221.                                 this.msgDiag.logErroreGenerico(e,msgErrore);
  1222.                                 this.logTimer.error("Errore"+msgErrore+": "+e.getMessage(),e);
  1223.                             }
  1224.                             else{
  1225.                                 String msgErrore = "EliminazioneConnessione(porta:applicativa id_busta:"+identificatoreConnessione+")";
  1226.                                 this.msgDiag.logErroreGenerico(e,msgErrore);
  1227.                                 this.logTimer.error("Errore"+msgErrore+": "+e.getMessage(),e);
  1228.                             }
  1229.                         }
  1230.                         catch(Throwable e){
  1231.                             // non mi interessa gestire l'eventuale eccezione, a parte registrarla
  1232.                             if(tipoConnettore!=null){
  1233.                                 String msgErrore = "EliminazioneConnessione(tipo:"+tipoConnettore+" porta:applicativa id_busta:"+identificatoreConnessione+")";
  1234.                                 this.msgDiag.logErroreGenerico(e,msgErrore);
  1235.                                 this.logTimer.error("Errore"+msgErrore+": "+e.getMessage(),e);
  1236.                             }  
  1237.                             else{
  1238.                                 String msgErrore = "EliminazioneConnessione(porta:applicativa id_busta:"+identificatoreConnessione+")";
  1239.                                 this.msgDiag.logErroreGenerico(e,msgErrore);
  1240.                                 this.logTimer.error("Errore"+msgErrore+": "+e.getMessage(),e);
  1241.                             }
  1242.                         }
  1243.                     }

  1244.                     if(this.logQuery){
  1245.                         if(verificaEffettuata){
  1246.                             this.logTimer.info("Terminata verifica connessioni attive sulle PorteApplicative");
  1247.                         }
  1248.                     }


  1249.                 }

  1250.                 // end
  1251.                 long endControlloRepositoryMessaggi = DateManager.getTimeMillis();
  1252.                 long diff = (endControlloRepositoryMessaggi-startControlloRepositoryMessaggi);
  1253.                 this.logTimer.info("Terminata verifica connessioni attive in "+Utilities.convertSystemTimeIntoStringMillisecondi(diff, true));
  1254.             }
  1255.             else{
  1256.                 this.logTimer.warn("Non verifico connessioni attive");
  1257.             }

  1258.         }
  1259.         catch (Exception e) {
  1260.             this.msgDiag.logErroreGenerico(e,"GestioneMessaggi");
  1261.             this.logTimer.error("Riscontrato errore durante la gestione del repository dei messaggi: "+ e.getMessage(),e);
  1262.         }
  1263.     }

  1264. }