TimerConsegnaContenutiApplicativiThread.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 org.slf4j.Logger;

  22. import java.sql.Timestamp;

  23. import org.openspcoop2.pdd.config.ConfigurazioneCoda;
  24. import org.openspcoop2.pdd.config.ConfigurazionePdDManager;
  25. import org.openspcoop2.pdd.config.OpenSPCoop2Properties;
  26. import org.openspcoop2.pdd.core.CostantiPdD;
  27. import org.openspcoop2.pdd.logger.MsgDiagnosticiProperties;
  28. import org.openspcoop2.pdd.logger.MsgDiagnostico;
  29. import org.openspcoop2.pdd.logger.OpenSPCoop2Logger;
  30. import org.openspcoop2.pdd.services.OpenSPCoop2Startup;
  31. import org.openspcoop2.protocol.registry.RegistroServiziManager;
  32. import org.openspcoop2.utils.Utilities;
  33. import org.openspcoop2.utils.UtilsException;
  34. import org.openspcoop2.utils.date.DateUtils;
  35. import org.openspcoop2.utils.threads.GestoreCodaRunnable;
  36. import org.openspcoop2.utils.threads.RunnableLogger;

  37. /**
  38.  * Thread per la gestione del Threshold
  39.  *
  40.  *  
  41.  * @author Poli Andrea (apoli@link.it)
  42.  * @author $Author$
  43.  * @version $Rev$, $Date$
  44.  */
  45. public class TimerConsegnaContenutiApplicativiThread extends GestoreCodaRunnable{

  46.     /** Variabile che indica il Nome del modulo dell'architettura di OpenSPCoop rappresentato da questa classe */
  47.     public static final String ID_MODULO = "TimerConsegnaContenutiApplicativi";
  48.     public static Timestamp LOCK_CONSEGNA_FUTURA = null;
  49.     static {
  50.         try {
  51.             LOCK_CONSEGNA_FUTURA = new Timestamp(DateUtils.getSimpleDateFormatDay().parse("2200-12-31").getTime());
  52.         }catch(Throwable t) {
  53.             throw new RuntimeException(t.getMessage(),t);
  54.         }
  55.     }
  56.    
  57.     /** Properties Reader */
  58.     @SuppressWarnings("unused")
  59.     private OpenSPCoop2Properties propertiesReader;
  60.     /** MsgDiagnostico */
  61.     private MsgDiagnostico msgDiag;
  62.    
  63.     /** Logger utilizzato per debug. */
  64.     private Logger log = null;

  65.     /** Indicazione se deve essere effettuato il debug */
  66.     private boolean debug = false;
  67.     /** Numero di messaggi prelevati sulla singola query */
  68.     private int limit = CostantiPdD.LIMIT_MESSAGGI_GESTORI;

  69.     private ConfigurazioneCoda configurazioneCoda;
  70.     public String getQueueConfig() {
  71.         return this.configurazioneCoda.toString(false, ", ");
  72.     }

  73.     private static String getModuleId() throws TimerException {
  74.        
  75.         // Aspetto inizializzazione di OpenSPCoop (aspetto mezzo minuto e poi segnalo errore)
  76.         int attesa = 90;
  77.         int secondi = 0;
  78.         while( (OpenSPCoop2Startup.initialize==false) && (secondi<attesa) ){
  79.             Utilities.sleep(1000);
  80.             secondi++;
  81.         }
  82.         if(secondi>= 90){
  83.             throw new TimerException("Riscontrata inizializzazione OpenSPCoop non effettuata");
  84.         }  
  85.        
  86.         return ID_MODULO;
  87.     }
  88.    
  89.     private static MsgDiagnostico msgDiag_staticInstance = null;
  90.     private static synchronized MsgDiagnostico getMsgDiagnostico() throws TimerException {
  91.         if(msgDiag_staticInstance==null) {
  92.             try {
  93.                 msgDiag_staticInstance = MsgDiagnostico.newInstance(TimerConsegnaContenutiApplicativiThread.ID_MODULO);
  94.                 msgDiag_staticInstance.setPrefixMsgPersonalizzati(MsgDiagnosticiProperties.MSG_DIAG_TIMER_CONSEGNA_CONTENUTI_APPLICATIVI);
  95.                 msgDiag_staticInstance.addKeyword(CostantiPdD.KEY_TIMER, ID_MODULO);
  96.             } catch (Exception e) {
  97.                 String msgErrore = "Riscontrato Errore durante l'inizializzazione del MsgDiagnostico";
  98.                 throw new TimerException(msgErrore,e);
  99.             }
  100.         }
  101.         return msgDiag_staticInstance;
  102.     }
  103.    
  104.     private static TimerConsegnaContenutiApplicativi newTimerConsegnaContenutiApplicativi(ConfigurazioneCoda configurazioneCoda) throws TimerException {
  105.         return new TimerConsegnaContenutiApplicativi(configurazioneCoda, getMsgDiagnostico(),
  106.                 new RunnableLogger(ID_MODULO, OpenSPCoop2Logger.getLoggerOpenSPCoopConsegnaContenuti(configurazioneCoda.isDebug())),
  107.                 new RunnableLogger(ID_MODULO, OpenSPCoop2Logger.getLoggerOpenSPCoopConsegnaContenutiSql(configurazioneCoda.isDebug())),
  108.                 OpenSPCoop2Properties.getInstance(),
  109.                 ConfigurazionePdDManager.getInstance(),
  110.                 RegistroServiziManager.getInstance());
  111.     }
  112.    
  113.    
  114.     /** Costruttore */
  115.     public TimerConsegnaContenutiApplicativiThread(ConfigurazioneCoda configurazioneCoda) throws TimerException, UtilsException{
  116.        
  117.         super(getModuleId(),
  118.                 configurazioneCoda.getPoolSize(),
  119.                 configurazioneCoda.getQueueSize(),
  120.                 configurazioneCoda.getNextMessages_limit(),
  121.                 configurazioneCoda.getNextMessages_intervalloControllo(),
  122.                 newTimerConsegnaContenutiApplicativi(configurazioneCoda),
  123.                 OpenSPCoop2Logger.getLoggerOpenSPCoopConsegnaContenuti(configurazioneCoda.isDebug()));
  124.            
  125.         this.propertiesReader = OpenSPCoop2Properties.getInstance();
  126.        
  127.         this.configurazioneCoda = configurazioneCoda;
  128.        
  129.         this.debug = configurazioneCoda.isDebug();
  130.        
  131.         this.log = OpenSPCoop2Logger.getLoggerOpenSPCoopConsegnaContenuti(this.debug);
  132.        
  133.         try {
  134.             this.msgDiag = getMsgDiagnostico();
  135.         } catch (Exception e) {
  136.             String msgErrore = "Riscontrato Errore durante l'inizializzazione del MsgDiagnostico";
  137.             this.log.error(msgErrore,e);
  138.             throw new TimerException(msgErrore,e);
  139.         }

  140.         this.msgDiag.logPersonalizzato("avvioInCorso");
  141.         this.log.info(this.msgDiag.getMessaggio_replaceKeywords("avvioInCorso"));
  142.        
  143.         this.setTimeout(configurazioneCoda.getNextMessages_intervalloControllo());
  144.         String s = "secondi";
  145.         if(this.getTimeout() == 1)
  146.             s = "secondo";
  147.         this.msgDiag.addKeyword(CostantiPdD.KEY_TIMEOUT, this.getTimeout()+" "+s);
  148.        
  149.         this.limit = configurazioneCoda.getNextMessages_limit();
  150.         if(this.limit<=0){
  151.             this.limit = CostantiPdD.LIMIT_MESSAGGI_GESTORI;
  152.         }
  153.         this.msgDiag.addKeyword(CostantiPdD.KEY_LIMIT, this.limit+"");
  154.        
  155.         this.msgDiag.logPersonalizzato("avvioEffettuato");
  156.         this.log.info(this.msgDiag.getMessaggio_replaceKeywords("avvioEffettuato"));
  157.     }
  158.    
  159. }