OpenSPCoop2Startup.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.services;

  21. import java.io.ByteArrayOutputStream;
  22. import java.io.File;
  23. import java.io.FileInputStream;
  24. import java.io.FileOutputStream;
  25. import java.io.OutputStream;
  26. import java.rmi.RemoteException;
  27. import java.security.Provider;
  28. import java.security.SecureRandom;
  29. import java.security.Security;
  30. import java.sql.Connection;
  31. import java.util.ArrayList;
  32. import java.util.Enumeration;
  33. import java.util.HashMap;
  34. import java.util.List;
  35. import java.util.Locale;
  36. import java.util.Map;
  37. import java.util.Properties;
  38. import java.util.logging.Level;

  39. import javax.servlet.ServletContext;
  40. import javax.servlet.ServletContextEvent;
  41. import javax.servlet.ServletContextListener;
  42. import javax.xml.namespace.QName;
  43. import javax.xml.soap.SOAPElement;
  44. import javax.xml.soap.SOAPHeader;
  45. import javax.xml.soap.SOAPHeaderElement;
  46. import javax.xml.xpath.XPathFactory;

  47. import org.apache.commons.lang.StringUtils;
  48. import org.apache.cxf.rs.security.jose.common.KeyManagementUtils;
  49. import org.apache.wss4j.dom.handler.WSHandler;
  50. import org.bouncycastle.crypto.CryptoServicesRegistrar;
  51. import org.jminix.console.tool.StandaloneMiniConsole;
  52. import org.openspcoop2.core.commons.CoreException;
  53. import org.openspcoop2.core.commons.DBUtils;
  54. import org.openspcoop2.core.config.AccessoConfigurazionePdD;
  55. import org.openspcoop2.core.config.AccessoDatiAttributeAuthority;
  56. import org.openspcoop2.core.config.AccessoDatiAutenticazione;
  57. import org.openspcoop2.core.config.AccessoDatiAutorizzazione;
  58. import org.openspcoop2.core.config.AccessoDatiGestioneToken;
  59. import org.openspcoop2.core.config.AccessoDatiKeystore;
  60. import org.openspcoop2.core.config.AccessoDatiRichieste;
  61. import org.openspcoop2.core.config.AccessoRegistro;
  62. import org.openspcoop2.core.config.AccessoRegistroRegistro;
  63. import org.openspcoop2.core.config.constants.CostantiConfigurazione;
  64. import org.openspcoop2.core.config.constants.StatoFunzionalitaConWarning;
  65. import org.openspcoop2.core.config.driver.ExtendedInfoManager;
  66. import org.openspcoop2.core.config.driver.db.DriverConfigurazioneDB;
  67. import org.openspcoop2.core.constants.CostantiDB;
  68. import org.openspcoop2.core.constants.CostantiLabel;
  69. import org.openspcoop2.core.controllo_traffico.ConfigurazioneGenerale;
  70. import org.openspcoop2.core.controllo_traffico.constants.CacheAlgorithm;
  71. import org.openspcoop2.core.controllo_traffico.driver.PolicyGroupByActiveThreadsType;
  72. import org.openspcoop2.core.eventi.Evento;
  73. import org.openspcoop2.core.eventi.constants.CodiceEventoStatoGateway;
  74. import org.openspcoop2.core.eventi.constants.TipoEvento;
  75. import org.openspcoop2.core.eventi.constants.TipoSeverita;
  76. import org.openspcoop2.core.eventi.utils.SeveritaConverter;
  77. import org.openspcoop2.core.registry.driver.IDAccordoCooperazioneFactory;
  78. import org.openspcoop2.core.registry.driver.IDAccordoFactory;
  79. import org.openspcoop2.core.registry.driver.db.DriverRegistroServiziDB;
  80. import org.openspcoop2.core.statistiche.constants.TipoIntervalloStatistico;
  81. import org.openspcoop2.message.AbstractBaseOpenSPCoop2Message;
  82. import org.openspcoop2.message.AbstractBaseOpenSPCoop2MessageDynamicContent;
  83. import org.openspcoop2.message.AttachmentsProcessingMode;
  84. import org.openspcoop2.message.OpenSPCoop2Message;
  85. import org.openspcoop2.message.OpenSPCoop2MessageFactory;
  86. import org.openspcoop2.message.OpenSPCoop2MessageFactory_impl;
  87. import org.openspcoop2.message.constants.MessageRole;
  88. import org.openspcoop2.message.constants.MessageType;
  89. import org.openspcoop2.message.rest.AbstractLazyContent;
  90. import org.openspcoop2.message.soap.SoapUtils;
  91. import org.openspcoop2.message.soap.reader.OpenSPCoop2MessageSoapStreamReader;
  92. import org.openspcoop2.monitor.engine.dynamic.CorePluginLoader;
  93. import org.openspcoop2.pdd.config.ClassNameProperties;
  94. import org.openspcoop2.pdd.config.ConfigurazioneCoda;
  95. import org.openspcoop2.pdd.config.ConfigurazionePdDManager;
  96. import org.openspcoop2.pdd.config.ConfigurazionePdDReader;
  97. import org.openspcoop2.pdd.config.DBConsegneMessageBoxManager;
  98. import org.openspcoop2.pdd.config.DBConsegnePreseInCaricoManager;
  99. import org.openspcoop2.pdd.config.DBManager;
  100. import org.openspcoop2.pdd.config.DBStatisticheManager;
  101. import org.openspcoop2.pdd.config.DBTransazioniManager;
  102. import org.openspcoop2.pdd.config.DynamicClusterManager;
  103. import org.openspcoop2.pdd.config.GeneralInstanceProperties;
  104. import org.openspcoop2.pdd.config.OpenSPCoop2Properties;
  105. import org.openspcoop2.pdd.config.PDNDConfig;
  106. import org.openspcoop2.pdd.config.PDNDConfigUtilities;
  107. import org.openspcoop2.pdd.config.PddProperties;
  108. import org.openspcoop2.pdd.config.PreLoadingConfig;
  109. import org.openspcoop2.pdd.config.QueueManager;
  110. import org.openspcoop2.pdd.config.SystemPropertiesManager;
  111. import org.openspcoop2.pdd.config.dynamic.PddPluginLoader;
  112. import org.openspcoop2.pdd.core.CostantiPdD;
  113. import org.openspcoop2.pdd.core.FileSystemSerializer;
  114. import org.openspcoop2.pdd.core.GestoreMessaggi;
  115. import org.openspcoop2.pdd.core.GestoreRichieste;
  116. import org.openspcoop2.pdd.core.PdDContext;
  117. import org.openspcoop2.pdd.core.StatoServiziPdD;
  118. import org.openspcoop2.pdd.core.autenticazione.GestoreAutenticazione;
  119. import org.openspcoop2.pdd.core.autorizzazione.GestoreAutorizzazione;
  120. import org.openspcoop2.pdd.core.behaviour.built_in.load_balance.GestoreLoadBalancerCaching;
  121. import org.openspcoop2.pdd.core.byok.BYOKMapProperties;
  122. import org.openspcoop2.pdd.core.byok.DriverBYOK;
  123. import org.openspcoop2.pdd.core.byok.DriverBYOKUtilities;
  124. import org.openspcoop2.pdd.core.cache.GestoreCacheCleaner;
  125. import org.openspcoop2.pdd.core.controllo_traffico.ConfigurazioneGatewayControlloTraffico;
  126. import org.openspcoop2.pdd.core.controllo_traffico.GestoreControlloTraffico;
  127. import org.openspcoop2.pdd.core.controllo_traffico.INotify;
  128. import org.openspcoop2.pdd.core.controllo_traffico.NotificatoreEventi;
  129. import org.openspcoop2.pdd.core.controllo_traffico.policy.DatiStatisticiDAOManager;
  130. import org.openspcoop2.pdd.core.controllo_traffico.policy.GestoreCacheControlloTraffico;
  131. import org.openspcoop2.pdd.core.controllo_traffico.policy.driver.GestorePolicyAttive;
  132. import org.openspcoop2.pdd.core.controllo_traffico.policy.driver.GestorePolicyAttiveInMemory;
  133. import org.openspcoop2.pdd.core.controllo_traffico.policy.driver.hazelcast.HazelcastManager;
  134. import org.openspcoop2.pdd.core.controllo_traffico.policy.driver.redisson.RedissonManager;
  135. import org.openspcoop2.pdd.core.dynamic.DynamicUtils;
  136. import org.openspcoop2.pdd.core.eventi.GestoreEventi;
  137. import org.openspcoop2.pdd.core.handlers.ExitContext;
  138. import org.openspcoop2.pdd.core.handlers.GeneratoreCasualeDate;
  139. import org.openspcoop2.pdd.core.handlers.GestoreHandlers;
  140. import org.openspcoop2.pdd.core.handlers.HandlerException;
  141. import org.openspcoop2.pdd.core.handlers.InitContext;
  142. import org.openspcoop2.pdd.core.integrazione.peer.RegexpPeerHeaderDescriptor;
  143. import org.openspcoop2.pdd.core.jmx.AccessoRegistroServizi;
  144. import org.openspcoop2.pdd.core.jmx.ConfigurazioneSistema;
  145. import org.openspcoop2.pdd.core.jmx.GestoreRisorseJMXGovWay;
  146. import org.openspcoop2.pdd.core.jmx.InformazioniStatoPorta;
  147. import org.openspcoop2.pdd.core.jmx.InformazioniStatoPortaCache;
  148. import org.openspcoop2.pdd.core.jmx.StatoServiziJMXResource;
  149. import org.openspcoop2.pdd.core.keystore.GestoreKeystoreCaching;
  150. import org.openspcoop2.pdd.core.keystore.RemoteStoreProviderDriver;
  151. import org.openspcoop2.pdd.core.response_caching.GestoreCacheResponseCaching;
  152. import org.openspcoop2.pdd.core.state.OpenSPCoopStateful;
  153. import org.openspcoop2.pdd.core.token.GestoreToken;
  154. import org.openspcoop2.pdd.core.transazioni.TransactionContext;
  155. import org.openspcoop2.pdd.logger.DiagnosticInputStream;
  156. import org.openspcoop2.pdd.logger.LogLevels;
  157. import org.openspcoop2.pdd.logger.MsgDiagnosticiProperties;
  158. import org.openspcoop2.pdd.logger.MsgDiagnostico;
  159. import org.openspcoop2.pdd.logger.OpenSPCoop2Logger;
  160. import org.openspcoop2.pdd.logger.filetrace.FileTraceConfig;
  161. import org.openspcoop2.pdd.mdb.ConsegnaContenutiApplicativi;
  162. import org.openspcoop2.pdd.mdb.InoltroBuste;
  163. import org.openspcoop2.pdd.services.core.RicezioneBuste;
  164. import org.openspcoop2.pdd.services.core.RicezioneContenutiApplicativi;
  165. import org.openspcoop2.pdd.services.skeleton.IntegrationManager;
  166. import org.openspcoop2.pdd.timers.TimerClusterDinamicoThread;
  167. import org.openspcoop2.pdd.timers.TimerClusteredRateLimitingLocalCache;
  168. import org.openspcoop2.pdd.timers.TimerConsegnaContenutiApplicativi;
  169. import org.openspcoop2.pdd.timers.TimerConsegnaContenutiApplicativiThread;
  170. import org.openspcoop2.pdd.timers.TimerEventiThread;
  171. import org.openspcoop2.pdd.timers.TimerException;
  172. import org.openspcoop2.pdd.timers.TimerFileSystemRecoveryThread;
  173. import org.openspcoop2.pdd.timers.TimerGestoreBusteNonRiscontrate;
  174. import org.openspcoop2.pdd.timers.TimerGestoreBusteNonRiscontrateLib;
  175. import org.openspcoop2.pdd.timers.TimerGestoreMessaggi;
  176. import org.openspcoop2.pdd.timers.TimerGestoreMessaggiLib;
  177. import org.openspcoop2.pdd.timers.TimerGestoreMessaggiThread;
  178. import org.openspcoop2.pdd.timers.TimerGestorePuliziaMessaggiAnomali;
  179. import org.openspcoop2.pdd.timers.TimerGestorePuliziaMessaggiAnomaliLib;
  180. import org.openspcoop2.pdd.timers.TimerGestorePuliziaMessaggiAnomaliThread;
  181. import org.openspcoop2.pdd.timers.TimerGestoreRepositoryBuste;
  182. import org.openspcoop2.pdd.timers.TimerGestoreRepositoryBusteLib;
  183. import org.openspcoop2.pdd.timers.TimerGestoreRepositoryBusteThread;
  184. import org.openspcoop2.pdd.timers.TimerLock;
  185. import org.openspcoop2.pdd.timers.TimerMonitoraggioRisorseThread;
  186. import org.openspcoop2.pdd.timers.TimerRepositoryStatefulThread;
  187. import org.openspcoop2.pdd.timers.TimerState;
  188. import org.openspcoop2.pdd.timers.TimerStatisticheLib;
  189. import org.openspcoop2.pdd.timers.TimerStatisticheThread;
  190. import org.openspcoop2.pdd.timers.TimerThresholdThread;
  191. import org.openspcoop2.pdd.timers.TimerUtils;
  192. import org.openspcoop2.pdd.timers.TipoLock;
  193. import org.openspcoop2.pdd.timers.pdnd.TimerGestoreCacheChiaviPDND;
  194. import org.openspcoop2.pdd.timers.pdnd.TimerGestoreCacheChiaviPDNDLib;
  195. import org.openspcoop2.pdd.timers.pdnd.TimerGestoreChiaviPDND;
  196. import org.openspcoop2.pdd.timers.pdnd.TimerGestoreChiaviPDNDLib;
  197. import org.openspcoop2.pdd.timers.proxy.TimerGestoreOperazioniRemote;
  198. import org.openspcoop2.pdd.timers.proxy.TimerGestoreOperazioniRemoteLib;
  199. import org.openspcoop2.pdd.timers.proxy.TimerSvecchiamentoOperazioniRemote;
  200. import org.openspcoop2.pdd.timers.proxy.TimerSvecchiamentoOperazioniRemoteLib;
  201. import org.openspcoop2.protocol.basic.Costanti;
  202. import org.openspcoop2.protocol.engine.ProtocolFactoryManager;
  203. import org.openspcoop2.protocol.engine.driver.repository.IGestoreRepository;
  204. import org.openspcoop2.protocol.manifest.constants.ServiceBinding;
  205. import org.openspcoop2.protocol.registry.RegistroServiziManager;
  206. import org.openspcoop2.protocol.registry.RegistroServiziReader;
  207. import org.openspcoop2.protocol.sdk.ConfigurazionePdD;
  208. import org.openspcoop2.protocol.sdk.state.RequestConfig;
  209. import org.openspcoop2.protocol.sdk.state.RequestThreadContext;
  210. import org.openspcoop2.protocol.sdk.state.StateMessage;
  211. import org.openspcoop2.protocol.utils.ErroriProperties;
  212. import org.openspcoop2.protocol.utils.ModIUtils;
  213. import org.openspcoop2.security.keystore.cache.GestoreKeystoreCache;
  214. import org.openspcoop2.security.message.WsuIdAllocator;
  215. import org.openspcoop2.security.message.engine.MessageSecurityFactory;
  216. import org.openspcoop2.security.utils.ExternalPWCallback;
  217. import org.openspcoop2.utils.LoggerWrapperFactory;
  218. import org.openspcoop2.utils.TipiDatabase;
  219. import org.openspcoop2.utils.Utilities;
  220. import org.openspcoop2.utils.beans.WriteToSerializerType;
  221. import org.openspcoop2.utils.cache.Cache;
  222. import org.openspcoop2.utils.certificate.CertificateFactory;
  223. import org.openspcoop2.utils.certificate.byok.BYOKManager;
  224. import org.openspcoop2.utils.certificate.hsm.HSMManager;
  225. import org.openspcoop2.utils.certificate.ocsp.OCSPManager;
  226. import org.openspcoop2.utils.certificate.remote.RemoteStoreConfig;
  227. import org.openspcoop2.utils.date.DateManager;
  228. import org.openspcoop2.utils.date.DateUtils;
  229. import org.openspcoop2.utils.dch.MailcapActivationReader;
  230. import org.openspcoop2.utils.digest.MessageDigestFactory;
  231. import org.openspcoop2.utils.id.UniqueIdentifierManager;
  232. import org.openspcoop2.utils.id.UniversallyUniqueIdentifierProducer;
  233. import org.openspcoop2.utils.id.serial.InfoStatistics;
  234. import org.openspcoop2.utils.io.DumpByteArrayOutputStream;
  235. import org.openspcoop2.utils.io.notifier.unblocked.PipedUnblockedStreamFactory;
  236. import org.openspcoop2.utils.jdbc.JDBCUtilities;
  237. import org.openspcoop2.utils.json.JsonPathExpressionEngine;
  238. import org.openspcoop2.utils.json.YamlSnakeLimits;
  239. import org.openspcoop2.utils.properties.MapProperties;
  240. import org.openspcoop2.utils.random.RandomUtilities;
  241. import org.openspcoop2.utils.resources.FileSystemMkdirConfig;
  242. import org.openspcoop2.utils.resources.FileSystemUtilities;
  243. import org.openspcoop2.utils.resources.GestoreJNDI;
  244. import org.openspcoop2.utils.resources.Loader;
  245. import org.openspcoop2.utils.security.ProviderUtils;
  246. import org.openspcoop2.utils.semaphore.Semaphore;
  247. import org.openspcoop2.utils.semaphore.SemaphoreConfiguration;
  248. import org.openspcoop2.utils.semaphore.SemaphoreMapping;
  249. import org.openspcoop2.utils.xml.AbstractXMLUtils;
  250. import org.openspcoop2.utils.xml.XSDSchemaCollection;
  251. import org.slf4j.Logger;

  252. import com.sun.xml.messaging.saaj.soap.MessageImpl;



  253. /**
  254.  * Implementazione del punto di Startup dell'applicazione WEB
  255.  *
  256.  * @author Marcello Spadafora (ma.spadafora@finsiel.it)
  257.  * @author Poli Andrea (apoli@link.it)
  258.  * @author $Author$
  259.  * @version $Rev$, $Date$
  260.  */

  261. public class OpenSPCoop2Startup implements ServletContextListener {

  262.     /** Logger utilizzato per segnalazione di errori. */
  263.     private static final String LOG_CATEGORY_STARTUP = "govway.startup";
  264.     private static Logger log = LoggerWrapperFactory.getLogger(LOG_CATEGORY_STARTUP);
  265.     public static void logStartupInfo(String msg) {
  266.         OpenSPCoop2Startup.log.info(msg);
  267.     }
  268.     public static void logStartupError(String msg, Exception e) {
  269.         OpenSPCoop2Startup.log.error(msg,e);
  270.     }

  271.     /** Variabile che indica il Nome del modulo attuale di OpenSPCoop */
  272.     private static final String ID_MODULO = "InizializzazioneRisorse";

  273.     /** Indicazione se sta avvendendo un contextDestroyed */
  274.     public static boolean contextDestroyed = false;
  275.     public static synchronized void setContextDestroyed(boolean value) {
  276.         contextDestroyed = value;
  277.     }

  278.     /** Context della Servlet */
  279.     ServletContext servletContext;

  280.     /** Indicazione su una corretta inizializzazione */
  281.     public static boolean initialize = false;
  282.    
  283.     /** Indicazione su una corretta inizializzazione della configurazione del Logging (Utile per l'integrazione con il pool utils via reflection) */
  284.     public static boolean initializeLog = false;

  285.     /** Timer per la gestione della funzionalita' 'RiscontriScaduti' */
  286.     private TimerGestoreBusteNonRiscontrate timerRiscontri;

  287.     /** Timer per l'eliminazione dei messaggi gestiti */
  288.     private TimerGestoreMessaggi timerEliminazioneMsg;
  289.     private TimerGestoreMessaggiThread threadEliminazioneMsg;

  290.     /** Timer per l'eliminazione dei messaggi anomali */
  291.     private TimerGestorePuliziaMessaggiAnomali timerPuliziaMsgAnomali;
  292.     private TimerGestorePuliziaMessaggiAnomaliThread threadPuliziaMsgAnomali;

  293.     /** Timer per l'eliminazione delle buste gestite */
  294.     private TimerGestoreRepositoryBuste timerRepositoryBuste;
  295.     private TimerGestoreRepositoryBusteThread threadRepositoryBuste;

  296.     /** Gestore Threshold */
  297.     private TimerThresholdThread timerThreshold = null;

  298.     /** Gestore Monitoraggio Risorse */
  299.     private TimerMonitoraggioRisorseThread timerMonitoraggioRisorse = null;

  300.     /** Timer per la gestione di riconsegna ContenutiApplicativi */
  301.     private Map<String, TimerConsegnaContenutiApplicativiThread> threadConsegnaContenutiApplicativiMap;
  302.     public static Map<String, TimerConsegnaContenutiApplicativiThread> threadConsegnaContenutiApplicativiRefMap;
  303.    
  304.     /** Gestore risorse JMX */
  305.     private GestoreRisorseJMXGovWay gestoreRisorseJMX = null;
  306.     public static GestoreRisorseJMXGovWay gestoreRisorseJMX_staticInstance = null;
  307.    
  308.     /** Gestore eventi */
  309.     private GestoreEventi gestoreEventi = null;
  310.     private TimerEventiThread threadEventi;
  311.    
  312.     /** Timer FileSystemRecovery */
  313.     private TimerFileSystemRecoveryThread threadFileSystemRecovery = null;
  314.    
  315.     /** Timer FileSystemRecovery */
  316.     private TimerRepositoryStatefulThread threadRepositoryStateful = null;
  317.    
  318.     /** Timer per la generazione delle statistiche */
  319.     private TimerStatisticheThread threadGenerazioneStatisticheOrarie;
  320.     private TimerStatisticheThread threadGenerazioneStatisticheGiornaliere;
  321.     private TimerStatisticheThread threadGenerazioneStatisticheSettimanali;
  322.     private TimerStatisticheThread threadGenerazioneStatisticheMensili;
  323.     private TimerStatisticheThread threadPdndTracciamentoGenerazione;
  324.     private TimerStatisticheThread threadPdndTracciamentoPubblicazione;
  325.    
  326.     /** Timer per la gestione delle chiavi da PDND */
  327.     private TimerGestoreChiaviPDND threadGestoreChiaviPDND;
  328.     private TimerGestoreCacheChiaviPDND threadGestoreCacheChiaviPDND;
  329.     private boolean threadGestoreChiaviPDNDEnabled = false;
  330.    
  331.     /** Timer per la gestione delle operazioni remote in un cluster dinamico */
  332.     private TimerGestoreOperazioniRemote threadGestoreOperazioniRemote;
  333.     private TimerSvecchiamentoOperazioniRemote threadSvecchiamentoOperazioniRemote;
  334.     private boolean threadGestoreOperazioniRemoteEnabled = false;
  335.    
  336.     /** DynamicCluster */
  337.     private static TimerClusterDinamicoThread threadClusterDinamico;
  338.    
  339.     /** Clustered Rate Limiting Timer */
  340.     private static TimerClusteredRateLimitingLocalCache timerClusteredRateLimitingLocalCache;
  341.        
  342.     /** UUIDProducer */
  343.     private UniversallyUniqueIdentifierProducer universallyUniqueIdentifierProducer;
  344.    
  345.     /** indicazione se è un server j2ee */
  346.     private boolean serverJ2EE = false;
  347.     protected long startDate ;

  348.     /** PdDContext */
  349.     private PdDContext pddContext = new PdDContext();
  350.    
  351.     /** OpenSPCoopStartupThread */
  352.     private OpenSPCoopStartupThread th;
  353.    
  354.     /** Jminix StandaloneMiniConsole */
  355.     private static StandaloneMiniConsole jminixStandaloneConsole;

  356.     /**
  357.      * Startup dell'applicazione WEB di OpenSPCoop
  358.      *
  359.      * @param sce Servlet Context Event
  360.      *
  361.      */
  362.     @Override
  363.     public void contextInitialized(ServletContextEvent sce) {

  364.         OpenSPCoop2Startup.setContextDestroyed(false);
  365.        
  366.         this.startDate = System.currentTimeMillis();
  367.        
  368.         /* ------  Ottiene il servletContext --------*/
  369.         this.servletContext = sce.getServletContext();
  370.         this.th = new OpenSPCoopStartupThread();
  371.         new Thread(this.th).start();

  372.     }

  373.     class OpenSPCoopStartupThread implements Runnable {

  374.         private void logError(String msg){
  375.             this.logError(msg,null);
  376.         }
  377.         private void logError(String msg,Throwable e){
  378.             if(e==null)
  379.                 OpenSPCoop2Startup.log.error(msg);
  380.             else
  381.                 OpenSPCoop2Startup.log.error(msg,e);
  382.             if(OpenSPCoop2Logger.isLoggerOpenSPCoopConsoleStartupAgganciatoLog()){
  383.                 // per farlo finire anche sul server.log
  384.                 System.err.println(msg);
  385.                 if(e!=null){
  386.                     e.printStackTrace(System.err);
  387.                 }
  388.             }
  389.         }
  390.        

  391.         public OpenSPCoopStartupThread() {                        
  392.         }

  393.         @Override
  394.         public void run() {

  395.            
  396.            
  397.            
  398.             /* ------------ LogConsole -------------------- */
  399.             // Inizializza lo startup log, utile per web spheare
  400.             if(!OpenSPCoop2Logger.initializeLogConsole(OpenSPCoop2Startup.log)){
  401.                 return;
  402.             }
  403.             OpenSPCoop2Startup.log = LoggerWrapperFactory.getLogger(LOG_CATEGORY_STARTUP);
  404.            
  405.            
  406.            
  407.            
  408.            


  409.            
  410.                    
  411.            
  412.            
  413.            
  414.            

  415.             /* ------------- Inizializzo ClassNameProperties di OpenSPCoop --------------- */
  416.             if( !ClassNameProperties.initialize(true)){
  417.                 this.logError("Riscontrato errore durante l'inizializzazione del reader di 'govway.classRegistry.properties'");
  418.                 return;
  419.             }
  420.             ClassNameProperties classNameReader = ClassNameProperties.getInstance();




  421.            
  422.            
  423.            
  424.            
  425.            
  426.            
  427.             /* ------------- Loader --------------- */
  428.             GeneralInstanceProperties instanceProperties = new GeneralInstanceProperties();
  429.             Object [] o = null;
  430.             Properties openspcoopP = null;
  431.             Properties classNameP = null;
  432.             Properties loggerP = null;
  433.             Properties localConfig = null;
  434.             Properties cacheP = null;
  435.             try{
  436.                 o = instanceProperties.reads(OpenSPCoop2Startup.log);
  437.             }catch(Exception e){
  438.                 e.printStackTrace(System.err);
  439.             }
  440.             try{
  441.                 if(o!=null){
  442.                     Loader.initialize((java.lang.ClassLoader)o[0]);
  443.                     try{
  444.                         openspcoopP=(Properties)o[1];
  445.                         classNameP=(Properties)o[2];
  446.                         loggerP = (Properties)o[4];
  447.                         localConfig = (Properties)o[5];
  448.                         cacheP = (Properties)o[7];
  449.                     }catch(Exception e){
  450.                         // ignore
  451.                     }
  452.                 }else{
  453.                     Loader.initialize();
  454.                 }
  455.             }catch(Exception e){
  456.                 this.logError("Loader non istanziato: "+e.getMessage(),e);
  457.                 return;
  458.             }

  459.            
  460.            







  461.             /* ------------- Proprieta' di OpenSPCoop --------------- */
  462.             if( !OpenSPCoop2Properties.initialize(openspcoopP)){
  463.                 this.logError("Riscontrato errore durante l'inizializzazione del reader di 'govway.properties'");
  464.                 return;
  465.             }
  466.             OpenSPCoop2Properties propertiesReader = OpenSPCoop2Properties.getInstance();
  467.             // Di seguito vengono attivati gli engine che richiedono di essere caricati prima della validazione del file di proprietà
  468.            
  469.            
  470.            
  471.            
  472.            
  473.            
  474.            
  475.             /* ----------- Map (environment) ------------ */
  476.             try {
  477.                 String mapConfig = propertiesReader.getEnvMapConfig();
  478.                 if(StringUtils.isNotEmpty(mapConfig)) {
  479.                     MapProperties.initialize(OpenSPCoop2Startup.log, mapConfig, propertiesReader.isEnvMapConfigRequired());
  480.                     MapProperties mapProperties = MapProperties.getInstance();
  481.                     mapProperties.initEnvironment();
  482.                     String msgInit = "Environment inizializzato con le variabili definite nel file '"+mapConfig+"'"+
  483.                             "\n\tJavaProperties: "+mapProperties.getJavaMap().keys()+
  484.                             "\n\tEnvProperties: "+mapProperties.getEnvMap().keys()+
  485.                             "\n\tObfuscateMode: "+mapProperties.getObfuscateModeDescription()+
  486.                             "\n\tObfuscatedJavaKeys: "+mapProperties.getObfuscatedJavaKeys()+
  487.                             "\n\tObfuscatedEnvKeys: "+mapProperties.getObfuscatedEnvKeys();
  488.                     OpenSPCoop2Startup.log.info(msgInit);
  489.                 }
  490.             } catch (Exception e) {
  491.                 OpenSPCoop2Startup.log.error("Inizializzazione ambiente non riuscita: "+e.getMessage(),e);
  492.                 return;
  493.             }
  494.            
  495.            
  496.            
  497.            
  498.            
  499.            
  500.            
  501.             /* ----------- BouncyCastle ------------ */
  502.             if(propertiesReader.isLoadBouncyCastle()){
  503.                 ProviderUtils.addBouncyCastleAfterSun(true);
  504.                 OpenSPCoop2Startup.logStartupInfo("Aggiunto Security Provider org.bouncycastle.jce.provider.BouncyCastleProvider");
  505.                
  506.                 if(propertiesReader.getBouncyCastleSecureRandomAlgorithm()!=null) {
  507.                     try{
  508.                         SecureRandom secureRandom = SecureRandom.getInstance(propertiesReader.getBouncyCastleSecureRandomAlgorithm());
  509.                         CryptoServicesRegistrar.setSecureRandom(secureRandom);
  510.                         OpenSPCoop2Startup.logStartupInfo("Aggiunto default SecureRandom '"+secureRandom.getAlgorithm()+"' in CryptoServicesRegistrar di Bouncycastle");
  511.                     }catch(Exception e){
  512.                         this.logError("Inizializzazione SecureRandom in BouncyCastle fallita",e);
  513.                         return;
  514.                     }
  515.                 }
  516.                 else {
  517.                     SecureRandom secureRandom = CryptoServicesRegistrar.getSecureRandom();
  518.                     if(secureRandom!=null) {
  519.                         OpenSPCoop2Startup.logStartupInfo("SecureRandom used in CryptoServicesRegistrar di Bouncycastle: '"+secureRandom.getAlgorithm()+"'");
  520.                     }
  521.                 }              
  522.             }
  523.            
  524.            
  525.            
  526.            
  527.            
  528.            
  529.             /* ----------- Gestori HSM ------------ */
  530.             try {
  531.                 String hsmConfig = propertiesReader.getHSMConfig();
  532.                 if(StringUtils.isNotEmpty(hsmConfig)) {
  533.                     File f = new File(hsmConfig);
  534.                     HSMManager.init(f, propertiesReader.isHSMConfigRequired(), OpenSPCoop2Startup.log, true);
  535.                     HSMManager hsmManager = HSMManager.getInstance();
  536.                     hsmManager.providerInit(OpenSPCoop2Startup.log, propertiesReader.isHSMConfigUniqueProviderInstance());
  537.                     String msgInit = "Gestore HSM inizializzato; keystore registrati: "+hsmManager.getKeystoreTypes();
  538.                     OpenSPCoop2Startup.log.info(msgInit);
  539.                 }
  540.             } catch (Exception e) {
  541.                 OpenSPCoop2Startup.log.error("Inizializzazione Gestore HSM non riuscita: "+e.getMessage(),e);
  542.                 return;
  543.             }
  544.            
  545.            
  546.            
  547.            
  548.            
  549.            
  550.             /* ----------- Gestori OCSP ------------ */
  551.             try {
  552.                 String ocspConfig = propertiesReader.getOCSPConfig();
  553.                 if(StringUtils.isNotEmpty(ocspConfig)) {
  554.                     File f = new File(ocspConfig);
  555.                     OCSPManager.init(f, propertiesReader.isOCSPConfigRequired(), propertiesReader.isOCSPConfigLoadDefault(), OpenSPCoop2Startup.log);
  556.                     OCSPManager ocspManager = OCSPManager.getInstance();
  557.                     String msgInit = "Gestore OCSP inizializzato; policy registrate: "+ocspManager.getOCSPConfigTypes();
  558.                     OpenSPCoop2Startup.log.info(msgInit);
  559.                 }
  560.             } catch (Exception e) {
  561.                 OpenSPCoop2Startup.log.error("Inizializzazione Gestore OCSP non riuscita: "+e.getMessage(),e);
  562.                 return;
  563.             }
  564.            
  565.            
  566.            
  567.            
  568.            
  569.            
  570.             /* ----------- Gestori BYOK ------------ */
  571.             BYOKManager byokManager = null;
  572.             try {
  573.                 String byokConfig = propertiesReader.getBYOKConfig();
  574.                 if(StringUtils.isNotEmpty(byokConfig)) {
  575.                     File f = new File(byokConfig);
  576.                     BYOKManager.init(f, propertiesReader.isBYOKConfigRequired(), OpenSPCoop2Startup.log);
  577.                     byokManager = BYOKManager.getInstance();
  578.                     String msgInit = "Gestore BYOK inizializzato;"+
  579.                             "\n\tHSM registrati: "+byokManager.getKeystoreTypes()+
  580.                             "\n\tSecurityEngine registrati: "+byokManager.getSecurityEngineTypes()+
  581.                             "\n\tGovWaySecurityEngine: "+byokManager.getSecurityEngineGovWayDescription();
  582.                     OpenSPCoop2Startup.log.info(msgInit);
  583.                 }
  584.             } catch (Exception e) {
  585.                 OpenSPCoop2Startup.log.error("Inizializzazione Gestore BYOK non riuscita: "+e.getMessage(),e);
  586.                 return;
  587.             }
  588.            
  589.    
  590.            
  591.            
  592.            
  593.            
  594.             /* ----------- Secrets (environment) ------------ */
  595.             try {
  596.                 String secretsConfig = propertiesReader.getBYOKEnvSecretsConfig();
  597.                 if(byokManager!=null && StringUtils.isNotEmpty(secretsConfig)) {
  598.                     BYOKMapProperties.initialize(OpenSPCoop2Startup.log, secretsConfig, propertiesReader.isBYOKEnvSecretsConfigRequired(),
  599.                             true,
  600.                             null, false);
  601.                     BYOKMapProperties secretsProperties = BYOKMapProperties.getInstance();
  602.                     secretsProperties.setGovWayStarted(false);
  603.                     secretsProperties.initEnvironment();
  604.                     boolean existsUnwrapPropertiesAfterGovWayStartup = secretsProperties.isExistsUnwrapPropertiesAfterGovWayStartup();
  605.                     String msgInit = "Environment inizializzato con i secrets definiti nel file '"+secretsConfig+"'"+
  606.                             "\n\tJavaProperties: "+secretsProperties.getJavaMap().keys()+
  607.                             "\n\tEnvProperties: "+secretsProperties.getEnvMap().keys()+
  608.                             "\n\tObfuscateMode: "+secretsProperties.getObfuscateModeDescription()+
  609.                             "\n\tExistsUnwrapPropertiesAfterGovWayStartup: "+existsUnwrapPropertiesAfterGovWayStartup;
  610.                     OpenSPCoop2Startup.log.info(msgInit);
  611.                 }
  612.             } catch (Exception e) {
  613.                 OpenSPCoop2Startup.log.error("Inizializzazione ambiente (secrets) non riuscita: "+e.getMessage(),e);
  614.                 return;
  615.             }
  616.            
  617.            
  618.            
  619.            
  620.            
  621.            
  622.            
  623.             /* ------------- Verifica Proprieta' di OpenSPCoop --------------- */
  624.             try{
  625.                 propertiesReader.checkOpenSPCoopHome();
  626.             }catch(Exception e){
  627.                 this.logError(e.getMessage(),e);
  628.                 if(StatoFunzionalitaConWarning.ABILITATO.equals(propertiesReader.getCheckOpenSPCoopHome())){
  629.                     return;
  630.                 }
  631.             }
  632.             classNameReader.refreshLocalProperties(classNameP,propertiesReader.getRootDirectory()); // prima della validazione
  633.             if(o!=null){
  634.                 if(!propertiesReader.validaConfigurazione((java.lang.ClassLoader)o[0])){
  635.                     return;
  636.                 }
  637.                 if(!classNameReader.validaConfigurazione((java.lang.ClassLoader)o[0], propertiesReader.getDatabaseType())){
  638.                     return;
  639.                 }
  640.             }else{
  641.                 if(!propertiesReader.validaConfigurazione(null)){
  642.                     return;
  643.                 }
  644.                 if(!classNameReader.validaConfigurazione(null, propertiesReader.getDatabaseType())){
  645.                     return;
  646.                 }
  647.             }
  648.            
  649.             OpenSPCoop2Startup.this.serverJ2EE = propertiesReader.isServerJ2EE();
  650.             if(propertiesReader.getClassLoader()!=null){
  651.                 try{
  652.                     Loader.update(propertiesReader.getClassLoader());
  653.                 }catch(Exception e){
  654.                     this.logError("Loader non aggiornato: "+e.getMessage(),e);
  655.                     return;
  656.                 }  
  657.             }
  658.             Loader loader = Loader.getInstance();


  659.            
  660.            
  661.            
  662.            
  663.            
  664.            
  665.            
  666.             /* ------------- Inizializzo Errori di OpenSPCoop --------------- */
  667.             try {
  668.                 ErroriProperties.initialize(propertiesReader.getRootDirectory(), log, loader);
  669.             }catch(Exception e) {
  670.                 this.logError("Riscontrato errore durante l'inizializzazione del reader 'errori.properties'");
  671.                 return;
  672.             }
  673.            
  674.            
  675.            
  676.                
  677.             /*
  678.              * Nella classe ./src/main/java/com/sun/xml/messaging/saaj/soap/EnvelopeFactory.java
  679.              * viene inizializzato un pool di sax parser che vengono usati per parsare il messaggio.
  680.              * Questo poichè ogni parser non può essere utilizzato simultaneamente da thread diversi, altrimenti si ottiene l'errore "org.xml.sax.SAXException: FWK005 parse may not be called while parsing"
  681.              * Per default viene inizializzato con un pool di 5
  682.              * public class EnvelopeFactory {
  683.              *    private static final String SAX_PARSER_POOL_SIZE_PROP_NAME = "com.sun.xml.messaging.saaj.soap.saxParserPoolSize";
  684.              *    private static final int DEFAULT_SAX_PARSER_POOL_SIZE = 5;
  685.              **/
  686.             System.setProperty("com.sun.xml.messaging.saaj.soap.saxParserPoolSize", propertiesReader.getSoapMessageSaajSaxParserPoolSize()+"");
  687.             OpenSPCoop2Startup.logStartupInfo("saaj.soap.saxParserPoolSize="+propertiesReader.getSoapMessageSaajSaxParserPoolSize());
  688.            
  689.             /*
  690.              * ApacheXMLDSig: usato da wssecurity come XMLSignatureFactory, come si può vedere nella classe 'WSSecSignature'
  691.              **/
  692.             if(propertiesReader.isLoadApacheXMLDSig()) {
  693.                 String providerName_ApacheXMLDSig = "ApacheXMLDSig";
  694.                 Provider currentProvider = Security.getProvider(providerName_ApacheXMLDSig);
  695.                 if (currentProvider != null) {
  696.                     Security.removeProvider(providerName_ApacheXMLDSig);
  697.                 }
  698.                 Security.insertProviderAt(new org.apache.jcp.xml.dsig.internal.dom.XMLDSigRI(),2); // lasciare alla posizione 1 il provider 'SUN'
  699.                 OpenSPCoop2Startup.logStartupInfo("Aggiunto Security Provider ApacheXMLDSig");
  700.             }
  701.                        
  702.             /*
  703.              *  Necessario in jboss7 per evitare errore 'error constructing MAC: java.lang.SecurityException: JCE cannot authenticate the provider BC'
  704.              *  se vengono utilizzati keystore P12.
  705.              *  Il codice  
  706.              *      <resource-root path="WEB-INF/lib/bcprov-ext-jdk15on-1.69.jar" use-physical-code-source="true"/>
  707.              *  all'interno del file jboss-deployment-structure.xml non è più sufficiente da quanto è stato necessario
  708.              *  introdurre il codice sottostante 'org.apache.wss4j.dom.engine.WSSConfig.init'
  709.              *  e di conseguenza tutta la configurazione del modulo 'deployment.custom.javaee.api'
  710.              *  per risolvere il problema java.lang.NoSuchMethodError: org.apache.xml.security.utils.I18n.init
  711.              */
  712.             // NOTA: il caricamento di BouncyCastleProvider DEVE essere effettuato prima dell'inizializzazione 'org.apache.wss4j.dom.engine.WSSConfig.init'
  713.             /**Spostato sopra prima del BYOK/HSM
  714.              * if(propertiesReader.isLoadBouncyCastle()){
  715.                 ProviderUtils.addBouncyCastleAfterSun(true);
  716.                 OpenSPCoop2Startup.logStartupInfo("Aggiunto Security Provider org.bouncycastle.jce.provider.BouncyCastleProvider");
  717.                
  718.                 if(propertiesReader.getBouncyCastleSecureRandomAlgorithm()!=null) {
  719.                     try{
  720.                         SecureRandom secureRandom = SecureRandom.getInstance(propertiesReader.getBouncyCastleSecureRandomAlgorithm());
  721.                         CryptoServicesRegistrar.setSecureRandom(secureRandom);
  722.                         OpenSPCoop2Startup.logStartupInfo("Aggiunto default SecureRandom '"+secureRandom.getAlgorithm()+"' in CryptoServicesRegistrar di Bouncycastle");
  723.                     }catch(Exception e){
  724.                         this.logError("Inizializzazione SecureRandom in BouncyCastle fallita",e);
  725.                         return;
  726.                     }
  727.                 }
  728.                 else {
  729.                     SecureRandom secureRandom = CryptoServicesRegistrar.getSecureRandom();
  730.                     if(secureRandom!=null) {
  731.                         OpenSPCoop2Startup.logStartupInfo("SecureRandom used in CryptoServicesRegistrar di Bouncycastle: '"+secureRandom.getAlgorithm()+"'");
  732.                     }
  733.                 }              
  734.             }*/
  735.             if(propertiesReader.isUseBouncyCastleProviderForCertificate()) {
  736.                 OpenSPCoop2Startup.logStartupInfo("Add Bouncycastle in CertificateFactory");
  737.                 CertificateFactory.setUseBouncyCastleProvider(true);
  738.             }
  739.             if(propertiesReader.isUseBouncyCastleProviderForMessageDigest()) {
  740.                 OpenSPCoop2Startup.logStartupInfo("Add Bouncycastle in MessageDigestFactory");
  741.                 MessageDigestFactory.setUseBouncyCastleProvider(true);
  742.             }
  743.             if(propertiesReader.isUseBouncyCastleProviderForWss4jCryptoMerlin()) {
  744.                 OpenSPCoop2Startup.logStartupInfo("Add Bouncycastle in keystore.Merlin provider");
  745.                 org.openspcoop2.security.keystore.MerlinProvider.setUseBouncyCastleProvider(true);
  746.             }
  747.            
  748.             DBUtils.setKeystoreJksPasswordRequired(propertiesReader.isConfigurazioneKeystoreJksPasswordRequired());
  749.             DBUtils.setKeystoreJksKeyPasswordRequired(propertiesReader.isConfigurazioneKeystoreJksKeyPasswordRequired());
  750.             DBUtils.setKeystorePkcs12PasswordRequired(propertiesReader.isConfigurazioneKeystorePkcs12PasswordRequired());
  751.             DBUtils.setKeystorePkcs12KeyPasswordRequired(propertiesReader.isConfigurazioneKeystorePkcs12KeyPasswordRequired());
  752.             DBUtils.setTruststoreJksPasswordRequired(propertiesReader.isConfigurazioneTruststoreJksPasswordRequired());
  753.             DBUtils.setTruststorePkcs12PasswordRequired(propertiesReader.isConfigurazioneTruststorePkcs12PasswordRequired());
  754.             // disabilito anche nelle librerie
  755.             if(!propertiesReader.isConfigurazioneKeystoreJksPasswordRequired() || !propertiesReader.isConfigurazioneTruststoreJksPasswordRequired()) {
  756.                 KeyManagementUtils.setKeystoreJksPasswordRequired(false);
  757.             }
  758.             if(!propertiesReader.isConfigurazioneKeystoreJksKeyPasswordRequired()) {
  759.                 KeyManagementUtils.setKeystoreJksKeyPasswordRequired(false);
  760.             }
  761.             if(!propertiesReader.isConfigurazioneKeystorePkcs12PasswordRequired() || !propertiesReader.isConfigurazioneTruststorePkcs12PasswordRequired()) {
  762.                 KeyManagementUtils.setKeystorePkcs12PasswordRequired(false);
  763.             }
  764.             if(!propertiesReader.isConfigurazioneKeystorePkcs12KeyPasswordRequired()) {
  765.                 KeyManagementUtils.setKeystorePkcs12KeyPasswordRequired(false);
  766.             }
  767.             OpenSPCoop2Startup.logStartupInfo("KeyManagementUtils.keystoreJksPasswordRequired="+KeyManagementUtils.isKeystoreJksPasswordRequired());
  768.             OpenSPCoop2Startup.logStartupInfo("KeyManagementUtils.keystoreJksKeyPasswordRequired="+KeyManagementUtils.isKeystoreJksKeyPasswordRequired());
  769.             OpenSPCoop2Startup.logStartupInfo("KeyManagementUtils.keystorePkcs12PasswordRequired="+KeyManagementUtils.isKeystorePkcs12PasswordRequired());
  770.             OpenSPCoop2Startup.logStartupInfo("KeyManagementUtils.keystorePkcs12KeyPasswordRequired="+KeyManagementUtils.isKeystorePkcs12KeyPasswordRequired());
  771.             if(!propertiesReader.isConfigurazioneKeystoreJksPasswordRequired() || !propertiesReader.isConfigurazioneTruststoreJksPasswordRequired() ||
  772.                     !propertiesReader.isConfigurazioneKeystorePkcs12PasswordRequired() || !propertiesReader.isConfigurazioneTruststorePkcs12PasswordRequired()) {
  773.                 WSHandler.setKeystorePasswordRequired(false);
  774.             }
  775.             OpenSPCoop2Startup.logStartupInfo("WSHandler.keystorePasswordRequired="+WSHandler.isKeystorePasswordRequired());
  776.            
  777.             StringBuilder sb = new StringBuilder();
  778.             Provider[] providerList = Security.getProviders();
  779.             sb.append("Security Providers disponibili sono "+providerList.length+":\n");
  780.             for (int i = 0; i < providerList.length; i++) {
  781.                 sb.append("[" + (i + 1) + "] - Name:"+ providerList[i].getName()+"\n");
  782.             }
  783.             OpenSPCoop2Startup.logStartupInfo(sb.toString());
  784.            
  785.             if(propertiesReader.getSecurityEgd()!=null) {
  786.                 System.setProperty("java.security.egd", propertiesReader.getSecurityEgd());
  787.                 OpenSPCoop2Startup.logStartupInfo("Aggiunta proprietà java.security.egd="+propertiesReader.getSecurityEgd());
  788.             }
  789.                        
  790.             /* ------------
  791.              * Inizializzazione Resource Bundle:
  792.              * - org/apache/xml/security/resource/xmlsecurity_en.properties (xmlsec-2.3.0.jar)
  793.              * - org/apache/xml/security/resource/xmlsecurity_de.properties (xmlsec-2.3.0.jar)
  794.              * - messages/wss4j_errors.properties (wss4j-ws-security-common-2.4.1.jar)
  795.              *
  796.              * L'inizializzazione di questa classe DEVE essere all'inizio altrimenti si puo' incorrere in errori tipo il seguente:
  797.              * Caused by: org.apache.wss4j.common.ext.WSSecurityException: No message with ID "noUserCertsFound" found in resource bundle "org/apache/xml/security/resource/xmlsecurity"
  798.              *
  799.              * Il motivo risiede nel fatto che org.apache.wss4j.common.ext.WSSecurityException lancia una eccezione con id "noUserCertsFound".
  800.              * Tale eccezione di fatto estende la classe org/apache/xml/security/exceptions/XMLSecurityException che utilizza il proprio resource bundle
  801.              * per risolvere l'id. Tale classe utilizza normalmente il properties 'org/apache/xml/security/resource/xmlsecurity_en.properties'
  802.              * Mentre l'id 'noUserCertsFound' e' dentro il properties 'messages/wss4j_errors.properties'
  803.              * Pero' xmlsec permette di inizializzare il resource bundle da usare anche grazie ad un metodo dove viene fornito l'intero resource bundle.
  804.              * Questo avviene in xmlsec-2.3.0/src/main/java/org/apache/xml/security/utils/I18n.java metodo init(ResourceBundle resourceBundle)
  805.              * L'inizializzazione avviene pero' solamente una volta. Quindi se qualche altra libreria l'inizializza prima, poi il metodo init diventa una nop.
  806.              * Tale init viene quindi richiamata dalla classe org.apache.wss4j.dom.engine.WSSConfig.init che prepara un resource bundle
  807.              * contenente sia il contenuto originale del properties 'org/apache/xml/security/resource/xmlsecurity_en.properties' che
  808.              * aggiungendo il contenuto del properties 'messages/wss4j_errors.properties'
  809.              *
  810.              * -------------------- */
  811.             try{
  812.                 org.apache.wss4j.dom.engine.WSSConfig.init();
  813.             }catch(Exception e){
  814.                 this.logError("Inizializzazione org.apache.wss4j.dom.engine.WSSConfig.init",e);
  815.                 return;
  816.             }
  817.             if(propertiesReader.getWsuIdSecureRandomAlgorithm()!=null) {
  818.                 WsuIdAllocator.setSecureRandomAlgorithm(propertiesReader.getWsuIdSecureRandomAlgorithm());
  819.                 OpenSPCoop2Startup.logStartupInfo("SecureRandom used in WsuIdAllocator per WS-Security: '"+propertiesReader.getWsuIdSecureRandomAlgorithm()+"'");
  820.             }
  821.            
  822.             /* ------------
  823.              * Disabilita il log di errore prodotto da freemarker
  824.              * https://freemarker.apache.org/docs/api/freemarker/log/Logger.html#SYSTEM_PROPERTY_NAME_LOGGER_LIBRARY
  825.              * deprecato: freemarker.log.Logger.selectLoggerLibrary(freemarker.log.Logger.LIBRARY_NONE);
  826.              */
  827.             try{
  828.                 System.setProperty(freemarker.log.Logger.SYSTEM_PROPERTY_NAME_LOGGER_LIBRARY,freemarker.log.Logger.LIBRARY_NAME_NONE);
  829.             }catch(Exception e){
  830.                 this.logError("Inizializzazione "+freemarker.log.Logger.SYSTEM_PROPERTY_NAME_LOGGER_LIBRARY,e);
  831.                 return;
  832.             }
  833.            
  834.             /* ------------
  835.              * Disabilita la cache del motore JsonPath, altrimenti pattern che contengono il 'concat' vengono cachati e se applicati su messaggi differenti ritornano lo stesso risultato.
  836.              */
  837.             try{
  838.                 if(!propertiesReader.isJsonPathCacheEnabled()){
  839.                     JsonPathExpressionEngine.disableCacheJsonPathEngine();
  840.                     OpenSPCoop2Startup.logStartupInfo("Disabilitata cache (NOOPCache) in engine com.jayway.jsonpath.spi.cache.CacheProvider (JsonPath)");
  841.                 }
  842.             }catch(Exception e){
  843.                 this.logError("Cache JsonPathEngine disabilitata",e);
  844.                 return;
  845.             }
  846.            
  847.             if(propertiesReader.isHttpDisableKeepAlive()) {
  848.                 /* ------------
  849.                  * Disabilita KeepAlive
  850.                  */
  851.                 try{
  852.                     System.setProperty("http.keepAlive","false");
  853.                     OpenSPCoop2Startup.logStartupInfo("Impostazione http.keepAlive=false effettuata");
  854.                 }catch(Exception e){
  855.                     this.logError("Impostazione http.keepAlive=false non riuscita",e);
  856.                     return;
  857.                 }
  858.             }
  859.            
  860.             // Inizializzo Semaphore
  861.             org.openspcoop2.utils.Semaphore.setDefaultLockAcquisitionTimeoutMs(propertiesReader.getSemaphoreTimeoutMS());
  862.             org.openspcoop2.utils.Semaphore.setDefaultLockHoldTimeoutMs(propertiesReader.getSemaphoreHoldTimeoutMS());
  863.             if(propertiesReader.getSemaphoreHoldTimeoutMS()>0) {
  864.                 org.openspcoop2.utils.SemaphoreLock.initScheduledExecutorService();
  865.             }
  866.             org.openspcoop2.utils.Semaphore.setDefaultDebug(propertiesReader.isSemaphoreDebug());
  867.             org.openspcoop2.utils.Semaphore.setSemaphoreType(propertiesReader.getSemaphoreType());
  868.             org.openspcoop2.utils.Semaphore.setFair(propertiesReader.isSemaphoreFair());
  869.             OpenSPCoop2Startup.logStartupInfo("Impostazione semaphore acquisitionTimeoutMs="+org.openspcoop2.utils.Semaphore.getDefaultLockAcquisitionTimeoutMs()+
  870.                     " holdTimeoutMs="+org.openspcoop2.utils.Semaphore.getDefaultLockHoldTimeoutMs()+
  871.                     " scheduledExecutorServiceEnabled="+org.openspcoop2.utils.SemaphoreLock.isInitializedScheduledExecutorService()+
  872.                     " debug="+org.openspcoop2.utils.Semaphore.isDefaultDebug()+
  873.                     " type="+org.openspcoop2.utils.Semaphore.getSemaphoreType()+
  874.                     " fair="+org.openspcoop2.utils.Semaphore.isFair());
  875.            
  876.             // Inizializzo Controlli connessioni
  877.             Logger logR = OpenSPCoop2Logger.getLoggerOpenSPCoopResources()!=null ? OpenSPCoop2Logger.getLoggerOpenSPCoopResources() : log;
  878.             ServicesUtils.initCheckConnectionDB(logR, propertiesReader.isJdbcCloseConnectionCheckIsClosed(), propertiesReader.isJdbcCloseConnectionCheckAutocommit());
  879.            



  880.             /* ------------- Inizializzo il sistema di Logging di OpenSPCoop --------------- */
  881.             boolean isInitializeLogger = false;
  882.             isInitializeLogger = OpenSPCoop2Logger.initialize(OpenSPCoop2Startup.log,propertiesReader.getRootDirectory(),loggerP,
  883.                     propertiesReader.isAllarmiEnabled());
  884.             if(!isInitializeLogger){
  885.                 return;
  886.             }
  887.             Logger logCore = OpenSPCoop2Logger.getLoggerOpenSPCoopCore();
  888.             OpenSPCoop2Startup.log = LoggerWrapperFactory.getLogger(LOG_CATEGORY_STARTUP);
  889.            
  890.             Utilities.setLog(logCore);
  891.             Utilities.setFreeMemoryLog(propertiesReader.getFreeMemoryLog());
  892.            
  893.             OpenSPCoop2Startup.initializeLog = true;
  894.            
  895.             if(propertiesReader.isLoggerSaajDisabilitato()) {
  896.                 /**java.util.logging.Logger logSaaj = java.util.logging.Logger.getLogger(com.sun.xml.messaging.saaj.util.LogDomainConstants.SOAP_DOMAIN
  897.                                                                                         "com.sun.xml.messaging.saaj.soap.LocalStrings");*/
  898.                 java.util.logging.Logger logSaaj = java.util.logging.Logger.getLogger(com.sun.xml.messaging.saaj.util.LogDomainConstants.MODULE_TOPLEVEL_DOMAIN);
  899.                 logSaaj.setLevel(Level.OFF);
  900.                 logSaaj.severe("Il logger utilizzato nel package '"+com.sun.xml.messaging.saaj.util.LogDomainConstants.MODULE_TOPLEVEL_DOMAIN+"' e' stato disabilitato; questo messaggio non deve essere visualizzato");
  901.                 logSaaj.severe("SAAJ0511.soap.cannot.create.envelope"); // serve per caricare il logger con il local string
  902.                 OpenSPCoop2Startup.logStartupInfo("Il logger utilizzato nel package '"+com.sun.xml.messaging.saaj.util.LogDomainConstants.MODULE_TOPLEVEL_DOMAIN+"' e' stato disabilitato");
  903.             }
  904.            
  905.             RequestThreadContext.setLog(OpenSPCoop2Logger.getLoggerOpenSPCoopConnettori());

  906.             org.openspcoop2.utils.Semaphore.setLogDebug(OpenSPCoop2Logger.getLoggerOpenSPCoopResources());
  907.            
  908.            


  909.             /* ------------- Pdd.properties --------------- */
  910.             String locationPddProperties = null;
  911.             if( propertiesReader.getLocationPddProperties()!=null ){
  912.                 locationPddProperties = propertiesReader.getLocationPddProperties();
  913.             }
  914.             if( !PddProperties.initialize(locationPddProperties,propertiesReader.getRootDirectory())){
  915.                 this.logError("Riscontrato errore durante l'inizializzazione del reader di 'govway.pdd.properties'");
  916.                 return;
  917.             }
  918.             if(o!=null){
  919.                 try{
  920.                     PddProperties.updateLocalImplementation((Properties)o[3]);
  921.                 }catch(Exception e){
  922.                     // ignore
  923.                 }
  924.             }
  925.             try{
  926.                 OpenSPCoop2Properties.updatePddPropertiesReader(PddProperties.getInstance());
  927.             }catch(Exception e){
  928.                 this.logError("Riscontrato errore durante l'assegnamento del pddPropertiesReader a OpenSPCoopPropertiesReader: "+e.getMessage(),e);
  929.                 return;
  930.             }










  931.             /* ------------- MsgDiagnostici.properties --------------- */
  932.             if( !MsgDiagnosticiProperties.initialize(null,propertiesReader.getRootDirectory())){
  933.                 this.logError("Riscontrato errore durante l'inizializzazione del reader di 'govway.msgDiagnostici.properties'");
  934.                 return;
  935.             }
  936.             if(o!=null){
  937.                 try{
  938.                     MsgDiagnosticiProperties.updateLocalImplementation((Properties)o[6]);
  939.                 }catch(Exception e){
  940.                     // ignore
  941.                 }
  942.             }
  943.             MsgDiagnosticiProperties msgDiagProperties = MsgDiagnosticiProperties.getInstance();
  944.             if(msgDiagProperties.initializeMsgDiagnosticiPersonalizzati() == false){
  945.                 return;
  946.             }





  947.            
  948.            
  949.            
  950.             /* ------------- Cache.properties --------------- */
  951.             boolean isInitializeCache = Cache.initialize(OpenSPCoop2Startup.log, logCore,
  952.                     CostantiPdD.OPENSPCOOP2_CACHE_DEFAULT_PROPERTIES_NAME,
  953.                     propertiesReader.getRootDirectory(), cacheP,
  954.                     CostantiPdD.OPENSPCOOP2_LOCAL_HOME, CostantiPdD.OPENSPCOOP2_CACHE_PROPERTIES, CostantiPdD.OPENSPCOOP2_CACHE_LOCAL_PATH);
  955.             if(isInitializeCache == false){
  956.                 this.logError("Riscontrato errore durante l'inizializzazione della cache di OpenSPCoop.");
  957.                 return;
  958.             }
  959.            
  960.            
  961.            
  962.            
  963.             /* ------------- Inizializzo Configurazione FileTrace --------------- */
  964.             try {
  965.                 if(propertiesReader.isTransazioniFileTraceEnabled()) {
  966.                     FileTraceConfig.init(propertiesReader.getTransazioniFileTraceConfig(), true);
  967.                 }
  968.             }catch(Exception e) {
  969.                 this.logError("Riscontrato errore durante l'inizializzazione del FileTrace",e);
  970.                 return;
  971.             }

  972.            
  973.            
  974.            
  975.             /* ----------- Inizializzazione Risorse DOM/SOAP ------------ */
  976.             List<OpenSPCoop2MessageFactory> messageFactory = new ArrayList<>();
  977.             try{
  978.                 // TransazioneContext
  979.                 TransactionContext.initGestioneStateful();
  980.                 OpenSPCoop2Startup.logStartupInfo("TransactionContext.gestioneStateful: "+propertiesReader.isTransazioniStatefulEnabled());
  981.                 TransactionContext.initResources();
  982.                 OpenSPCoop2Startup.logStartupInfo("TransactionContext.type (sync:"+propertiesReader.isConfigurazioneCache_transactionContext_accessiSynchronized()+"): "+TransactionContext.getTransactionContextType());
  983.                
  984.                 // Cache
  985.                 if(!propertiesReader.isConfigurazioneCache_accessiSynchronized()) {
  986.                     Cache.disableSyncronizedGetAsDefault();
  987.                 }
  988.                 OpenSPCoop2Startup.logStartupInfo("Cache.disableSyncronizedGetAsDefault: "+Cache.isDisableSyncronizedGetAsDefault());
  989.                 Cache.DEBUG_CACHE=propertiesReader.isConfigurazioneCacheDebug();
  990.                 OpenSPCoop2Startup.logStartupInfo("Cache.DEBUG: "+Cache.DEBUG_CACHE);
  991.                 GestoreRichieste.setUseCache(propertiesReader.isConfigurazioneCacheRequestManagerUseCache());
  992.                 OpenSPCoop2Startup.logStartupInfo("Cache.requestManager.useCache: "+GestoreRichieste.isUseCache());
  993.                
  994.                
  995.                 // MessageFactory
  996.                 OpenSPCoop2MessageFactory.setMessageFactoryImpl(classNameReader.getOpenSPCoop2MessageFactory(propertiesReader.getOpenspcoop2MessageFactory()));
  997.                 OpenSPCoop2MessageFactory.initDefaultMessageFactory(true);
  998.                
  999.                 // Buffer Dump
  1000.                 if(propertiesReader.getDumpBufferImpl()!=null && !"".equals(propertiesReader.getDumpBufferImpl())) {
  1001.                     DumpByteArrayOutputStream.setClassImpl(propertiesReader.getDumpBufferImpl());
  1002.                 }
  1003.                 OpenSPCoop2Startup.logStartupInfo("DumpByteArrayOutputStream buffer implementation: "+DumpByteArrayOutputStream.getClassImpl());
  1004.                 OpenSPCoop2Startup.logStartupInfo("DumpBinario set buffer threshold: "+propertiesReader.getDumpBinarioInMemoryThreshold());
  1005.                 AbstractBaseOpenSPCoop2MessageDynamicContent.setSoglia(propertiesReader.getDumpBinarioInMemoryThreshold());
  1006.                 OpenSPCoop2Startup.logStartupInfo("DumpBinario set buffer repository: "+propertiesReader.getDumpBinarioRepository());
  1007.                 AbstractBaseOpenSPCoop2MessageDynamicContent.setRepositoryFile(propertiesReader.getDumpBinarioRepository());
  1008.                
  1009.                 // SoapBuffer
  1010.                 boolean soapReader = propertiesReader.useSoapMessageReader();
  1011.                 OpenSPCoop2Startup.logStartupInfo("SOAPMessageReader enabled="+soapReader);
  1012.                 AbstractBaseOpenSPCoop2MessageDynamicContent.setSoapReader(soapReader);
  1013.                 OpenSPCoop2Startup.logStartupInfo("SOAPMessageReader set buffer threshold (kb): "+propertiesReader.getSoapMessageReaderBufferThresholdKb());
  1014.                 AbstractBaseOpenSPCoop2MessageDynamicContent.setSoapReaderBufferThresholdKb(propertiesReader.getSoapMessageReaderBufferThresholdKb());
  1015.                 if(soapReader) {
  1016.                     OpenSPCoop2Startup.logStartupInfo("SOAPMessageReader headerOptimization enabled="+propertiesReader.useSoapMessageReaderHeaderOptimization());
  1017.                     OpenSPCoop2MessageSoapStreamReader.SOAP_HEADER_OPTIMIZATION_ENABLED=propertiesReader.useSoapMessageReaderHeaderOptimization();
  1018.                 }
  1019.                
  1020.                 // SoapPassthrough
  1021.                 boolean soapPassthroughImpl = propertiesReader.useSoapMessagePassthrough();
  1022.                 OpenSPCoop2Startup.logStartupInfo("OpenSPCoop2MessageFactory_impl soapPassthroughImpl="+soapPassthroughImpl);
  1023.                 OpenSPCoop2MessageFactory_impl.setSoapPassthroughImpl(soapPassthroughImpl);
  1024.                                
  1025.                 // Locale SOAPFault String
  1026.                 Locale localeSoapFaultString = propertiesReader.getLocaleSOAPFaultString();
  1027.                 if(localeSoapFaultString!=null) {
  1028.                     OpenSPCoop2Startup.logStartupInfo("Locale SOAPFault String: "+localeSoapFaultString);
  1029.                     SoapUtils.setSoapFaultStringLocale(localeSoapFaultString);
  1030.                 }
  1031.                
  1032.                 // ContentType per SOAP 1.2 (ulteriori Content-Type oltre a application/soap+xml e application/soap+fastinfoset)
  1033.                 MessageImpl.alternativeAcceptedContentType1_2 = propertiesReader.getAlternativeContentTypeSoap12();
  1034.                 if(MessageImpl.alternativeAcceptedContentType1_2!=null && !MessageImpl.alternativeAcceptedContentType1_2.isEmpty()) {
  1035.                     StringBuilder sbCT = new StringBuilder();
  1036.                     for (String alternativeContentType : MessageImpl.alternativeAcceptedContentType1_2) {
  1037.                         if(sbCT.length()>0) {
  1038.                             sbCT.append(", ");
  1039.                         }
  1040.                         sbCT.append(alternativeContentType);
  1041.                     }
  1042.                     OpenSPCoop2Startup.logStartupInfo("Registrati ulteriori '"+MessageImpl.alternativeAcceptedContentType1_2.size()+"' content-type associabili ai messaggi SOAP 1.2: "+sbCT.toString());
  1043.                    
  1044.                 }
  1045.                
  1046.                 // DiagnosticInputStream
  1047.                 DiagnosticInputStream.setSetDateEmptyStream(propertiesReader.isConnettoriUseDiagnosticInputStream_setDateEmptyStream());
  1048.                 OpenSPCoop2Startup.logStartupInfo("DiagnosticInputStream isSetDateEmptyStream: "+DiagnosticInputStream.isSetDateEmptyStream());
  1049.                
  1050.                 // PipeUnblockedStream
  1051.                 if(propertiesReader.getPipedUnblockedStreamClassName()!=null) {
  1052.                     PipedUnblockedStreamFactory.setImplementation(propertiesReader.getPipedUnblockedStreamClassName());
  1053.                 }
  1054.                
  1055.                 // RestMultipartLazy
  1056.                 AbstractLazyContent.BUILD_LAZY=propertiesReader.useRestMultipartLazy();
  1057.                 OpenSPCoop2Startup.logStartupInfo("OpenSPCoop2Content lazy="+AbstractLazyContent.BUILD_LAZY);
  1058.                
  1059.                 // MessageSecurity
  1060.                 MessageSecurityFactory.setMessageSecurityContextClassName(classNameReader.getMessageSecurityContext(propertiesReader.getMessageSecurityContext()));
  1061.                 MessageSecurityFactory.setMessageSecurityDigestReaderClassName(classNameReader.getMessageSecurityDigestReader(propertiesReader.getMessageSecurityDigestReader()));
  1062.                
  1063.                 List<String> tipiMessageFactory = new ArrayList<>();
  1064.                 List<String> classiMessageFactory = new ArrayList<>();
  1065.                 String factoryDefault = "@DEFAULT@";
  1066.                 tipiMessageFactory.add(factoryDefault);
  1067.                 OpenSPCoop2MessageFactory defaultMessageFactory = OpenSPCoop2MessageFactory.getDefaultMessageFactory();
  1068.                 classiMessageFactory.add(defaultMessageFactory.getClass().getName());
  1069.                 messageFactory.add(defaultMessageFactory);
  1070.                
  1071.                 String [] tmp_tipiMessageFactory = classNameReader.getOpenSPCoop2MessageFactory();
  1072.                 if(tmp_tipiMessageFactory!=null && tmp_tipiMessageFactory.length>0) {
  1073.                     OpenSPCoop2Startup.logStartupInfo("Analizzo "+tmp_tipiMessageFactory.length+" message factories ...");
  1074.                     for (int i = 0; i < tmp_tipiMessageFactory.length; i++) {
  1075.                         String tipo = tmp_tipiMessageFactory[i];
  1076.                         String classe = classNameReader.getOpenSPCoop2MessageFactory(tipo);
  1077.                         if(!classiMessageFactory.contains(classe)) {
  1078.                             OpenSPCoop2MessageFactory factory = (OpenSPCoop2MessageFactory) loader.newInstance(classe);
  1079.                             tipiMessageFactory.add(tipo);
  1080.                             messageFactory.add(factory);
  1081.                             classiMessageFactory.add(classe);
  1082.                             OpenSPCoop2Startup.logStartupInfo("Registrazione '"+tipo+"' corrispondente alla classe '"+classe+"' terminata");
  1083.                         }
  1084.                         else {
  1085.                             OpenSPCoop2Startup.logStartupInfo("Registrazione '"+tipo+"' corrispondente alla classe '"+classe+"' non effettuata. La stessa classe risulta già associata ad altri tipi.");
  1086.                         }
  1087.                     }
  1088.                 }
  1089.                
  1090.                 AbstractXMLUtils.DISABLE_DTDs = !propertiesReader.isXmlFactoryDTDsEnabled();
  1091.                 OpenSPCoop2Startup.logStartupInfo("XMLUtils - DISABLE_DTDs: "+AbstractXMLUtils.DISABLE_DTDs);
  1092.                
  1093.                 DynamicUtils.setXsltProcessAsDomSource(propertiesReader.isXsltProcessAsDOMSource());
  1094.                 OpenSPCoop2Startup.logStartupInfo("DynamicUtils - XSLT_PROCESS_AS_DOMSOURCE: "+DynamicUtils.isXsltProcessAsDomSource());
  1095.                
  1096.                 Properties yamlSnakeLimits = propertiesReader.getYamlSnakeLimits();
  1097.                 if(yamlSnakeLimits!=null && !yamlSnakeLimits.isEmpty()) {
  1098.                     YamlSnakeLimits.initialize(OpenSPCoop2Startup.log, yamlSnakeLimits);
  1099.                 }
  1100.                
  1101.                 for (int l = 0; l < tipiMessageFactory.size(); l++) {
  1102.                     String tipo = tipiMessageFactory.get(l);
  1103.                     String classe = classiMessageFactory.get(l);
  1104.                     OpenSPCoop2MessageFactory factory = messageFactory.get(l);
  1105.                    
  1106.                     try{
  1107.                    
  1108.                         OpenSPCoop2Startup.logStartupInfo("Inizializzazione '"+tipo+"' corrispondente alla classe '"+classe+"' ... ");
  1109.                    
  1110.                         // XML
  1111.                         org.openspcoop2.message.xml.MessageXMLUtils xmlUtils = org.openspcoop2.message.xml.MessageXMLUtils.getInstance(factory);
  1112.                         // XML - XERCES
  1113.                         xmlUtils.initDocumentBuilderFactory();
  1114.                         xmlUtils.initDatatypeFactory();
  1115.                         xmlUtils.initSAXParserFactory();
  1116. //                      xmlUtils.initXMLEventFactory();
  1117.                         xmlUtils.initSchemaFactory();
  1118.                         // XML - XALAN
  1119.                         xmlUtils.initTransformerFactory();
  1120.                         xmlUtils.initXPathFactory();
  1121.                         // INIT - OTHER
  1122.                         xmlUtils.initCalendarConverter();
  1123.                        
  1124.                         // SOAP
  1125.                         factory.getSoapFactory11();
  1126.                         factory.getSoapFactory12();
  1127.                         factory.getSoapMessageFactory();
  1128.                        
  1129.                         /*
  1130.                          * Le seguenti inizializzazione servono alle varie factory per evitare di scorrere il classloader a cercare i jar che contengono l'implementazione da utilizzare.
  1131.                          * Lo scan del classloader comporta l'apertura dei vari file jar e quindi il decadimento delle performance poichè i thread risultano bloccati sulla chiamata di apertura del jar
  1132.                          *
  1133.                          * Esempio di stack che riporta il problema:
  1134.                          * java.util.zip.ZipFile.open(Native Method)
  1135.                          * java.util.zip.ZipFile.(ZipFile.java:219)
  1136.                          * ...
  1137.                          * org.apache.catalina.webresources.AbstractArchiveResourceSet.openJarFile(AbstractArchiveResourceSet.java:308)
  1138.                          * org.apache.catalina.webresources.AbstractSingleArchiveResourceSet.getArchiveEntry(AbstractSingleArchiveResourceSet.java:93)
  1139.                          * ....
  1140.                          * org.apache.catalina.webresources.Cache.getResource(Cache.java:69)
  1141.                          * org.apache.catalina.webresources.StandardRoot.getResource(StandardRoot.java:216)
  1142.                          * org.apache.catalina.webresources.StandardRoot.getClassLoaderResource(StandardRoot.java:225)
  1143.                          * org.apache.catalina.loader.WebappClassLoaderBase.getResourceAsStream(WebappClassLoaderBase.java:1067)
  1144.                          * ...
  1145.                          * org.apache.xerces.parsers.SecuritySupport.getResourceAsStream(Unknown Source)
  1146.                          * org.apache.xerces.parsers.ObjectFactory.findJarServiceProvider(Unknown Source)
  1147.                          * org.apache.xerces.parsers.ObjectFactory.createObject(Unknown Source)
  1148.                          * org.apache.xerces.parsers.DOMParser.(Unknown Source)
  1149.                          * org.apache.xerces.jaxp.DocumentBuilderImpl.(Unknown Source)
  1150.                          * org.apache.xerces.jaxp.DocumentBuilderFactoryImpl.newDocumentBuilder(Unknown Source)
  1151.                          *
  1152.                          * Ogni factory prima di avviare la ricerca dei jar del service provider, dispone di una proprietà java che se valorizzata
  1153.                          * viene usata per istanziare immediatamente il provider con la classe indicata.
  1154.                          **/
  1155.                         System.setProperty("org.apache.xerces.xni.parser.XMLParserConfiguration",org.apache.xerces.parsers.XIncludeAwareParserConfiguration.class.getName());
  1156.                         System.setProperty("javax.xml.transform.TransformerFactory",org.apache.xalan.processor.TransformerFactoryImpl.class.getName());
  1157.                         System.setProperty("javax.xml.xpath.XPathFactory:"+XPathFactory.DEFAULT_OBJECT_MODEL_URI,org.apache.xpath.jaxp.XPathFactoryImpl.class.getName());
  1158.                         System.setProperty("org.apache.xml.dtm.DTMManager",org.apache.xml.dtm.ref.DTMManagerDefault.class.getName());
  1159.                        
  1160.                         // Log
  1161.                         // stampo comunque saaj factory
  1162.                         String factoryClassName = OpenSPCoop2MessageFactory_impl.class.getName()+"";
  1163.                         OpenSPCoop2Startup.logStartupInfo("OpenSPCoop MessageFactory (open:"+factoryClassName.equals(factory.getClass().getName())+"): "+factory.getClass().getName());
  1164.                         if(propertiesReader.isPrintInfoFactory()){
  1165.                             MessageType [] mt = MessageType.values();
  1166.                             for (int i = 0; i < mt.length; i++) {
  1167.                                 OpenSPCoop2Startup.logStartupInfo("OpenSPCoop Message ["+mt[i].name()+"]: "+factory.createEmptyMessage(mt[i],MessageRole.NONE).getClass().getName());  
  1168.                             }
  1169.                             if( factory.getSoapFactory11()!=null)
  1170.                                 OpenSPCoop2Startup.logStartupInfo("SOAP1.1 Factory: "+ factory.getSoapFactory11().getClass().getName());
  1171.                             else
  1172.                                 OpenSPCoop2Startup.logStartupInfo("SOAP1.1 Factory: not implemented");
  1173.                             if(factory.getSoapFactory12()!=null){
  1174.                                 OpenSPCoop2Startup.logStartupInfo("SOAP1.2 Factory: "+ factory.getSoapFactory12().getClass().getName());
  1175.                             }else{
  1176.                                 OpenSPCoop2Startup.logStartupInfo("SOAP1.2 Factory: not implemented");
  1177.                             }
  1178.                             OpenSPCoop2Startup.logStartupInfo("SOAP MessageFactory: "+factory.getSoapMessageFactory().getClass().getName());
  1179.            
  1180.                             // XML - XERCES
  1181.                             OpenSPCoop2Startup.logStartupInfo("XERCES - DocumentFactory: "+xmlUtils.getDocumentBuilderFactory().getClass().getName());
  1182.                             OpenSPCoop2Startup.logStartupInfo("XERCES - DatatypeFactory: "+xmlUtils.getDatatypeFactory().getClass().getName());
  1183.                             OpenSPCoop2Startup.logStartupInfo("XERCES - SAXParserFactory: "+xmlUtils.getSAXParserFactory().getClass().getName());
  1184. //                          OpenSPCoop2Startup.logStartupInfo("XERCES - XMLEventFactory: "+xmlUtils.getXMLEventFactory().getClass().getName());
  1185.                             OpenSPCoop2Startup.logStartupInfo("XERCES - SchemaFactory: "+xmlUtils.getSchemaFactory().getClass().getName());
  1186.                            
  1187.                             // XML - XALAN
  1188.                             OpenSPCoop2Startup.logStartupInfo("XALAN - TransformerFactory: "+xmlUtils.getTransformerFactory().getClass().getName());
  1189.                             OpenSPCoop2Startup.logStartupInfo("XALAN - XPathFactory: "+xmlUtils.getXPathFactory().getClass().getName());

  1190.                         }
  1191.                         if(propertiesReader.isPrintInfoMessageSecurity()){
  1192.                             OpenSPCoop2Startup.logStartupInfo("MessageSecurity Context: "+MessageSecurityFactory.messageSecurityContextImplClass);
  1193.                             OpenSPCoop2Startup.logStartupInfo("MessageSecurity DigestReader: "+MessageSecurityFactory.messageSecurityDigestReaderImplClass);
  1194.                             OpenSPCoop2Startup.logStartupInfo("MessageSecurity (SoapBox) EncryptedDataHeaderBlock: "+factory.createEmptyMessage(MessageType.SOAP_11,MessageRole.NONE).castAsSoap().getEncryptedDataHeaderBlockClass());
  1195.                             OpenSPCoop2Startup.logStartupInfo("MessageSecurity (SoapBox) ProcessPartialEncryptedMessage: "+factory.createEmptyMessage(MessageType.SOAP_11,MessageRole.NONE).castAsSoap().getProcessPartialEncryptedMessageClass());
  1196.                             OpenSPCoop2Startup.logStartupInfo("MessageSecurity (SoapBox) getSignPartialMessageProcessor: "+factory.createEmptyMessage(MessageType.SOAP_11,MessageRole.NONE).castAsSoap().getSignPartialMessageProcessorClass());
  1197.                         }
  1198.                                                
  1199.                         // Inizializzo Operazioni "Costose"
  1200.                         // Serve per abbassare la latenza del primo messaggio, altrimenti queste operazioni all'interno del metodo di costruzione dell'header costano sui 50ms
  1201.                         OpenSPCoop2Message msgTest = factory.createEmptyMessage(MessageType.SOAP_11, MessageRole.REQUEST);
  1202.                         SOAPHeader hdr = msgTest.castAsSoap().getSOAPHeader();
  1203.                         if(hdr==null){
  1204.                             hdr = msgTest.castAsSoap().getSOAPPart().getEnvelope().addHeader();
  1205.                         }
  1206.                         String namespaceTest = "http://initialize.openspcoop.org/test";
  1207.                         String prefixTest = "op2";
  1208.                         QName nameTest = new QName(namespaceTest, "Prova", prefixTest);
  1209.                         SOAPHeaderElement testHeader = msgTest.castAsSoap().newSOAPHeaderElement(hdr, nameTest);
  1210.                         testHeader.setActor("http://initialize.openspcoop.org/test");
  1211.                         testHeader.setMustUnderstand(true);
  1212.                         SOAPElement eGovIntestazioneMsg = testHeader.addChildElement("Test",prefixTest,namespaceTest);
  1213.                         if(eGovIntestazioneMsg!=null){
  1214.                             eGovIntestazioneMsg.toString();
  1215.                         }
  1216.                    
  1217.                         OpenSPCoop2Startup.logStartupInfo("Inizializzazione '"+tipo+"' corrispondente alla classe '"+classe+"' effettuata");
  1218.                        
  1219.                     } catch(Exception e) {
  1220.                         this.logError("Inizializzazione '"+tipo+"' corrispondente alla classe '"+classe+"' fallita: "+e.getMessage(),e);
  1221.                         return;
  1222.                     }
  1223.                 }
  1224.                                
  1225.                 // inizializzo cache per gli headers peer
  1226.                 RegexpPeerHeaderDescriptor.initCache(propertiesReader.getHeadersPeerRegexpCacheSize());
  1227.                
  1228.             } catch(Exception e) {
  1229.                 this.logError("Inizializzazione Message/DOM/SOAP: "+e.getMessage(), e);
  1230.                 return;
  1231.             }
  1232.            
  1233.            
  1234.            
  1235.            
  1236.            





  1237.             /*----------- Inizializzazione DateManager  --------------*/
  1238.             try{
  1239.                 String tipoClass = classNameReader.getDateManager(propertiesReader.getTipoDateManager());
  1240.                 DateManager.initializeDataManager(tipoClass, propertiesReader.getDateManagerProperties(),logCore);
  1241.                 OpenSPCoop2Startup.logStartupInfo("Inizializzazione DateManager: "+propertiesReader.getTipoDateManager());
  1242.                
  1243.                 DateUtils.setDEFAULT_DATA_ENGINE_TYPE(propertiesReader.getTipoDateTimeFormat());
  1244.                 OpenSPCoop2Startup.logStartupInfo("Inizializzazione DateTimeFormat: "+propertiesReader.getTipoDateTimeFormat());
  1245.             }catch(Exception e){
  1246.                 this.logError("Riscontrato errore durante l'inizializzazione del DataManager: "+e.getMessage(),e);
  1247.                 return;
  1248.             }





  1249.             /* -------------- Inizializzo DBManager --------------- */

  1250.             String erroreDB = null;
  1251.             try{
  1252.                 DBManager.initialize(propertiesReader.getJNDIName_DataSource(),
  1253.                         propertiesReader.getJNDIContext_DataSource());
  1254.             }catch(Exception e){
  1255.                 erroreDB = e.getMessage();
  1256.                 OpenSPCoop2Startup.logStartupInfo("Datasource non inizializzato... riprovo");
  1257.                 //msgDiag.logStartupError(e, "DatabaseManager");
  1258.                 logCore.error(erroreDB,e);
  1259.             }

  1260.             int count = 0;
  1261.             boolean trovato = DBManager.isInitialized();                        
  1262.             while (!trovato && (count < 600000)) {
  1263.                 try {
  1264.                     DBManager.initialize(propertiesReader.getJNDIName_DataSource(),
  1265.                             propertiesReader.getJNDIContext_DataSource());
  1266.                 } catch (Exception e) {
  1267.                     erroreDB = e.getMessage();
  1268.                     OpenSPCoop2Startup.logStartupInfo("Attendo inizializzazione del Datasource ... "+erroreDB);
  1269.                     logCore.error(erroreDB,e);
  1270.                 }

  1271.                 if (DBManager.isInitialized()) {
  1272.                     trovato = true;
  1273.                 } else {
  1274.                     count += 10000;
  1275.                     Utilities.sleep(10000);
  1276.                 }
  1277.             }

  1278.             if (DBManager.isInitialized()) {
  1279.                 OpenSPCoop2Startup.logStartupInfo("Inizializzazione DBManager effettuata con successo.");
  1280.             } else {
  1281.                 OpenSPCoop2Startup.log.error("Inizializzazione DBManager non effettuata", new Exception(erroreDB));
  1282.                 //msgDiag.logStartupError(new Exception(erroreDB), "DatabaseManager");
  1283.                 return;
  1284.             }

  1285.             if( JDBCUtilities.isTransactionIsolationNone(DBManager.getTransactionIsolationLevel()) )
  1286.                 OpenSPCoop2Startup.logStartupInfo("Database TransactionLevel is NONE");
  1287.             else if(JDBCUtilities.isTransactionIsolationReadCommitted(DBManager.getTransactionIsolationLevel()) )
  1288.                 OpenSPCoop2Startup.logStartupInfo("Database TransactionLevel is READ_COMMITTED");
  1289.             else if(JDBCUtilities.isTransactionIsolationReadUncommitted(DBManager.getTransactionIsolationLevel()) )
  1290.                 OpenSPCoop2Startup.logStartupInfo("Database TransactionLevel is READ_UNCOMMITTED");
  1291.             else if(JDBCUtilities.isTransactionIsolationRepeatableRead(DBManager.getTransactionIsolationLevel()) )
  1292.                 OpenSPCoop2Startup.logStartupInfo("Database TransactionLevel is REPEATABLE_READ");
  1293.             else if(JDBCUtilities.isTransactionIsolationSerializable(DBManager.getTransactionIsolationLevel()) )
  1294.                 OpenSPCoop2Startup.logStartupInfo("Database TransactionLevel is SERIALIZABLE");
  1295.             else if(JDBCUtilities.isTransactionIsolationSqlServerSnapshot(DBManager.getTransactionIsolationLevel()) )
  1296.                 OpenSPCoop2Startup.logStartupInfo("Database TransactionLevel is SQLSERVER SNAPSHOT");
  1297.             else {
  1298.                 OpenSPCoop2Startup.log.error("TransactionLevel associato alla connessione non conosciuto");
  1299.                 //          msgDiag.logStartupError("TransactionLevel associato alla connessione non conosciuto","DatabaseManager");
  1300.                 return;
  1301.             }

  1302.             // Assegno datasource a Libreria per gestione stateless
  1303.             try{
  1304.                 org.openspcoop2.protocol.utils.IDSerialGenerator.init(DBManager.getInstance().getDataSource());
  1305.             }catch(Exception e){
  1306.                 OpenSPCoop2Startup.log.error("Inizializzazione datasource libreria serial generator", e);
  1307.                 //msgDiag.logStartupError(e, "Inizializzazione datasource libreria");
  1308.                 return;
  1309.             }

  1310.             // GestoreTransazioni
  1311.             try{
  1312.                 if(propertiesReader.isTransazioniUsePddRuntimeDatasource()) {
  1313.                     DBTransazioniManager.init(DBManager.getInstance(), logCore, propertiesReader.getDatabaseType());
  1314.                 }
  1315.                 else {
  1316.                     DBTransazioniManager.init(propertiesReader.getTransazioniDatasource(), propertiesReader.getTransazioniDatasourceJndiContext(),
  1317.                             logCore, propertiesReader.getDatabaseType(),
  1318.                             propertiesReader.isTransazioniDatasourceUseDBUtils(), propertiesReader.isRisorseJMXAbilitate());
  1319.                 }
  1320.             }catch(Exception e){
  1321.                 OpenSPCoop2Startup.log.error("Inizializzazione DBTransazioniManager", e);
  1322.                 return;
  1323.             }

  1324.             // GestoreStatistiche
  1325.             try {
  1326.                 if(propertiesReader.isStatisticheGenerazioneEnabled() || propertiesReader.isControlloTrafficoEnabled()){
  1327.                     if(propertiesReader.isStatisticheUsePddRuntimeDatasource()) {
  1328.                         DBStatisticheManager.init(DBManager.getInstance(), logCore, propertiesReader.getDatabaseType());
  1329.                     }
  1330.                     else if(propertiesReader.isStatisticheUseTransazioniDatasource()) {
  1331.                         DBStatisticheManager.init(DBTransazioniManager.getInstance(), logCore, propertiesReader.getDatabaseType());
  1332.                     }
  1333.                     else {
  1334.                         DBStatisticheManager.init(propertiesReader.getStatisticheDatasource(), propertiesReader.getStatisticheDatasourceJndiContext(),
  1335.                                 logCore, propertiesReader.getDatabaseType(),
  1336.                                 propertiesReader.isStatisticheDatasourceUseDBUtils(), propertiesReader.isRisorseJMXAbilitate());
  1337.                     }
  1338.                 }
  1339.             }catch(Exception e){
  1340.                 OpenSPCoop2Startup.log.error("Inizializzazione DBStatisticheManager", e);
  1341.                 return;
  1342.             }
  1343.            
  1344.             if(OpenSPCoop2Startup.this.serverJ2EE==false){
  1345.                 if(propertiesReader.isTimerConsegnaContenutiApplicativiAbilitato()){
  1346.            
  1347.                     // GestoreConsegnePreseInCarico - Smistatore
  1348.                     try{
  1349.                         if(propertiesReader.isTimerConsegnaContenutiApplicativi_smistatore_runtime_useRuntimeManager()) {
  1350.                             DBConsegnePreseInCaricoManager.initSmistatore(DBManager.getInstance(), logCore, propertiesReader.getDatabaseType());
  1351.                         }
  1352.                         else {
  1353.                             DBConsegnePreseInCaricoManager.initSmistatore(propertiesReader.getTimerConsegnaContenutiApplicativi_smistatore_runtime_dataSource(), propertiesReader.getTimerConsegnaContenutiApplicativi_smistatore_runtime_dataSourceJndiContext(),
  1354.                                     logCore, propertiesReader.getDatabaseType(),
  1355.                                     propertiesReader.isTimerConsegnaContenutiApplicativi_smistatore_runtime_dataSource_useDBUtils(), propertiesReader.isRisorseJMXAbilitate());
  1356.                         }
  1357.                     }catch(Exception e){
  1358.                         OpenSPCoop2Startup.log.error("Inizializzazione GestoreConsegnePreseInCarico.smistatore", e);
  1359.                         return;
  1360.                     }
  1361.                    
  1362.                     // GestoreConsegnePreseInCarico - Runtime
  1363.                     try{
  1364.                         if(propertiesReader.isTimerConsegnaContenutiApplicativi_runtime_useRuntimeManager()) {
  1365.                             DBConsegnePreseInCaricoManager.initRuntime(DBManager.getInstance(), logCore, propertiesReader.getDatabaseType());
  1366.                         }
  1367.                         else {
  1368.                             DBConsegnePreseInCaricoManager.initRuntime(propertiesReader.getTimerConsegnaContenutiApplicativi_runtime_dataSource(), propertiesReader.getTimerConsegnaContenutiApplicativi_runtime_dataSourceJndiContext(),
  1369.                                     logCore, propertiesReader.getDatabaseType(),
  1370.                                     propertiesReader.isTimerConsegnaContenutiApplicativi_runtime_dataSource_useDBUtils(), propertiesReader.isRisorseJMXAbilitate());
  1371.                         }
  1372.                     }catch(Exception e){
  1373.                         OpenSPCoop2Startup.log.error("Inizializzazione GestoreConsegnePreseInCarico.runtime", e);
  1374.                         return;
  1375.                     }
  1376.                    
  1377.                     // GestoreConsegnePreseInCarico - Transazioni
  1378.                     try{
  1379.                         if(propertiesReader.isTimerConsegnaContenutiApplicativi_transazioni_useTransactionManager()) {
  1380.                             DBConsegnePreseInCaricoManager.initTransazioni(DBTransazioniManager.getInstance(), logCore, propertiesReader.getDatabaseType());
  1381.                         }
  1382.                         else {
  1383.                             DBConsegnePreseInCaricoManager.initTransazioni(propertiesReader.getTimerConsegnaContenutiApplicativi_transazioni_dataSource(), propertiesReader.getTimerConsegnaContenutiApplicativi_transazioni_dataSourceJndiContext(),
  1384.                                     logCore, propertiesReader.getDatabaseType(),
  1385.                                     propertiesReader.isTimerConsegnaContenutiApplicativi_transazioni_dataSource_useDBUtils(), propertiesReader.isRisorseJMXAbilitate());
  1386.                         }
  1387.                     }catch(Exception e){
  1388.                         OpenSPCoop2Startup.log.error("Inizializzazione GestoreConsegnePreseInCarico.transazioni", e);
  1389.                         return;
  1390.                     }
  1391.                    
  1392.                 }
  1393.             }
  1394.             if(propertiesReader.isIntegrationManagerEnabled()) {
  1395.                 // GestoreConsegneMessageBox - Runtime
  1396.                 try{
  1397.                     if(propertiesReader.isIntegrationManager_runtime_useRuntimeManager()) {
  1398.                         DBConsegneMessageBoxManager.initRuntime(DBManager.getInstance(), logCore, propertiesReader.getDatabaseType());
  1399.                     }
  1400.                     else if(propertiesReader.isIntegrationManager_runtime_useConsegnePreseInCaricoManager()) {
  1401.                         DBConsegnePreseInCaricoManager instance = DBConsegnePreseInCaricoManager.getInstanceRuntime();
  1402.                         if(instance==null) {
  1403.                             throw new CoreException("DBConsegnePreseInCaricoManager-runtime richiesto dalla configurazione del servizio MessageBox non risulta attivo");
  1404.                         }
  1405.                         DBConsegneMessageBoxManager.initRuntime(instance, logCore, propertiesReader.getDatabaseType());
  1406.                     }
  1407.                     else {
  1408.                         DBConsegneMessageBoxManager.initRuntime(propertiesReader.getIntegrationManager_runtime_dataSource(), propertiesReader.getIntegrationManager_runtime_dataSourceJndiContext(),
  1409.                                 logCore, propertiesReader.getDatabaseType(),
  1410.                                 propertiesReader.isIntegrationManager_runtime_dataSource_useDBUtils(), propertiesReader.isRisorseJMXAbilitate());
  1411.                     }
  1412.                 }catch(Exception e){
  1413.                     OpenSPCoop2Startup.log.error("Inizializzazione GestoreConsegneMessageBox.runtime", e);
  1414.                     return;
  1415.                 }
  1416.                
  1417.                 // GestoreConsegneMessageBox - Transazioni
  1418.                 try{
  1419.                     if(propertiesReader.isIntegrationManager_transazioni_useTransactionManager()) {
  1420.                         DBConsegneMessageBoxManager.initTransazioni(DBTransazioniManager.getInstance(), logCore, propertiesReader.getDatabaseType());
  1421.                     }
  1422.                     else if(propertiesReader.isIntegrationManager_transazioni_useConsegnePreseInCaricoManager()) {
  1423.                         DBConsegnePreseInCaricoManager instance = DBConsegnePreseInCaricoManager.getInstanceTransazioni();
  1424.                         if(instance==null) {
  1425.                             throw new CoreException("DBConsegnePreseInCaricoManager-transazioni richiesto dalla configurazione del servizio MessageBox non risulta attivo");
  1426.                         }
  1427.                         DBConsegneMessageBoxManager.initTransazioni(instance, logCore, propertiesReader.getDatabaseType());
  1428.                     }
  1429.                     else {
  1430.                         DBConsegneMessageBoxManager.initTransazioni(propertiesReader.getIntegrationManager_transazioni_dataSource(), propertiesReader.getIntegrationManager_transazioni_dataSourceJndiContext(),
  1431.                                 logCore, propertiesReader.getDatabaseType(),
  1432.                                 propertiesReader.isIntegrationManager_transazioni_dataSource_useDBUtils(), propertiesReader.isRisorseJMXAbilitate());
  1433.                     }
  1434.                 }catch(Exception e){
  1435.                     OpenSPCoop2Startup.log.error("Inizializzazione GestoreConsegneMessageBox.transazioni", e);
  1436.                     return;
  1437.                 }
  1438.             }

  1439.            
  1440.             /*----------- Inizializzazione Generatore di ClusterID  --------------*/
  1441.             String clusterID = null;
  1442.             try{
  1443.                 clusterID = propertiesReader.getClusterId(false);
  1444.                
  1445.                 String tipoGeneratoreClusterID = propertiesReader.getTipoIDManager();
  1446.                 String classClusterID = null;
  1447.                 if(CostantiConfigurazione.NONE.equals(tipoGeneratoreClusterID)){
  1448.                     if(clusterID!=null){
  1449.                         classClusterID = org.openspcoop2.utils.id.ClusterIdentifierGenerator.class.getName();
  1450.                     }
  1451.                 }else{
  1452.                     classClusterID = classNameReader.getUniqueIdentifier(tipoGeneratoreClusterID);
  1453.                 }
  1454.                
  1455.                 if(classClusterID==null){
  1456.                     UniqueIdentifierManager.disabilitaGenerazioneUID();
  1457.                 }else{
  1458.                    
  1459.                     Object [] paramsObject = null;
  1460.                     List<String> params = propertiesReader.getIDManagerParameters();
  1461.                     if(params!=null && !params.isEmpty()) {
  1462.                         paramsObject = new Object [params.size()];
  1463.                         for (int i = 0; i < params.size(); i++) {
  1464.                             paramsObject[i] = params.get(i);
  1465.                         }
  1466.                     }
  1467.                     else {
  1468.                         if(org.openspcoop2.utils.id.ClusterIdentifierGenerator.class.getName().equals(classClusterID)) {
  1469.                             String idCluster = propertiesReader.getClusterId(false);
  1470.                             if(idCluster!=null) {
  1471.                                 paramsObject = new Object [1];
  1472.                                 paramsObject[0] = idCluster;
  1473.                             }
  1474.                         }
  1475.                     }
  1476.                     UniqueIdentifierManager.inizializzaUniqueIdentifierManager(propertiesReader.useIDManagerWithThreadLocal(),classClusterID,paramsObject);
  1477.                     OpenSPCoop2Startup.logStartupInfo("UUID Generator: "+classClusterID);
  1478.                    
  1479.                     if(propertiesReader.generazioneDateCasualiLogAbilitato()){
  1480.                         GeneratoreCasualeDate.init(propertiesReader.getGenerazioneDateCasualiLogDataInizioIntervallo(),
  1481.                                 propertiesReader.getGenerazioneDateCasualiLogDataFineIntervallo(),
  1482.                                 OpenSPCoop2Startup.log);
  1483.                         OpenSPCoop2Startup.logStartupInfo("Abilitata generazione date casuali");
  1484.                     }
  1485.                    
  1486.                     // BufferProducer avviato in fondo allo startup
  1487.                 }
  1488.                                
  1489.             }catch(Exception e){
  1490.                 this.logError("Riscontrato errore durante l'inizializzazione del generatore di identificatori unici: "+e.getMessage(),e);
  1491.                 return;
  1492.             }











  1493.             /* ---------  Inizializzazione Configurazione di OpenSPCoop --------------------- */

  1494.             // Inizializza extended info
  1495.             try{
  1496.                 ExtendedInfoManager.initialize(true, loader, propertiesReader.getExtendedInfoConfigurazione(),
  1497.                         propertiesReader.getExtendedInfoPortaDelegata(), propertiesReader.getExtendedInfoPortaApplicativa());
  1498.             }catch(Exception e){
  1499.                 this.logError("Riscontrato errore durante l'inizializzazione del componente ExtendedInfoManager: "+e.getMessage(),e);
  1500.                 return;
  1501.             }
  1502.             // Inizializza il file ConfigReader che gestisce la configurazione di OpenSPCoop
  1503.             AccessoConfigurazionePdD accessoConfigurazione = null;
  1504.             try{
  1505.                 accessoConfigurazione = propertiesReader.getAccessoConfigurazionePdD();
  1506.             }catch(Exception e){
  1507.                 this.logError("Riscontrato errore durante la lettura della modalita' di accesso alla configurazione di OpenSPCoop: "+e.getMessage(),e);
  1508.                 return;
  1509.             }
  1510.             boolean isInitializeConfig = ConfigurazionePdDReader.initialize(accessoConfigurazione,logCore,OpenSPCoop2Startup.log,localConfig,
  1511.                     propertiesReader.getJNDIName_DataSource(), false,
  1512.                     propertiesReader.isDSOp2UtilsEnabled(), propertiesReader.isRisorseJMXAbilitate(),
  1513.                     propertiesReader.isConfigurazioneCache_ConfigPrefill(), propertiesReader.getCryptConfigAutenticazioneApplicativi(),
  1514.                     propertiesReader.getCacheTypeConfig());
  1515.             if(!isInitializeConfig){
  1516.                 this.logError("Riscontrato errore durante l'inizializzazione della configurazione di OpenSPCoop.");
  1517.                 return;
  1518.             }
  1519.             ConfigurazionePdDManager configurazionePdDManager = ConfigurazionePdDManager.getInstance();
  1520.             if(msgDiagProperties.checkValoriFiltriMsgDiagnostici(OpenSPCoop2Startup.log)==false){
  1521.                 return;
  1522.             }
  1523.             OpenSPCoop2Startup.logStartupInfo("ConfigurazionePdD, refresh: "+propertiesReader.isConfigurazioneDinamica());





  1524.            
  1525.            
  1526.             /*----------- Inizializzazione Configurazione Cluster Dinamica --------------*/
  1527.             try{
  1528.                 if(propertiesReader.isClusterDinamico()) {
  1529.                     if(propertiesReader.isUseHashClusterId()) {
  1530.                         propertiesReader.updateClusterId();
  1531.                     }
  1532.                     OpenSPCoop2Startup.logStartupInfo("Nodo avviato in modalità cluster dinamica con identificativo '"+propertiesReader.getClusterId(false)+"' ("+propertiesReader.getCluster_id_preCodificaHash()+")");
  1533.                    
  1534.                     // aggiorno
  1535.                     clusterID = propertiesReader.getClusterId(false);
  1536.                 }
  1537.                
  1538.                 boolean rateLimitingGestioneCluster = false;
  1539.                 if(propertiesReader.isControlloTrafficoEnabled()) {
  1540.                     List<PolicyGroupByActiveThreadsType> list = configurazionePdDManager.getTipiGestoreRateLimiting();
  1541.                     rateLimitingGestioneCluster = list!=null && list.contains(PolicyGroupByActiveThreadsType.LOCAL_DIVIDED_BY_NODES);
  1542.                 }
  1543.                
  1544.                 if(propertiesReader.isClusterDinamico() || rateLimitingGestioneCluster) {  
  1545.                     DynamicClusterManager.initStaticInstance();
  1546.                     DynamicClusterManager.getInstance().setRateLimitingGestioneCluster(rateLimitingGestioneCluster);
  1547.                     DynamicClusterManager.getInstance().register(OpenSPCoop2Startup.log);
  1548.                 }
  1549.             }catch(Exception e){
  1550.                 this.logError("Riscontrato errore durante l'inizializzazione della configurazione relativa al cluster dinamico: "+e.getMessage(),e);
  1551.                 return;
  1552.             }
  1553.            
  1554.            
  1555.            




  1556.             /*----------- Inizializzazione libreria --------------*/
  1557.             try{
  1558.                 IGestoreRepository repository = null;
  1559.                 // Il tipo deve sempre essere letto da openspcoop.properties, altrimenti la testsuite che richiede il tipo di default non viene mai eseguita.
  1560.                 String tipoClass = classNameReader.getRepositoryBuste(propertiesReader.getGestoreRepositoryBuste());
  1561.                 repository = (IGestoreRepository) loader.newInstance(tipoClass);
  1562.                 org.openspcoop2.protocol.engine.Configurazione.init(
  1563.                         propertiesReader.getGestioneSerializableDBCheckInterval(),
  1564.                         repository,propertiesReader.getDatabaseType(),logCore);
  1565.             }catch(Exception e){
  1566.                 this.logError("Riscontrato errore durante l'inizializzazione della libreria del protocollo: "+e.getMessage());
  1567.                 logCore.error("Riscontrato errore durante l'inizializzazione della libreria del protocollo: "+e.getMessage(),e);
  1568.                 return;
  1569.             }









  1570.             /* -------------- Inizializzo MsgDiagnostico -------------------- */
  1571.             MsgDiagnostico msgDiag = MsgDiagnostico.newInstance(OpenSPCoop2Startup.ID_MODULO);


  1572.            
  1573.            
  1574.            
  1575.            
  1576.            
  1577.            
  1578.             /* -------------- Creazione lock entry non esistenti -------------------- */
  1579.             if(!TimerUtils.createEmptyLockTimers(propertiesReader, ID_MODULO, OpenSPCoop2Logger.getLoggerOpenSPCoopTimers(), true)) {
  1580.                 msgDiag.logStartupError("Inizializzazione lock per i timer fallita","Inizializzazione Lock");
  1581.                 return;
  1582.             }
  1583.            
  1584.             /* -------------- Rilascio lock -------------------- */
  1585.             // Il rilascio serve a ripulire eventuali lock presi e non rilasciati durante lo shutdown, poiche' la connessione non era piu' disponibile o vi e' stato un kill
  1586.             TimerUtils.relaseLockTimers(propertiesReader, ID_MODULO, OpenSPCoop2Logger.getLoggerOpenSPCoopTimers(), true);
  1587.            
  1588.            
  1589.            
  1590.            
  1591.            
  1592.            
  1593.            
  1594.            
  1595.            
  1596.            
  1597.            
  1598.            
  1599.             /*----------- Inizializzazione SystemProperties --------------*/
  1600.             try{
  1601.                 SystemPropertiesManager spm = new SystemPropertiesManager(configurazionePdDManager,logCore);
  1602.                 spm.updateSystemProperties();
  1603.             }catch(Exception e){
  1604.                 msgDiag.logStartupError(e,"Inizializzazione proprieta' di sistema");
  1605.                 return;
  1606.             }
  1607.            
  1608.            
  1609.            
  1610.            
  1611.            
  1612.            
  1613.             /*----------- Inizializzazione Autorizzazione --------------*/
  1614.             try{
  1615.                 AccessoDatiAutorizzazione datiAutorizzazione = configurazionePdDManager.getAccessoDatiAutorizzazione();
  1616.                 if(datiAutorizzazione!=null && datiAutorizzazione.getCache()!=null){
  1617.                    
  1618.                     int dimensioneCache = -1;
  1619.                     if(datiAutorizzazione.getCache().getDimensione()!=null){
  1620.                         try{
  1621.                             dimensioneCache = Integer.parseInt(datiAutorizzazione.getCache().getDimensione());
  1622.                         }catch(Exception e){
  1623.                             throw new CoreException("Parametro 'dimensioneCache' errato per la cache di accesso ai dati di autorizzazione");
  1624.                         }
  1625.                     }
  1626.                    
  1627.                     String algoritmo = null;
  1628.                     if(datiAutorizzazione.getCache().getAlgoritmo()!=null){
  1629.                         algoritmo = datiAutorizzazione.getCache().getAlgoritmo().toString();
  1630.                     }
  1631.                    
  1632.                     long idleTime = -1;
  1633.                     if(datiAutorizzazione.getCache().getItemIdleTime()!=null){
  1634.                         try{
  1635.                             idleTime = Integer.parseInt(datiAutorizzazione.getCache().getItemIdleTime());
  1636.                         }catch(Exception e){
  1637.                             throw new CoreException("Parametro 'idleTime' errato per la cache di accesso ai dati di autorizzazione");
  1638.                         }
  1639.                     }
  1640.                    
  1641.                     long itemLifeSecond = -1;
  1642.                     if(datiAutorizzazione.getCache().getItemLifeSecond()!=null){
  1643.                         try{
  1644.                             itemLifeSecond = Integer.parseInt(datiAutorizzazione.getCache().getItemLifeSecond());
  1645.                         }catch(Exception e){
  1646.                             throw new CoreException("Parametro 'itemLifeSecond' errato per la cache di accesso ai dati di autorizzazione");
  1647.                         }
  1648.                     }

  1649.                     GestoreAutorizzazione.initialize(propertiesReader.getCacheTypeAuthorization(), dimensioneCache, algoritmo, idleTime, itemLifeSecond, logCore);
  1650.                 }
  1651.                 else{
  1652.                     GestoreAutorizzazione.initialize(logCore);
  1653.                 }
  1654.             }catch(Exception e){
  1655.                 msgDiag.logStartupError(e,"Gestore Autorizzazione");
  1656.                 return;
  1657.             }
  1658.            
  1659.            
  1660.            
  1661.            
  1662.            
  1663.             /*----------- Inizializzazione Autenticazione --------------*/
  1664.             try{
  1665.                 AccessoDatiAutenticazione datiAutenticazione = configurazionePdDManager.getAccessoDatiAutenticazione();
  1666.                 if(datiAutenticazione!=null && datiAutenticazione.getCache()!=null){
  1667.                    
  1668.                     int dimensioneCache = -1;
  1669.                     if(datiAutenticazione.getCache().getDimensione()!=null){
  1670.                         try{
  1671.                             dimensioneCache = Integer.parseInt(datiAutenticazione.getCache().getDimensione());
  1672.                         }catch(Exception e){
  1673.                             throw new CoreException("Parametro 'dimensioneCache' errato per la cache di accesso ai dati di autenticazione");
  1674.                         }
  1675.                     }
  1676.                    
  1677.                     String algoritmo = null;
  1678.                     if(datiAutenticazione.getCache().getAlgoritmo()!=null){
  1679.                         algoritmo = datiAutenticazione.getCache().getAlgoritmo().toString();
  1680.                     }
  1681.                    
  1682.                     long idleTime = -1;
  1683.                     if(datiAutenticazione.getCache().getItemIdleTime()!=null){
  1684.                         try{
  1685.                             idleTime = Integer.parseInt(datiAutenticazione.getCache().getItemIdleTime());
  1686.                         }catch(Exception e){
  1687.                             throw new CoreException("Parametro 'idleTime' errato per la cache di accesso ai dati di autenticazione");
  1688.                         }
  1689.                     }
  1690.                    
  1691.                     long itemLifeSecond = -1;
  1692.                     if(datiAutenticazione.getCache().getItemLifeSecond()!=null){
  1693.                         try{
  1694.                             itemLifeSecond = Integer.parseInt(datiAutenticazione.getCache().getItemLifeSecond());
  1695.                         }catch(Exception e){
  1696.                             throw new CoreException("Parametro 'itemLifeSecond' errato per la cache di accesso ai dati di autenticazione");
  1697.                         }
  1698.                     }

  1699.                     GestoreAutenticazione.initialize(propertiesReader.getCacheTypeAuthentication(), dimensioneCache, algoritmo, idleTime, itemLifeSecond, logCore);
  1700.                 }
  1701.                 else{
  1702.                     GestoreAutenticazione.initialize(logCore);
  1703.                 }
  1704.             }catch(Exception e){
  1705.                 msgDiag.logStartupError(e,"Gestore Autenticazione");
  1706.                 return;
  1707.             }
  1708.            
  1709.            
  1710.            
  1711.            
  1712.            
  1713.            
  1714.             /*----------- Inizializzazione GestoreToken --------------*/
  1715.             try{
  1716.                 AccessoDatiGestioneToken datiGestioneToken = configurazionePdDManager.getAccessoDatiGestioneToken();
  1717.                 if(datiGestioneToken!=null && datiGestioneToken.getCache()!=null){
  1718.                    
  1719.                     int dimensioneCache = -1;
  1720.                     if(datiGestioneToken.getCache().getDimensione()!=null){
  1721.                         try{
  1722.                             dimensioneCache = Integer.parseInt(datiGestioneToken.getCache().getDimensione());
  1723.                         }catch(Exception e){
  1724.                             throw new CoreException("Parametro 'dimensioneCache' errato per la cache di accesso ai dati dei token");
  1725.                         }
  1726.                     }
  1727.                    
  1728.                     String algoritmo = null;
  1729.                     if(datiGestioneToken.getCache().getAlgoritmo()!=null){
  1730.                         algoritmo = datiGestioneToken.getCache().getAlgoritmo().toString();
  1731.                     }
  1732.                    
  1733.                     long idleTime = -1;
  1734.                     if(datiGestioneToken.getCache().getItemIdleTime()!=null){
  1735.                         try{
  1736.                             idleTime = Integer.parseInt(datiGestioneToken.getCache().getItemIdleTime());
  1737.                         }catch(Exception e){
  1738.                             throw new CoreException("Parametro 'idleTime' errato per la cache di accesso ai dati dei token");
  1739.                         }
  1740.                     }
  1741.                    
  1742.                     long itemLifeSecond = -1;
  1743.                     if(datiGestioneToken.getCache().getItemLifeSecond()!=null){
  1744.                         try{
  1745.                             itemLifeSecond = Integer.parseInt(datiGestioneToken.getCache().getItemLifeSecond());
  1746.                         }catch(Exception e){
  1747.                             throw new CoreException("Parametro 'itemLifeSecond' errato per la cache di accesso ai dati dei token");
  1748.                         }
  1749.                     }

  1750.                     GestoreToken.initializeGestioneToken(propertiesReader.getCacheTypeToken(), dimensioneCache, algoritmo, idleTime, itemLifeSecond, logCore);
  1751.                 }
  1752.                 else{
  1753.                     GestoreToken.initializeGestioneToken(logCore);
  1754.                 }
  1755.             }catch(Exception e){
  1756.                 msgDiag.logStartupError(e,"Gestore Token");
  1757.                 return;
  1758.             }
  1759.            
  1760.            
  1761.            
  1762.            
  1763.            
  1764.            
  1765.             /*----------- Inizializzazione AttributeAuthority --------------*/
  1766.             try{
  1767.                 AccessoDatiAttributeAuthority datiAttributeAuthority = configurazionePdDManager.getAccessoDatiAttributeAuthority();
  1768.                 if(datiAttributeAuthority!=null && datiAttributeAuthority.getCache()!=null){
  1769.                    
  1770.                     int dimensioneCache = -1;
  1771.                     if(datiAttributeAuthority.getCache().getDimensione()!=null){
  1772.                         try{
  1773.                             dimensioneCache = Integer.parseInt(datiAttributeAuthority.getCache().getDimensione());
  1774.                         }catch(Exception e){
  1775.                             throw new CoreException("Parametro 'dimensioneCache' errato per la cache di accesso ai dati dei token");
  1776.                         }
  1777.                     }
  1778.                    
  1779.                     String algoritmo = null;
  1780.                     if(datiAttributeAuthority.getCache().getAlgoritmo()!=null){
  1781.                         algoritmo = datiAttributeAuthority.getCache().getAlgoritmo().toString();
  1782.                     }
  1783.                    
  1784.                     long idleTime = -1;
  1785.                     if(datiAttributeAuthority.getCache().getItemIdleTime()!=null){
  1786.                         try{
  1787.                             idleTime = Integer.parseInt(datiAttributeAuthority.getCache().getItemIdleTime());
  1788.                         }catch(Exception e){
  1789.                             throw new CoreException("Parametro 'idleTime' errato per la cache di accesso ai dati dei token");
  1790.                         }
  1791.                     }
  1792.                    
  1793.                     long itemLifeSecond = -1;
  1794.                     if(datiAttributeAuthority.getCache().getItemLifeSecond()!=null){
  1795.                         try{
  1796.                             itemLifeSecond = Integer.parseInt(datiAttributeAuthority.getCache().getItemLifeSecond());
  1797.                         }catch(Exception e){
  1798.                             throw new CoreException("Parametro 'itemLifeSecond' errato per la cache di accesso ai dati dei token");
  1799.                         }
  1800.                     }

  1801.                     GestoreToken.initializeAttributeAuthority(propertiesReader.getCacheTypeAttributeAuthority(), dimensioneCache, algoritmo, idleTime, itemLifeSecond, logCore);
  1802.                 }
  1803.                 else{
  1804.                     GestoreToken.initializeAttributeAuthority(logCore);
  1805.                 }
  1806.             }catch(Exception e){
  1807.                 msgDiag.logStartupError(e,"AttributeAuthority");
  1808.                 return;
  1809.             }
  1810.            
  1811.            
  1812.            
  1813.            
  1814.            
  1815.            
  1816.            
  1817.            
  1818.             /*----------- Inizializzazione ResponseCaching --------------*/
  1819.             try{
  1820.                 GestoreCacheResponseCaching.initialize();
  1821.                
  1822.                 org.openspcoop2.core.config.Cache responseCachingCacheConfig = configurazionePdDManager.getConfigurazioneResponseCachingCache();
  1823.                 if(responseCachingCacheConfig!=null){
  1824.                    
  1825.                     int dimensioneCache = -1;
  1826.                     if(responseCachingCacheConfig.getDimensione()!=null){
  1827.                         try{
  1828.                             dimensioneCache = Integer.parseInt(responseCachingCacheConfig.getDimensione());
  1829.                         }catch(Exception e){
  1830.                             throw new CoreException("Parametro 'dimensioneCache' errato per la cache di response caching");
  1831.                         }
  1832.                     }
  1833.                    
  1834.                     String algoritmo = null;
  1835.                     if(responseCachingCacheConfig.getAlgoritmo()!=null){
  1836.                         algoritmo = responseCachingCacheConfig.getAlgoritmo().toString();
  1837.                     }
  1838.                    
  1839.                     long idleTime = -1;
  1840.                     if(responseCachingCacheConfig.getItemIdleTime()!=null){
  1841.                         try{
  1842.                             idleTime = Integer.parseInt(responseCachingCacheConfig.getItemIdleTime());
  1843.                         }catch(Exception e){
  1844.                             throw new CoreException("Parametro 'idleTime' errato per la cache di response caching");
  1845.                         }
  1846.                     }
  1847.                    
  1848.                     long itemLifeSecond = -1;
  1849.                     if(responseCachingCacheConfig.getItemLifeSecond()!=null){
  1850.                         try{
  1851.                             itemLifeSecond = Integer.parseInt(responseCachingCacheConfig.getItemLifeSecond());
  1852.                         }catch(Exception e){
  1853.                             throw new CoreException("Parametro 'itemLifeSecond' errato per la cache di response caching");
  1854.                         }
  1855.                     }

  1856.                     GestoreCacheResponseCaching.initialize(propertiesReader.getCacheTypeResponseCaching(), dimensioneCache, algoritmo, idleTime, itemLifeSecond, logCore);
  1857.                 }
  1858.                 else{
  1859.                     GestoreCacheResponseCaching.initialize(logCore);
  1860.                 }
  1861.             }catch(Exception e){
  1862.                 msgDiag.logStartupError(e,"Gestore Response Caching");
  1863.                 return;
  1864.             }
  1865.            
  1866.            
  1867.            
  1868.            
  1869.            
  1870.            
  1871.            
  1872.            
  1873.            
  1874.            
  1875.            
  1876.            
  1877.             /* ----------- Inizializzazione Keystore Security ------------ */
  1878.            
  1879.             try{
  1880.                 AccessoDatiKeystore keystoreCacheConfig = configurazionePdDManager.getAccessoDatiKeystore();
  1881.                 if(keystoreCacheConfig!=null && keystoreCacheConfig.getCache()!=null){
  1882.                    
  1883.                     int dimensioneCache = -1;
  1884.                     if(keystoreCacheConfig.getCache().getDimensione()!=null){
  1885.                         try{
  1886.                             dimensioneCache = Integer.parseInt(keystoreCacheConfig.getCache().getDimensione());
  1887.                         }catch(Exception e){
  1888.                             throw new CoreException("Parametro 'dimensioneCache' errato per la cache di accesso ai keystore");
  1889.                         }
  1890.                     }
  1891.                    
  1892.                     String algoritmo = null;
  1893.                     if(keystoreCacheConfig.getCache().getAlgoritmo()!=null){
  1894.                         algoritmo = keystoreCacheConfig.getCache().getAlgoritmo().toString();
  1895.                     }
  1896.                    
  1897.                     long idleTime = -1;
  1898.                     if(keystoreCacheConfig.getCache().getItemIdleTime()!=null){
  1899.                         try{
  1900.                             idleTime = Integer.parseInt(keystoreCacheConfig.getCache().getItemIdleTime());
  1901.                         }catch(Exception e){
  1902.                             throw new CoreException("Parametro 'idleTime' errato per la cache di accesso ai keystore");
  1903.                         }
  1904.                     }
  1905.                    
  1906.                     long itemLifeSecond = -1;
  1907.                     if(keystoreCacheConfig.getCache().getItemLifeSecond()!=null){
  1908.                         try{
  1909.                             itemLifeSecond = Integer.parseInt(keystoreCacheConfig.getCache().getItemLifeSecond());
  1910.                         }catch(Exception e){
  1911.                             throw new CoreException("Parametro 'itemLifeSecond' errato per la cache di accesso ai keystore");
  1912.                         }
  1913.                     }
  1914.                    
  1915.                     long itemCrlLifeSecond = -1;
  1916.                     if(keystoreCacheConfig.getCrlItemLifeSecond()!=null){
  1917.                         try{
  1918.                             itemCrlLifeSecond = Integer.parseInt(keystoreCacheConfig.getCrlItemLifeSecond());
  1919.                         }catch(Exception e){
  1920.                             throw new CoreException("Parametro 'itemCrlLifeSecond' errato per la cache di accesso ai keystore");
  1921.                         }
  1922.                     }

  1923.                     GestoreKeystoreCaching.initialize(propertiesReader.getCacheTypeKeystore(), dimensioneCache, algoritmo, idleTime, itemLifeSecond, logCore);
  1924.                    
  1925.                     if(itemCrlLifeSecond>0) {
  1926.                         GestoreKeystoreCaching.setCacheCrlLifeSeconds(itemCrlLifeSecond);
  1927.                     }
  1928.                 }
  1929.                 else{
  1930.                     GestoreKeystoreCaching.initialize(logCore);
  1931.                    
  1932.                     // Provo ad utilizzare la cache alternativa in memoria
  1933.                     GestoreKeystoreCache.setKeystoreCacheParameters(propertiesReader.isAbilitataCacheMessageSecurityKeystore(),
  1934.                             propertiesReader.getItemLifeSecondCacheMessageSecurityKeystore(),
  1935.                             propertiesReader.getDimensioneCacheMessageSecurityKeystore());
  1936.                     OpenSPCoop2Startup.logStartupInfo("MessageSecurity Keystore Cache In-Memory enabled["+propertiesReader.isAbilitataCacheMessageSecurityKeystore()+"] itemLifeSecond["+
  1937.                             propertiesReader.getItemLifeSecondCacheMessageSecurityKeystore()+"] size["+
  1938.                             propertiesReader.getDimensioneCacheMessageSecurityKeystore()+"]");
  1939.                    
  1940.                 }
  1941.             }catch(Exception e){
  1942.                 msgDiag.logStartupError(e,"Gestore Keystore Caching");
  1943.                 return;
  1944.             }
  1945.            
  1946.            
  1947.            
  1948.            
  1949.            
  1950.            
  1951.            
  1952.            
  1953.            
  1954.             /*----------- Inizializzazione Cache per Consegna Applicativi --------------*/
  1955.             // Viene fatta prima, perchè questi valori vengono letti dalle inforamzioni JMX sotto.
  1956.             try{
  1957.                 org.openspcoop2.core.config.Cache consegnaApplicativiCacheConfig = configurazionePdDManager.getConfigurazioneConsegnaApplicativiCache();
  1958.                 if(consegnaApplicativiCacheConfig!=null){
  1959.                    
  1960.                     int dimensioneCache = -1;
  1961.                     if(consegnaApplicativiCacheConfig.getDimensione()!=null){
  1962.                         try{
  1963.                             dimensioneCache = Integer.parseInt(consegnaApplicativiCacheConfig.getDimensione());
  1964.                         }catch(Exception e){
  1965.                             throw new CoreException("Parametro 'dimensioneCache' errato per la cache di response caching");
  1966.                         }
  1967.                     }
  1968.                    
  1969.                     String algoritmo = null;
  1970.                     if(consegnaApplicativiCacheConfig.getAlgoritmo()!=null){
  1971.                         algoritmo = consegnaApplicativiCacheConfig.getAlgoritmo().toString();
  1972.                     }
  1973.                    
  1974.                     long idleTime = -1;
  1975.                     if(consegnaApplicativiCacheConfig.getItemIdleTime()!=null){
  1976.                         try{
  1977.                             idleTime = Integer.parseInt(consegnaApplicativiCacheConfig.getItemIdleTime());
  1978.                         }catch(Exception e){
  1979.                             throw new CoreException("Parametro 'idleTime' errato per la cache di response caching");
  1980.                         }
  1981.                     }
  1982.                    
  1983.                     long itemLifeSecond = -1;
  1984.                     if(consegnaApplicativiCacheConfig.getItemLifeSecond()!=null){
  1985.                         try{
  1986.                             itemLifeSecond = Integer.parseInt(consegnaApplicativiCacheConfig.getItemLifeSecond());
  1987.                         }catch(Exception e){
  1988.                             throw new CoreException("Parametro 'itemLifeSecond' errato per la cache di response caching");
  1989.                         }
  1990.                     }

  1991.                     GestoreLoadBalancerCaching.initialize(propertiesReader.getCacheTypeLoadBalancer(), dimensioneCache, algoritmo, idleTime, itemLifeSecond, logCore);
  1992.                 }
  1993.                 else{
  1994.                     GestoreLoadBalancerCaching.initialize(logCore);
  1995.                 }
  1996.             }catch(Exception e){
  1997.                 msgDiag.logStartupError(e,"Gestore Consegna Applicativi Cache");
  1998.                 return;
  1999.             }
  2000.            
  2001.            
  2002.            
  2003.            
  2004.            
  2005.            
  2006.            
  2007.            
  2008.            
  2009.             /* ----------- Inizializzazione Gestore Richieste ------------ */
  2010.            
  2011.             try{
  2012.                 AccessoDatiRichieste gestoreRichiesteCacheConfig = configurazionePdDManager.getAccessoDatiRichieste();
  2013.                 if(gestoreRichiesteCacheConfig!=null && gestoreRichiesteCacheConfig.getCache()!=null){
  2014.                    
  2015.                     int dimensioneCache = -1;
  2016.                     if(gestoreRichiesteCacheConfig.getCache().getDimensione()!=null){
  2017.                         try{
  2018.                             dimensioneCache = Integer.parseInt(gestoreRichiesteCacheConfig.getCache().getDimensione());
  2019.                         }catch(Exception e){
  2020.                             throw new CoreException("Parametro 'dimensioneCache' errato per la cache di accesso ai dati delle richieste");
  2021.                         }
  2022.                     }
  2023.                    
  2024.                     String algoritmo = null;
  2025.                     if(gestoreRichiesteCacheConfig.getCache().getAlgoritmo()!=null){
  2026.                         algoritmo = gestoreRichiesteCacheConfig.getCache().getAlgoritmo().toString();
  2027.                     }
  2028.                    
  2029.                     long idleTime = -1;
  2030.                     if(gestoreRichiesteCacheConfig.getCache().getItemIdleTime()!=null){
  2031.                         try{
  2032.                             idleTime = Integer.parseInt(gestoreRichiesteCacheConfig.getCache().getItemIdleTime());
  2033.                         }catch(Exception e){
  2034.                             throw new CoreException("Parametro 'idleTime' errato per la cache di accesso ai dati delle richieste");
  2035.                         }
  2036.                     }
  2037.                    
  2038.                     long itemLifeSecond = -1;
  2039.                     if(gestoreRichiesteCacheConfig.getCache().getItemLifeSecond()!=null){
  2040.                         try{
  2041.                             itemLifeSecond = Integer.parseInt(gestoreRichiesteCacheConfig.getCache().getItemLifeSecond());
  2042.                         }catch(Exception e){
  2043.                             throw new CoreException("Parametro 'itemLifeSecond' errato per la cache di accesso ai dati delle richieste");
  2044.                         }
  2045.                     }
  2046.                    
  2047.                     GestoreRichieste.initCacheGestoreRichieste(propertiesReader.getCacheTypeRequestManager(), dimensioneCache, algoritmo,
  2048.                             idleTime, itemLifeSecond, logCore);
  2049.                    
  2050.                 }
  2051.                 else{
  2052.                     GestoreRichieste.initialize(logCore);                  
  2053.                 }
  2054.                
  2055.                
  2056.                 RequestConfig.setUseCacheForExternalResource(propertiesReader.isConfigurazioneCacheRequestManagerExternalResourceSaveInCache());
  2057.                 OpenSPCoop2Startup.logStartupInfo("RequestConfig, useCacheForExternalResource: "+RequestConfig.isUseCacheForExternalResource());
  2058.                
  2059.                 RequestConfig.setUseCacheForOCSPResponse(propertiesReader.isConfigurazioneCacheRequestManagerOCSPResponseSaveInCache());
  2060.                 OpenSPCoop2Startup.logStartupInfo("RequestConfig, useCacheForOCSPResponse: "+RequestConfig.isUseCacheForOCSPResponse());
  2061.                
  2062.                 RequestConfig.setUseCacheForRemoteStore(propertiesReader.isConfigurazioneCacheRequestManagerRemoteStoreSaveInCache());
  2063.                 OpenSPCoop2Startup.logStartupInfo("RequestConfig, useCacheForRemoteStore: "+RequestConfig.isUseCacheForRemoteStore());
  2064.                
  2065.                
  2066.             }catch(Exception e){
  2067.                 msgDiag.logStartupError(e,"Gestore DatiRichieste Caching");
  2068.                 return;
  2069.             }
  2070.            
  2071.            
  2072.            
  2073.            
  2074.            
  2075.            
  2076.            
  2077.            
  2078.            
  2079.            
  2080.            
  2081.            
  2082.            
  2083.             /* ----------- Inizializzazione Gestore Risorse JMX (le risorse jmx vengono registrate in seguito) ------------ */
  2084.             try{
  2085.                 if(propertiesReader.isRisorseJMXAbilitate()){
  2086.                     if(propertiesReader.getJNDIName_MBeanServer()!=null){
  2087.                         OpenSPCoop2Startup.this.gestoreRisorseJMX = new GestoreRisorseJMXGovWay(propertiesReader.getJNDIName_MBeanServer(),
  2088.                                 propertiesReader.getJNDIContext_MBeanServer());
  2089.                     }else{
  2090.                         OpenSPCoop2Startup.this.gestoreRisorseJMX = new GestoreRisorseJMXGovWay();
  2091.                     }
  2092.                     OpenSPCoop2Startup.gestoreRisorseJMX_staticInstance = OpenSPCoop2Startup.this.gestoreRisorseJMX;
  2093.                 }
  2094.             }catch(Exception e){
  2095.                 msgDiag.logStartupError(e,"Gestore Risorse JMX");
  2096.                 return;
  2097.             }
  2098.            
  2099.            
  2100.            
  2101.            
  2102.            
  2103.            
  2104.            
  2105.            

  2106.            
  2107.            
  2108.             /* ------------- Inizializzazione Protocolli ----------- */
  2109.             ProtocolFactoryManager protocolFactoryManager = null;
  2110.             try{
  2111.                 ConfigurazionePdD configPdD = new ConfigurazionePdD();
  2112.                 configPdD.setConfigurationDir(propertiesReader.getRootDirectory());
  2113.                 configPdD.setLoader(loader);
  2114.                 configPdD.setAttesaAttivaJDBC(propertiesReader.getGestioneSerializableDBAttesaAttiva());
  2115.                 configPdD.setCheckIntervalJDBC(propertiesReader.getGestioneSerializableDBCheckInterval());
  2116.                 configPdD.setTipoDatabase(TipiDatabase.toEnumConstant(propertiesReader.getDatabaseType()));
  2117.                 configPdD.setLog(logCore);
  2118.                
  2119.                 Costanti.initHTTP_HEADER_GOVWAY_ERROR_STATUS(propertiesReader.getErroriHttpHeaderGovWayStatus());
  2120.                 Costanti.initHTTP_HEADER_GOVWAY_ERROR_TYPE(propertiesReader.getErroriHttpHeaderGovWayType());
  2121.                 Costanti.initHTTP_HEADER_GOVWAY_ERROR_CODE(propertiesReader.getErroriHttpHeaderGovWayCode());
  2122.                
  2123.                 Costanti.setTRANSACTION_ERROR_SOAP_USE_GOVWAY_STATUS_AS_FAULT_CODE(propertiesReader.isErroriSoapUseGovWayStatusAsFaultCode());
  2124.                 Costanti.setTRANSACTION_ERROR_SOAP_GENERATE_HTTP_HEADER_GOVWAY_CODE(propertiesReader.isErroriSoapHttpHeaderGovWayCodeEnabled());
  2125.                                
  2126.                 Costanti.setTRANSACTION_ERROR_STATUS_ABILITATO(propertiesReader.isErroriGovWayStatusEnabled());
  2127.                 Costanti.setTRANSACTION_ERROR_INSTANCE_ID_ABILITATO(propertiesReader.isErroriGovWayInstanceEnabled());
  2128.                 Costanti.setTRANSACTION_FORCE_SPECIFIC_ERROR_DETAILS(propertiesReader.isErroriGovWayForceSpecificDetails());
  2129.                 Costanti.setTRANSACTION_ERROR_SOAP_FAULT_ADD_FAULT_DETAILS_WITH_PROBLEM_RFC7807(propertiesReader.isErroriGovWayFaultDetailsWithProblemRFC7807());
  2130.                
  2131.                 Costanti.initPROBLEM_RFC7807_ENRICH_TITLE_AS_GOVWAY_TYPE(propertiesReader.isProblemRFC7807_enrichTitleAsGovWayType());
  2132.                 Costanti.initPROBLEM_RFC7807_ENRICH_TITLE_AS_GOVWAY_TYPE_CAMEL_CASE_DECODE(propertiesReader.isProblemRFC7807_enrichTitleAsGovWayType_camelCaseDecode());
  2133.                 Costanti.initPROBLEM_RFC7807_ENRICH_TITLE_AS_GOVWAY_TYPE_CUSTOM_CLAIM(propertiesReader.isProblemRFC7807_enrichTitleAsGovWayType_customClaim());
  2134.                 Costanti.initPROBLEM_RFC7807_GOVWAY_TRANSACTION_ID(propertiesReader.getProblemRFC7807_transactionId_claim());
  2135.                 Costanti.initPROBLEM_RFC7807_GOVWAY_CODE(propertiesReader.getProblemRFC7807_code_claim());
  2136.                 Costanti.initPROBLEM_RFC7807_GOVWAY_TYPE(propertiesReader.getProblemRFC7807_type_claim());
  2137.                                
  2138.                 ProtocolFactoryManager.initialize(OpenSPCoop2Startup.log, configPdD, propertiesReader.getDefaultProtocolName());
  2139.                 // forzo update logger. (viene caricato dopo il log della console)
  2140.                 ProtocolFactoryManager.updateLogger(logCore);
  2141.                 protocolFactoryManager = ProtocolFactoryManager.getInstance();
  2142.                 // Update protocolLogger
  2143.                 boolean isInitializeLoggerProtocol = OpenSPCoop2Logger.initializeProtocolLogger(OpenSPCoop2Startup.log, true, propertiesReader.getRootDirectory(),loggerP);
  2144.                 if(!isInitializeLoggerProtocol){
  2145.                     return;
  2146.                 }
  2147.                 // Initialize Protocols
  2148.                 protocolFactoryManager.initializeAllProtocols();
  2149.                
  2150.                 // Inizializzazione schemi per altri message factory
  2151.                 if(messageFactory.size()>1) {
  2152.                     // La factory alla prima posizione, e' la factory di default già inizializzata
  2153.                     for (int i = 1; i < messageFactory.size(); i++) {
  2154.                         OpenSPCoop2MessageFactory factory = messageFactory.get(i);
  2155.                         Enumeration<String> protocolli = ProtocolFactoryManager.getInstance().getProtocolNames();
  2156.                         while (protocolli.hasMoreElements()) {
  2157.                             String protocollo = protocolli.nextElement();
  2158.                             if(ProtocolFactoryManager.getInstance().getProtocolFactoryByName(protocollo).createValidazioneConSchema(null).initialize(factory)==false) {
  2159.                                 throw new CoreException("Inizializzazione validatore con schemi per il protocollo '"+protocollo+"' e messagefactory '"+factory.getClass().getName()+"' fallita");
  2160.                             }
  2161.                         }
  2162.                     }
  2163.                 }
  2164.                
  2165.                 // Inizializza RemoteStore
  2166.                 Enumeration<String> protocolli = ProtocolFactoryManager.getInstance().getProtocolNames();
  2167.                 while (protocolli.hasMoreElements()) {
  2168.                     String protocollo = protocolli.nextElement();
  2169.                     List<RemoteStoreConfig> lRSC = ProtocolFactoryManager.getInstance().getProtocolFactoryByName(protocollo).createProtocolConfiguration().getRemoteStoreConfig();
  2170.                     if(lRSC!=null && !lRSC.isEmpty()) {
  2171.                         for (RemoteStoreConfig remoteStoreConfig : lRSC) {
  2172.                             RemoteStoreProviderDriver.initialize(logCore, remoteStoreConfig);
  2173.                             OpenSPCoop2Startup.logStartupInfo("Inizializzazione RemoteStoreProvider ["+remoteStoreConfig.getStoreLabel()+"] effettuata.");
  2174.                         }
  2175.                     }
  2176.                 }
  2177.                
  2178.                 // Inizializzazione SignalHub
  2179.                 if(ProtocolFactoryManager.getInstance().existsProtocolFactory(org.openspcoop2.protocol.engine.constants.Costanti.MODIPA_PROTOCOL_NAME)) {
  2180.                     CostantiDB.setServiziDigestEnabled(ModIUtils.isSignalHubEnabled());
  2181.                 }
  2182.                
  2183.                 OpenSPCoop2Startup.logStartupInfo("ProtocolFactory default: "+protocolFactoryManager.getDefaultProtocolFactory().getProtocol());
  2184.             } catch(Exception e) {
  2185.                 this.logError("Initialize ProtocolFactoryManager failed: "+e.getMessage());
  2186.                 logCore.error("Initialize ProtocolFactoryManager failed: "+e.getMessage(),e);
  2187.                 msgDiag.logStartupError("Riscontrato errore durante l'inizializzazione del ProtocolFactoryManager","initProtocolFactoryManager");
  2188.                 return;
  2189.             }
  2190.            
  2191.            
  2192.            
  2193.            
  2194.            
  2195.            
  2196.             /* ------------- Verifica Proprieta' di OpenSPCoop che richiedono l'inizializzazione del ProtocolFactoryManager --------------- */
  2197.             if(o!=null){
  2198.                 if(propertiesReader.validaConfigurazioneDopoInizializzazioneProtocolManager((java.lang.ClassLoader)o[0]) == false){
  2199.                     return;
  2200.                 }
  2201.             }else{
  2202.                 if(propertiesReader.validaConfigurazioneDopoInizializzazioneProtocolManager(null) == false){
  2203.                     return;
  2204.                 }
  2205.             }
  2206.            
  2207.            
  2208.            


  2209.             /* ------------- Inizializzo il sistema di Logging per gli appender personalizzati --------------- */
  2210.             boolean isInitializeAppender = false;
  2211.             isInitializeAppender = OpenSPCoop2Logger.initializeMsgDiagnosticiOpenSPCoopAppender(configurazionePdDManager.getOpenSPCoopAppenderMessaggiDiagnostici());
  2212.             if(!isInitializeAppender){
  2213.                 return;
  2214.             }
  2215.             isInitializeAppender = OpenSPCoop2Logger.initializeTracciamentoOpenSPCoopAppender(configurazionePdDManager.getOpenSPCoopAppenderTracciamento());
  2216.             if(!isInitializeAppender){
  2217.                 return;
  2218.             }
  2219.             isInitializeAppender = OpenSPCoop2Logger.initializeDumpOpenSPCoopAppender(configurazionePdDManager.getOpenSPCoopAppenderDump());
  2220.             if(!isInitializeAppender){
  2221.                 return;
  2222.             }





  2223.            






  2224.             /* -------------- Inizializzo QueueManager --------------- */
  2225.             if(OpenSPCoop2Startup.this.serverJ2EE){
  2226.                 if( CostantiConfigurazione.COMUNICAZIONE_INFRASTRUTTURALE_JMS.equals(propertiesReader.getNodeReceiver())
  2227.                         || CostantiConfigurazione.COMUNICAZIONE_INFRASTRUTTURALE_JMS.equals(propertiesReader.getNodeSender()) ){

  2228.                     // Connection Factory
  2229.                     try{
  2230.                         QueueManager.initialize(propertiesReader.getJNDIName_ConnectionFactory(),
  2231.                                 propertiesReader.getJNDIContext_ConnectionFactory());
  2232.                     }catch(Exception e){
  2233.                         msgDiag.logStartupError(e, "QueueManager.initConnectionFactory");
  2234.                         return;
  2235.                     }
  2236.                     OpenSPCoop2Startup.logStartupInfo("Inizializzazione connectionFactoryJMS ["+propertiesReader.getJNDIName_ConnectionFactory()+"] effettuata.");

  2237.                     // Code di Ricezione
  2238.                     if( CostantiConfigurazione.COMUNICAZIONE_INFRASTRUTTURALE_JMS.equals(propertiesReader.getNodeReceiver())
  2239.                     ){
  2240.                         try{
  2241.                             QueueManager.initializeQueueNodeReceiver(propertiesReader.getJNDIContext_CodeInterne());
  2242.                         }catch(Exception e){
  2243.                             msgDiag.logStartupError(e, "QueueManager.initQueueNodeReceiver");
  2244.                             return;
  2245.                         }
  2246.                         OpenSPCoop2Startup.logStartupInfo("Inizializzazione code JMS per la ricezione di messaggi nell'infrastruttura di OpenSPCoop, effettuata.");
  2247.                     }

  2248.                     // Code di Spedizione
  2249.                     //if( CostantiConfigurazione.COMUNICAZIONE_INFRASTRUTTURALE_JMS.equals(propertiesReader.getNodeSender())
  2250.                     //){
  2251.                     try{
  2252.                         QueueManager.initializeQueueNodeSender(propertiesReader.getJNDIContext_CodeInterne());
  2253.                     }catch(Exception e){
  2254.                         msgDiag.logStartupError(e, "QueueManager.initQueueNodeSender");
  2255.                         return;
  2256.                     }
  2257.                     OpenSPCoop2Startup.logStartupInfo("Inizializzazione code JMS per la spedizione di messaggi nell'infrastruttura di OpenSPCoop, effettuata.");
  2258.                 }
  2259.             }


  2260.            
  2261.            






  2262.             /* ----------- Inizializzazione Registro dei Servizi ---------------- */

  2263.             // Check configurazione registro dei Servizi
  2264.             if( configurazionePdDManager.getAccessoRegistroServizi() == null ){
  2265.                 msgDiag.logStartupError("Riscontrato errore durante la lettura dei valori associati al registro dei servizi di OpenSPCoop.", "Lettura configurazione PdD");
  2266.                 return;
  2267.             }

  2268.             // Controllo la consistenza dei registri di tipo DB
  2269.             AccessoRegistro accessoRegistro = configurazionePdDManager.getAccessoRegistroServizi();
  2270.             for(int i=0; i<accessoRegistro.sizeRegistroList(); i++){    
  2271.                 AccessoRegistroRegistro registro = accessoRegistro.getRegistro(i);
  2272.                 if(CostantiConfigurazione.REGISTRO_DB.equals(registro.getTipo().toString())){
  2273.                     // Il tipo del DB e' obbligatorio.
  2274.                     // Controllo che vi sia o
  2275.                     // - come prefisso del datasource: tipoDatabase@datasource
  2276.                     // - come tipo di database della porta di dominio.
  2277.                     if(registro.getLocation().indexOf("@")!=-1){
  2278.                         // estrazione tipo database
  2279.                         try{
  2280.                             String tipoDatabase = DBUtils.estraiTipoDatabaseFromLocation(registro.getLocation());
  2281.                             String location = registro.getLocation().substring(registro.getLocation().indexOf("@")+1);
  2282.                             accessoRegistro.getRegistro(i).setLocation(location);
  2283.                             accessoRegistro.getRegistro(i).setTipoDatabase(tipoDatabase);
  2284.                         }catch(Exception e){
  2285.                             msgDiag.logStartupError(e, "Inizializzazione registro dei servizi di OpenSPCoop ["+registro.getNome()+"]; analisi del tipo di database (tipoDatabase@datasource)");
  2286.                             return;
  2287.                         }
  2288.                     }else{
  2289.                         if(propertiesReader.getDatabaseType()==null){
  2290.                             msgDiag.logStartupError("Il Registro dei Servizi di tipo ["+CostantiConfigurazione.REGISTRO_DB+"] richiede la definizione del tipo di database indicato o come prefisso della location (tipoDB@datasource) o attraverso la proprieta' 'org.openspcoop.pdd.repository.tipoDatabase' della porta di dominio",
  2291.                                     "Inizializzazione registro dei servizi di OpenSPCoop ["+registro.getNome()+"]; analisi del tipo di database");
  2292.                             return;
  2293.                         }else{
  2294.                             accessoRegistro.getRegistro(i).setTipoDatabase(propertiesReader.getDatabaseType());
  2295.                         }
  2296.                     }
  2297.                 }
  2298.             }

  2299.             // inizializzo registri
  2300.             DriverBYOK driverBYOK = null;
  2301.             try{
  2302.                 driverBYOK = DriverBYOKUtilities.newInstanceDriverBYOKRuntimeNode(logCore, false, true);
  2303.             }catch(Exception e){
  2304.                 msgDiag.logStartupError(e,"Inizializzazione driver BYOK fallita");
  2305.                 return;
  2306.             }
  2307.             boolean isInitializeRegistro =
  2308.                 RegistroServiziReader.initialize(accessoRegistro,
  2309.                         logCore,OpenSPCoop2Startup.log,propertiesReader.isControlloRisorseRegistriRaggiungibilitaTotale(),
  2310.                         propertiesReader.isReadObjectStatoBozza(),propertiesReader.getJNDIName_DataSource(),
  2311.                         propertiesReader.isDSOp2UtilsEnabled(), propertiesReader.isRisorseJMXAbilitate(),
  2312.                         propertiesReader.isConfigurazioneCache_RegistryPrefill(), propertiesReader.getCryptConfigAutenticazioneSoggetti(),
  2313.                         propertiesReader.getCacheTypeRegistry(), driverBYOK);
  2314.             if(!isInitializeRegistro){
  2315.                 msgDiag.logStartupError("Inizializzazione fallita","Accesso registro/i dei servizi");
  2316.                 return;
  2317.             }
  2318.             if(propertiesReader.isConfigurazioneCache_RegistryPrefill() && propertiesReader.isConfigurazioneCache_ConfigPrefill()){
  2319.                 try{
  2320.                     ConfigurazionePdDReader.prefillCacheConInformazioniRegistro(OpenSPCoop2Startup.log);
  2321.                 }catch(Exception e){
  2322.                     msgDiag.logStartupError(e,"Prefill ConfigurazionePdD e Registro Reader fallita");
  2323.                     return;
  2324.                 }
  2325.             }

  2326.             // Inizializza il reader del registro dei Servizi utilizzato nella configurazione
  2327.             /**try{
  2328.                 configurazionePdDReader.initializeRegistroServiziReader();
  2329.             }catch(Exception e){
  2330.                 msgDiag.logStartupError(e,"Inizializzazione Reader per il registro dei servizi utilizzato nella configurazione");
  2331.                 return;
  2332.             }*/


  2333.            
  2334.            
  2335.            
  2336.            
  2337.            
  2338.            
  2339.            
  2340.             /* ------------ PreLoading ------------- */
  2341.            
  2342.             if(propertiesReader.getConfigPreLoadingLocale()!=null) {
  2343.                 try{
  2344.                    
  2345.                     Object oConfig = ConfigurazionePdDReader.getDriverConfigurazionePdD();
  2346.                     Object oRegistry = RegistroServiziReader.getDriverRegistroServizi().values().iterator().next();
  2347.                     if( (oConfig instanceof DriverConfigurazioneDB) && (oRegistry instanceof DriverRegistroServiziDB) ) {
  2348.                         PreLoadingConfig preLoading = new PreLoadingConfig(logCore, logCore, propertiesReader.getDefaultProtocolName(),
  2349.                                 propertiesReader.getIdentitaPortaDefault(propertiesReader.getDefaultProtocolName(), null));
  2350.                        
  2351.                         TimerLock timerLock = new TimerLock(TipoLock.STARTUP);
  2352.                         InfoStatistics semaphore_statistics = null;
  2353.                         Semaphore semaphore = null;
  2354.                         Logger logTimer = OpenSPCoop2Logger.getLoggerOpenSPCoopTimers();
  2355.                         if(propertiesReader.isTimerLockByDatabase()) {
  2356.                             semaphore_statistics = new InfoStatistics();

  2357.                             SemaphoreConfiguration config = GestoreMessaggi.newSemaphoreConfiguration(propertiesReader.getStartupLockMaxLife(),
  2358.                                     propertiesReader.getStartupLockIdleTime());

  2359.                             TipiDatabase databaseType = TipiDatabase.toEnumConstant(propertiesReader.getDatabaseType());
  2360.                             try {
  2361.                                 semaphore = new Semaphore(semaphore_statistics, SemaphoreMapping.newInstance(timerLock.getIdLock()),
  2362.                                         config, databaseType, logTimer);
  2363.                             }catch(Exception e) {
  2364.                                 throw new TimerException(e.getMessage(),e);
  2365.                             }
  2366.                         }
  2367.                        
  2368.                         OpenSPCoopStateful openspcoopstate = new OpenSPCoopStateful();
  2369.                         try {
  2370.                             openspcoopstate.initResource(propertiesReader.getIdentitaPortaDefaultWithoutProtocol(),ID_MODULO, null);
  2371.                             Connection connectionDB = ((StateMessage)openspcoopstate.getStatoRichiesta()).getConnectionDB();
  2372.                        
  2373.                             String causa = "Preloading Configuration";
  2374.                             try {
  2375.                                 GestoreMessaggi.acquireLock(
  2376.                                         semaphore, connectionDB, timerLock,
  2377.                                         msgDiag, causa,
  2378.                                         propertiesReader.getStartupGetLockAttesaAttiva(),
  2379.                                         propertiesReader.getStartupGetLockCheckInterval());
  2380.                                
  2381.                                 preLoading.loadConfig(propertiesReader.getConfigPreLoadingLocale());
  2382.                                
  2383.                             }finally{
  2384.                                 try{
  2385.                                     GestoreMessaggi.releaseLock(
  2386.                                             semaphore, connectionDB, timerLock,
  2387.                                             msgDiag, causa);
  2388.                                 }catch(Exception e){
  2389.                                     // ignore
  2390.                                 }
  2391.                             }
  2392.                            
  2393.                         }finally{
  2394.                             if(openspcoopstate!=null)
  2395.                                 openspcoopstate.releaseResource();
  2396.                         }
  2397.                            
  2398.                     }
  2399.                                        
  2400.                 }catch(Exception e){
  2401.                     this.logError("Riscontrato errore durante il preloading della configurazione di OpenSPCoop: "+e.getMessage(),e);
  2402.                     return;
  2403.                 }
  2404.             }







  2405.             // *** Repository plugins ***
  2406.             try{
  2407.                 if(propertiesReader.isConfigurazionePluginsEnabled()) {
  2408.                     CorePluginLoader.initialize(loader, OpenSPCoop2Logger.getLoggerOpenSPCoopPlugins(propertiesReader.isConfigurazionePluginsDebug()),
  2409.                             PddPluginLoader.class,
  2410.                             configurazionePdDManager.getRegistroPluginsReader(),
  2411.                             propertiesReader.getConfigurazionePluginsSeconds());
  2412.                 }
  2413.                 else {
  2414.                     CorePluginLoader.initialize(loader, OpenSPCoop2Logger.getLoggerOpenSPCoopPlugins(propertiesReader.isConfigurazionePluginsDebug()),
  2415.                             PddPluginLoader.class);
  2416.                 }
  2417.             }catch(Exception e){
  2418.                 msgDiag.logStartupError(e,"Inizializzazione plugins");
  2419.                 return;
  2420.             }
  2421.            
  2422.            
  2423.            
  2424.            




  2425.             /* ---------------- Validazione semantica -----------------------*/

  2426.             // Configurazione
  2427.             boolean validazioneSemanticaConfigurazione = false;
  2428.             if(CostantiConfigurazione.CONFIGURAZIONE_XML.equalsIgnoreCase(accessoConfigurazione.getTipo())){
  2429.                 validazioneSemanticaConfigurazione = propertiesReader.isValidazioneSemanticaConfigurazioneStartupXML();
  2430.             }else{
  2431.                 validazioneSemanticaConfigurazione = propertiesReader.isValidazioneSemanticaConfigurazioneStartup();
  2432.             }
  2433.             if(validazioneSemanticaConfigurazione){
  2434.                 try{
  2435.                     ConfigurazionePdDManager.getInstance().validazioneSemantica(classNameReader.getConnettore(),
  2436.                             classNameReader.getMsgDiagnosticoOpenSPCoopAppender(),
  2437.                             classNameReader.getTracciamentoOpenSPCoopAppender(),
  2438.                             classNameReader.getDumpOpenSPCoopAppender(),
  2439.                             classNameReader.getAutenticazionePortaDelegata(), classNameReader.getAutenticazionePortaApplicativa(),
  2440.                             classNameReader.getAutorizzazionePortaDelegata(), classNameReader.getAutorizzazionePortaApplicativa(),
  2441.                             classNameReader.getAutorizzazioneContenutoPortaDelegata(),classNameReader.getAutorizzazioneContenutoPortaApplicativa(),
  2442.                             classNameReader.getIntegrazionePortaDelegata(),
  2443.                             classNameReader.getIntegrazionePortaApplicativa(),
  2444.                             propertiesReader.isValidazioneSemanticaConfigurazioneStartupXML(),
  2445.                             propertiesReader.isValidazioneSemanticaConfigurazioneStartup(),
  2446.                             true, OpenSPCoop2Startup.log);
  2447.                     if(propertiesReader.isValidazioneSemanticaConfigurazioneStartupXML()){
  2448.                         ConfigurazionePdDManager.getInstance().setValidazioneSemanticaModificaConfigurazionePdDXML(classNameReader.getConnettore(),
  2449.                                 classNameReader.getMsgDiagnosticoOpenSPCoopAppender(),
  2450.                                 classNameReader.getTracciamentoOpenSPCoopAppender(),
  2451.                                 classNameReader.getDumpOpenSPCoopAppender(),
  2452.                                 classNameReader.getAutenticazionePortaDelegata(), classNameReader.getAutenticazionePortaApplicativa(),
  2453.                                 classNameReader.getAutorizzazionePortaDelegata(), classNameReader.getAutorizzazionePortaApplicativa(),
  2454.                                 classNameReader.getAutorizzazioneContenutoPortaDelegata(),classNameReader.getAutorizzazioneContenutoPortaApplicativa(),
  2455.                                 classNameReader.getIntegrazionePortaDelegata(),
  2456.                                 classNameReader.getIntegrazionePortaApplicativa());
  2457.                     }
  2458.                 }catch(Exception e){
  2459.                     msgDiag.logStartupError(e,"Validazione semantica della configurazione");
  2460.                     return;
  2461.                 }
  2462.             }

  2463.             // Registro dei Servizi
  2464.             try{
  2465.                 RegistroServiziManager.getInstance().validazioneSemantica(true, propertiesReader.isValidazioneSemanticaRegistroServiziCheckURI(),
  2466.                         protocolFactoryManager.getOrganizationTypesAsArray(),
  2467.                         protocolFactoryManager.getServiceTypesAsArray(ServiceBinding.SOAP),
  2468.                         protocolFactoryManager.getServiceTypesAsArray(ServiceBinding.REST),
  2469.                         classNameReader.getConnettore(),
  2470.                         propertiesReader.isValidazioneSemanticaRegistroServiziStartupXML(),
  2471.                         propertiesReader.isValidazioneSemanticaRegistroServiziStartup(),OpenSPCoop2Startup.log);        
  2472.                 if(propertiesReader.isValidazioneSemanticaRegistroServiziStartupXML()){
  2473.                     RegistroServiziManager.getInstance().setValidazioneSemanticaModificaRegistroServiziXML(propertiesReader.isValidazioneSemanticaRegistroServiziCheckURI(),
  2474.                             protocolFactoryManager.getOrganizationTypesAsArray(),
  2475.                             protocolFactoryManager.getServiceTypesAsArray(ServiceBinding.SOAP),
  2476.                             protocolFactoryManager.getServiceTypesAsArray(ServiceBinding.REST),
  2477.                             classNameReader.getConnettore());
  2478.                 }
  2479.             }catch(Exception e){
  2480.                 msgDiag.logStartupError(e,"Validazione semantica del registro dei servizi");
  2481.                 return;
  2482.             }

  2483.             // Libreria di validazione xsd
  2484.             try {
  2485.                 XSDSchemaCollection.setSerializeXSDSchemiBuildSchemaSuccessDefault(propertiesReader.isValidazioneContenutiApplicativiXsdBuildSchemaSuccessSerializeXSDCollection());
  2486.                 XSDSchemaCollection.setSerializeXSDSchemiBuildSchemaErrorDefault(propertiesReader.isValidazioneContenutiApplicativiXsdBuildSchemaErrorSerializeXSDCollection());
  2487.                 XSDSchemaCollection.setSerializeXSDSchemiBuildSchemaDefaultDir(propertiesReader.getValidazioneContenutiApplicativiXsdBuildSchemaSerializeXSDCollectionDir());
  2488.                                
  2489.                 XSDSchemaCollection s = new XSDSchemaCollection();
  2490.                 OpenSPCoop2Startup.logStartupInfo("XSDSchemaCollection buildSchemaSuccess:"+s.isSerializeXSDSchemiBuildSchemaSuccess());
  2491.                 OpenSPCoop2Startup.logStartupInfo("XSDSchemaCollection buildSchemaError:"+s.isSerializeXSDSchemiBuildSchemaError());
  2492.                 OpenSPCoop2Startup.logStartupInfo("XSDSchemaCollection buildSchemaDir:"+s.getSerializeXSDSchemiBuildSchemaDir());
  2493.             }catch(Exception e){
  2494.                 msgDiag.logStartupError(e,"Configurazione libreria di validazione xsd");
  2495.                 return;
  2496.             }
  2497.            
  2498.             // Libreria di validazione wsdl
  2499.             try {
  2500.                 boolean normalizeNamespaceXSITypeDefault = propertiesReader.isValidazioneContenutiApplicativiRpcAddNamespaceXSITypeIfNotExists()
  2501.                         ||
  2502.                         propertiesReader.isValidazioneContenutiApplicativiDocumentAddNamespaceXSITypeIfNotExists()
  2503.                         ||
  2504.                         propertiesReader.isValidazioneContenutiApplicativiXsdAddNamespaceXSITypeIfNotExists();
  2505.                 AbstractBaseOpenSPCoop2Message.setNormalizeNamespaceXSITypeDefault(normalizeNamespaceXSITypeDefault);
  2506.                 OpenSPCoop2Message msg = OpenSPCoop2MessageFactory.getDefaultMessageFactory().createEmptyMessage(MessageType.SOAP_11, MessageRole.REQUEST);
  2507.                 if(msg instanceof AbstractBaseOpenSPCoop2Message) {
  2508.                     AbstractBaseOpenSPCoop2Message a = (AbstractBaseOpenSPCoop2Message) msg;
  2509.                     OpenSPCoop2Startup.logStartupInfo("WSDLValidator addNamespaceXSITypeIfNotExists:"+a.isNormalizeNamespaceXSIType());
  2510.                 }
  2511.             }catch(Exception e){
  2512.                 msgDiag.logStartupError(e,"Configurazione libreria di validazione wsdl");
  2513.                 return;
  2514.             }
  2515.            
  2516.             // Libreria di validazione openapi4j
  2517.             try {
  2518.                 org.openapi4j.schema.validator.v3.ValidationOptions.VALIDATE_BASE64_VALUES=propertiesReader.isValidazioneContenutiApplicativiOpenApiOpenapi4jValidateBase64Values();
  2519.                 org.openapi4j.parser.validation.v3.OpenApi3Validator.VALIDATE_URI_REFERENCE_AS_URL = propertiesReader.isValidazioneContenutiApplicativiOpenApiOpenapi4jValidateUriReferenceAsUrl();
  2520.                 org.openapi4j.schema.validator.v3.FormatValidator.setDateTimeAllowLowerCaseTZ(propertiesReader.isValidazioneContenutiApplicativiOpenApiDateTimeAllowLowerCaseTZ());
  2521.                 org.openapi4j.schema.validator.v3.FormatValidator.setDateTimeAllowSpaceSeparator(propertiesReader.isValidazioneContenutiApplicativiOpenApiDateTimeAllowSpaceSeparator());
  2522.             }catch(Exception e){
  2523.                 msgDiag.logStartupError(e,"Configurazione libreria di validazione openapi4j");
  2524.                 return;
  2525.             }
  2526.            
  2527.             // Libreria di validazione generica delle dae
  2528.             try {
  2529.                 DateUtils.setDateTimeAllowLowerCaseTZ(propertiesReader.isValidazioneContenutiApplicativiOpenApiDateTimeAllowLowerCaseTZ());
  2530.                 DateUtils.setDateTimeAllowSpaceSeparator(propertiesReader.isValidazioneContenutiApplicativiOpenApiDateTimeAllowSpaceSeparator());
  2531.             }catch(Exception e){
  2532.                 msgDiag.logStartupError(e,"Configurazione libreria di validazione DateUtils");
  2533.                 return;
  2534.             }



  2535.        
  2536.        
  2537.        
  2538.        
  2539.             /* ----------- Inizializzo GestoreMessaggi Cache ------------ */
  2540.             try{
  2541.                 GestoreMessaggi.initialize();
  2542.             }catch(Exception e){
  2543.                 msgDiag.logStartupError(e,"Cache GestoreMessaggi");
  2544.                 return;
  2545.             }
  2546.        
  2547.        
  2548.        
  2549.        
  2550.            
  2551.             /* ----------- Inizializzazione MessageSecurity ------------ */
  2552.             try{
  2553.                 String wssPropertiesFileExternalPWCallback = propertiesReader.getExternalPWCallbackPropertyFile();
  2554.                 if(wssPropertiesFileExternalPWCallback!=null){
  2555.                     ExternalPWCallback.initialize(wssPropertiesFileExternalPWCallback);
  2556.                 }
  2557.                
  2558.                 // DEVE essere effettuata all'inizio, vedi sopra.
  2559.                 //org.apache.wss4j.dom.engine.WSSConfig.init();
  2560.                
  2561.             }catch(Exception e){
  2562.                 msgDiag.logStartupError(e,"Inizializzazione MessageSecurity");
  2563.                 return;
  2564.             }

  2565.            
  2566.            
  2567.            
  2568.            
  2569.            
  2570.        
  2571.        
  2572.        
  2573.        
  2574.             /* ----------- Inizializzazione Servizi ------------ */
  2575.             try{
  2576.                 StatoServiziPdD.initialize();
  2577.             }catch(Exception e){
  2578.                 msgDiag.logStartupError(e,"Inizializzazione stato servizi");
  2579.                 return;
  2580.             }
  2581.             try{
  2582.                 RicezioneContenutiApplicativi.initializeService(configurazionePdDManager, classNameReader, propertiesReader, logCore);
  2583.             }catch(Exception e){
  2584.                 msgDiag.logStartupError(e,"Inizializzazione servizio RicezioneContenutiApplicativi");
  2585.                 return;
  2586.             }
  2587.             try{
  2588.                 RicezioneBuste.initializeService(configurazionePdDManager,classNameReader, propertiesReader, logCore);
  2589.             }catch(Exception e){
  2590.                 msgDiag.logStartupError(e,"Inizializzazione servizio RicezioneBuste");
  2591.                 return;
  2592.             }
  2593.             try{
  2594.                 InoltroBuste.initializeService(classNameReader, propertiesReader);
  2595.             }catch(Exception e){
  2596.                 msgDiag.logStartupError(e,"Inizializzazione servizio InoltroBuste");
  2597.                 return;
  2598.             }
  2599.             try{
  2600.                 ConsegnaContenutiApplicativi.initializeService(classNameReader, propertiesReader);
  2601.             }catch(Exception e){
  2602.                 msgDiag.logStartupError(e,"Inizializzazione servizio ConsegnaContenutiApplicativi");
  2603.                 return;
  2604.             }
  2605.             try{
  2606.                 IDAccordoFactory.getInstance();
  2607.                 IDAccordoCooperazioneFactory.getInstance();
  2608.             }catch(Exception e){
  2609.                 msgDiag.logStartupError(e,"Inizializzazione factory ID");
  2610.                 return;
  2611.             }
  2612.            
  2613.            
  2614.            
  2615.            
  2616.             /* ----------- Inizializzazione Mailcap Activation per Gestione Attachments ------------ */
  2617.             try{
  2618.                 MailcapActivationReader.initDataContentHandler(OpenSPCoop2Startup.log,propertiesReader.isTunnelSOAP_loadMailcap());
  2619.             }catch(Exception e){
  2620.                 msgDiag.logStartupError(e,"Inizializzazione DataContentHandler (MET-INF/mailcap)");
  2621.                 return;
  2622.             }
  2623.        
  2624.        
  2625.            
  2626.            
  2627.            
  2628.            
  2629.            
  2630.            
  2631.            
  2632.             /* ----------- Directory ------------ */
  2633.             FileSystemMkdirConfig configMkdir = null;
  2634.             try{
  2635.                
  2636.                 configMkdir = new FileSystemMkdirConfig();
  2637.                 configMkdir.setCheckCanWrite(true);
  2638.                 configMkdir.setCheckCanRead(true);
  2639.                 configMkdir.setCheckCanExecute(false);
  2640.                 configMkdir.setCrateParentIfNotExists(true);
  2641.                
  2642.                 // logDir (sarebbe meglio se fosse creata dall'utente)
  2643.                 List<File> listFiles = OpenSPCoop2Logger.getLogDirs();
  2644.                 if(listFiles!=null && !listFiles.isEmpty()) {
  2645.                     for (File file : listFiles) {
  2646.                         if(!file.exists()){
  2647.                             // Il Log può non funzionare
  2648.                             String msg = "WARNING: Log dir ["+file.getAbsolutePath()+"] non trovata. La directory verrà creata ma è possibile che serva un ulteriore riavvio dell'Application Server";
  2649.                             log.warn(msg);
  2650.                             System.out.println(msg);
  2651.                         }
  2652.                         FileSystemUtilities.mkdir(file, configMkdir);
  2653.                     }
  2654.                 }

  2655.                 // messageRepository
  2656.                 if(propertiesReader.isRepositoryOnFS()) {
  2657.                     File dir = new File(propertiesReader.getRepositoryDirectory());
  2658.                     FileSystemUtilities.mkdir(dir, configMkdir);
  2659.                 }
  2660.                
  2661.                 // https
  2662.                 if(propertiesReader.isConnettoreHttp_urlHttps_overrideDefaultConfiguration_consegnaContenutiApplicativi()) {
  2663.                     File dir = propertiesReader.getConnettoreHttp_urlHttps_repository_consegnaContenutiApplicativi();
  2664.                     configMkdir.setCheckCanWrite(false);
  2665.                     FileSystemUtilities.mkdir(dir, configMkdir);
  2666.                     configMkdir.setCheckCanWrite(true);
  2667.                 }
  2668.                 if(propertiesReader.isConnettoreHttp_urlHttps_overrideDefaultConfiguration_inoltroBuste()) {
  2669.                     File dir = propertiesReader.getConnettoreHttp_urlHttps_repository_inoltroBuste();
  2670.                     configMkdir.setCheckCanWrite(false);
  2671.                     FileSystemUtilities.mkdir(dir, configMkdir);
  2672.                     configMkdir.setCheckCanWrite(true);
  2673.                 }
  2674.                
  2675.                 // recovery
  2676.                 File dirRecovery = propertiesReader.getFileSystemRecoveryRepository();
  2677.                 FileSystemUtilities.mkdir(dirRecovery, configMkdir);
  2678.                 FileSystemSerializer fs = FileSystemSerializer.getInstance();
  2679.                 FileSystemUtilities.mkdir(fs.getDirTransazioni().getAbsolutePath(), configMkdir);
  2680.                 FileSystemUtilities.mkdir(fs.getDirTransazioneApplicativoServer().getAbsolutePath(), configMkdir);
  2681.                 FileSystemUtilities.mkdir(fs.getDirTransazioneApplicativoServerConsegnaTerminata().getAbsolutePath(), configMkdir);
  2682.                 FileSystemUtilities.mkdir(fs.getDirDiagnostici().getAbsolutePath(), configMkdir);
  2683.                 FileSystemUtilities.mkdir(fs.getDirTracce().getAbsolutePath(), configMkdir);
  2684.                 FileSystemUtilities.mkdir(fs.getDirDump().getAbsolutePath(), configMkdir);
  2685.                 FileSystemUtilities.mkdir(fs.getDirEventi().getAbsolutePath(), configMkdir);
  2686.                
  2687.                 // dumpBinario
  2688.                 File dirBinario = propertiesReader.getDumpBinarioRepository();
  2689.                 FileSystemUtilities.mkdir(dirBinario, configMkdir);
  2690.                                
  2691.                 // dumpNotRealTime
  2692.                 if(propertiesReader.isDumpNonRealtimeFileSystemMode()) {
  2693.                     File dir = propertiesReader.getDumpNonRealtimeRepository();
  2694.                     FileSystemUtilities.mkdir(dir, configMkdir);
  2695.                 }
  2696.                
  2697.                 // attachments
  2698.                 AttachmentsProcessingMode attachProcessingMode = propertiesReader.getAttachmentsProcessingMode();
  2699.                 if(attachProcessingMode!=null && attachProcessingMode.getFileRepository()!=null){
  2700.                     File dir = attachProcessingMode.getFileRepository();
  2701.                     FileSystemUtilities.mkdir(dir, configMkdir);
  2702.                 }
  2703.                
  2704.                 // controlloTraffico
  2705.                 if(propertiesReader.isControlloTrafficoEnabled()){
  2706.                     File dirCT = propertiesReader.getControlloTrafficoGestorePolicyFileSystemRecoveryRepository();
  2707.                     if(dirCT!=null){
  2708.                         FileSystemUtilities.mkdir(dirCT, configMkdir);
  2709.                     }
  2710.                 }
  2711.                
  2712.             }catch(Exception e){
  2713.                 msgDiag.logStartupError(e,"Inizializzazione Directory");
  2714.                 return;
  2715.             }
  2716.            
  2717.            
  2718.            
  2719.            
  2720.            
  2721.            
  2722.            
  2723.            
  2724.             /* ----------- Gestori utilizzati dal Controllo Traffico ------------ */
  2725.             if(propertiesReader.isControlloTrafficoEnabled()){
  2726.                        
  2727.                 try{
  2728.                     propertiesReader.initConfigurazioneControlloTraffico(loader, ProtocolFactoryManager.getInstance().getProtocolNamesAsList());
  2729.                 }catch(Exception e){
  2730.                     msgDiag.logStartupError(e,"Inizializzazione Configurazione ControlloTraffico");
  2731.                     return;
  2732.                 }
  2733.                
  2734.                 Logger logControlloTraffico = OpenSPCoop2Logger.getLoggerOpenSPCoopControlloTraffico(propertiesReader.isControlloTrafficoDebug());
  2735.                
  2736.                 // Cache ControlloTraffico DatiStatistici
  2737.                 try{
  2738.                     ConfigurazioneGenerale configurazioneControlloTraffico = configurazionePdDManager.getConfigurazioneControlloTraffico(null);
  2739.                     if(configurazioneControlloTraffico.getCache()!=null && configurazioneControlloTraffico.getCache().isCache()){
  2740.                         GestoreCacheControlloTraffico.initializeCache(propertiesReader.getCacheTypeTrafficControl(),configurazioneControlloTraffico.getCache().getSize(),
  2741.                                 CacheAlgorithm.LRU.equals(configurazioneControlloTraffico.getCache().getAlgorithm()),
  2742.                                 configurazioneControlloTraffico.getCache().getIdleTime(),
  2743.                                 configurazioneControlloTraffico.getCache().getLifeTime(),
  2744.                                 logCore);
  2745.                         logControlloTraffico.info("Cache ControlloTraffico inizializzata");
  2746.                     }
  2747.                 }catch(Exception e){
  2748.                     msgDiag.logStartupError(e,"Inizializzazione Cache ControlloTraffico");
  2749.                     return;
  2750.                 }
  2751.                    
  2752.                 // Gestore dei Dati Statistici
  2753.                 org.openspcoop2.pdd.core.controllo_traffico.ConfigurazioneGatewayControlloTraffico confControlloTraffico = null;
  2754.                 try{
  2755.                     confControlloTraffico = propertiesReader.getConfigurazioneControlloTraffico();

  2756.                     DatiStatisticiDAOManager.initialize(confControlloTraffico);
  2757.                 }catch(Exception e){
  2758.                     msgDiag.logStartupError(e,"Inizializzazione Gestori Dati Statistici del ControlloTraffico");
  2759.                     return;
  2760.                 }
  2761.                
  2762.                 // Gestore Controllo Traffico
  2763.                 try{
  2764.                     GestoreControlloTraffico.initialize(confControlloTraffico.isErroreGenerico());
  2765.                     GestoreCacheControlloTraffico.initialize(confControlloTraffico);
  2766.                 }catch(Exception e){
  2767.                     msgDiag.logStartupError(e,"Inizializzazione Gestori del ControlloTraffico");
  2768.                     return;
  2769.                 }
  2770.                
  2771.                 // HazelcastManager
  2772.                 if(propertiesReader.isHazelcastEngineEnabled()) {
  2773.                     setSystemProperties(org.openspcoop2.pdd.core.controllo_traffico.policy.driver.hazelcast.Costanti.SECURITY_RECOMMENDATIONS,
  2774.                             propertiesReader.isHazelcastSecurityRecommendationsEnabled() ?
  2775.                                     org.openspcoop2.pdd.core.controllo_traffico.policy.driver.hazelcast.Costanti.SECURITY_RECOMMENDATIONS_ENABLED :
  2776.                                     org.openspcoop2.pdd.core.controllo_traffico.policy.driver.hazelcast.Costanti.SECURITY_RECOMMENDATIONS_DISABLED);
  2777.                    
  2778.                     boolean diag = propertiesReader.isHazelcastDiagnosticsEnabled();
  2779.                     setSystemProperties(org.openspcoop2.pdd.core.controllo_traffico.policy.driver.hazelcast.Costanti.DIAGNOSTICS,
  2780.                             diag ?
  2781.                                     org.openspcoop2.pdd.core.controllo_traffico.policy.driver.hazelcast.Costanti.DIAGNOSTICS_ENABLED :
  2782.                                     org.openspcoop2.pdd.core.controllo_traffico.policy.driver.hazelcast.Costanti.DIAGNOSTICS_DISABLED);
  2783.                     if(diag) {
  2784.                         try{
  2785.                             File hazelcastDiagnosticDir = propertiesReader.getHazelcastDiagnosticsDirectory();
  2786.                             FileSystemUtilities.mkdir(hazelcastDiagnosticDir, configMkdir);
  2787.                             setSystemProperties(org.openspcoop2.pdd.core.controllo_traffico.policy.driver.hazelcast.Costanti.DIAGNOSTICS_DIRECTORY, hazelcastDiagnosticDir.getAbsolutePath());
  2788.                             setSystemProperties(org.openspcoop2.pdd.core.controllo_traffico.policy.driver.hazelcast.Costanti.DIAGNOSTICS_DIRECTORY_MAX_ROLLED_FILE_COUNT, propertiesReader.getHazelcastDiagnosticsMaxRolledFileCount()+"");
  2789.                             setSystemProperties(org.openspcoop2.pdd.core.controllo_traffico.policy.driver.hazelcast.Costanti.DIAGNOSTICS_DIRECTORY_MAX_FILE_SIZE_MB, propertiesReader.getHazelcastDiagnosticsMaxFileSizeMb()+"");
  2790.                         }catch(Exception e){
  2791.                             msgDiag.logStartupError(e,"Inizializzazione Hazelcast diagnostic configuration");
  2792.                             return;
  2793.                         }
  2794.                     }
  2795.                    
  2796.                     try{
  2797.                         Map<PolicyGroupByActiveThreadsType,String> config = new HashMap<>();
  2798.                         config.put(PolicyGroupByActiveThreadsType.HAZELCAST_MAP, propertiesReader.getControlloTrafficoGestorePolicyInMemoryHazelCastMapConfigPath());
  2799.                         config.put(PolicyGroupByActiveThreadsType.HAZELCAST_NEAR_CACHE, propertiesReader.getControlloTrafficoGestorePolicyInMemoryHazelCastNearCacheConfigPath());
  2800.                         config.put(PolicyGroupByActiveThreadsType.HAZELCAST_LOCAL_CACHE, propertiesReader.getControlloTrafficoGestorePolicyInMemoryHazelCastLocalCacheConfigPath());
  2801.                         config.put(PolicyGroupByActiveThreadsType.HAZELCAST_NEAR_CACHE_UNSAFE_SYNC_MAP, propertiesReader.getControlloTrafficoGestorePolicyInMemoryHazelCastNearCacheUnsafeSyncMapConfigPath());
  2802.                         config.put(PolicyGroupByActiveThreadsType.HAZELCAST_NEAR_CACHE_UNSAFE_ASYNC_MAP, propertiesReader.getControlloTrafficoGestorePolicyInMemoryHazelCastNearCacheUnsafeAsyncMapConfigPath());
  2803.                         config.put(PolicyGroupByActiveThreadsType.HAZELCAST_REPLICATED_MAP, propertiesReader.getControlloTrafficoGestorePolicyInMemoryHazelCastReplicatedMapConfigPath());
  2804.                         config.put(PolicyGroupByActiveThreadsType.HAZELCAST_ATOMIC_LONG, propertiesReader.getControlloTrafficoGestorePolicyInMemoryHazelCastAtomicLongConfigPath());
  2805.                         config.put(PolicyGroupByActiveThreadsType.HAZELCAST_ATOMIC_LONG_ASYNC, propertiesReader.getControlloTrafficoGestorePolicyInMemoryHazelCastAtomicLongAsyncConfigPath());
  2806.                         config.put(PolicyGroupByActiveThreadsType.HAZELCAST_PNCOUNTER, propertiesReader.getControlloTrafficoGestorePolicyInMemoryHazelCastPNCounterConfigPath());
  2807.                         HazelcastManager.initialize(log, logControlloTraffico, config,
  2808.                                 propertiesReader.getControlloTrafficoGestorePolicyInMemoryHazelCastGroupId(),
  2809.                                 propertiesReader.getControlloTrafficoGestorePolicyInMemoryHazelCastSharedConfig());
  2810.                     }catch(Exception e){
  2811.                         msgDiag.logStartupError(e,"Inizializzazione HazelcastManager");
  2812.                         return;
  2813.                     }
  2814.                 }
  2815.                
  2816.                 // RedisManager
  2817.                 if(propertiesReader.isRedisEngineEnabled()) {
  2818.                     try{
  2819.                         RedissonManager.initialize(log, logControlloTraffico, propertiesReader.getControlloTrafficoGestorePolicyInMemoryRedisConnectionUrl());
  2820.                     }catch(Exception e){
  2821.                         msgDiag.logStartupError(e,"Inizializzazione RedisManager");
  2822.                         return;
  2823.                     }
  2824.                 }
  2825.                
  2826.                 // Gestore RateLimiting
  2827.                 List<PolicyGroupByActiveThreadsType> listGestorePolicyRT = null;
  2828.                 try{
  2829.                     List<PolicyGroupByActiveThreadsType> listConfig = configurazionePdDManager.getTipiGestoreRateLimiting();
  2830.                     List<PolicyGroupByActiveThreadsType> listStartup = null;
  2831.                     if(listConfig!=null && !listConfig.isEmpty()) {
  2832.                         listStartup = new ArrayList<PolicyGroupByActiveThreadsType>();
  2833.                         for (PolicyGroupByActiveThreadsType type : listConfig) {
  2834.                             if(propertiesReader.isControlloTrafficoGestorePolicyInMemoryTypeLazyInitialization(type)) {
  2835.                                 log.debug("Gestore Policy di RateLimiting '"+type+"' trovato nella configurazione non inizializzato (lazy); verrà attivato alla prima richiesta.");
  2836.                             }
  2837.                             else {
  2838.                                 listStartup.add(type);
  2839.                             }
  2840.                         }
  2841.                     }
  2842.                     GestorePolicyAttive.initialize(log, logControlloTraffico, propertiesReader.getControlloTrafficoGestorePolicyTipo(),
  2843.                             propertiesReader.getControlloTrafficoGestorePolicyWSUrl(),
  2844.                             listStartup);
  2845.                     listGestorePolicyRT = GestorePolicyAttive.getTipiGestoriAttivi();
  2846.                 }catch(Exception e){
  2847.                     msgDiag.logStartupError(e,"Inizializzazione Gestori Policy di Rate Limiting");
  2848.                     return;
  2849.                 }
  2850.                 if(listGestorePolicyRT!=null && !listGestorePolicyRT.isEmpty()) {
  2851.                     for (PolicyGroupByActiveThreadsType type : listGestorePolicyRT) {
  2852.                        
  2853.                         if(type.isRedis() && !RedissonManager.isRedissonClientInitialized()) {
  2854.                             // se arrivo qua, significa che nella proprietà di openspcoop ho accettato questa condizione.
  2855.                             // chiamarente se Redis server non e' disponibile, non posso neanche inizializzarlo
  2856.                             continue;
  2857.                         }
  2858.                        
  2859.                         File fDati = null;
  2860.                         try{
  2861.                             File fRepository = propertiesReader.getControlloTrafficoGestorePolicyFileSystemRecoveryRepository();
  2862.                             if(fRepository!=null){
  2863.                                 if(!fRepository.exists()){
  2864.                                     throw new CoreException("Directory ["+fRepository.getAbsolutePath()+"] not exists");
  2865.                                 }
  2866.                                 if(!fRepository.isDirectory()){
  2867.                                     throw new CoreException("File ["+fRepository.getAbsolutePath()+"] is not directory");
  2868.                                 }
  2869.                                 if(!fRepository.canRead()){
  2870.                                     throw new CoreException("File ["+fRepository.getAbsolutePath()+"] cannot read");
  2871.                                 }
  2872.                                 if(!fRepository.canWrite()){
  2873.                                     throw new CoreException("File ["+fRepository.getAbsolutePath()+"] cannot write");
  2874.                                 }
  2875.                                 fDati = new File(fRepository, GestorePolicyAttive.getControlloTrafficoImage(type));
  2876.                                 if(fDati.exists() && fDati.canRead() && fDati.length()>0){
  2877.                                     FileInputStream fin = new FileInputStream(fDati);
  2878.                                     GestorePolicyAttive.getInstance(type).initialize(fin,confControlloTraffico);
  2879.                                     if(!fDati.delete()) {
  2880.                                         // ignore
  2881.                                     }
  2882.                                 }
  2883.                             }
  2884.                         }catch(Throwable e){
  2885.                             String img = null;
  2886.                             if(fDati!=null){
  2887.                                 img = fDati.getAbsolutePath();
  2888.                             }
  2889.                             logControlloTraffico.error("Inizializzazione dell'immagine ["+img+"] per il Gestore delle Policy di RateLimiting (tipo:"+type+") non riuscita: "+e.getMessage(),e);
  2890.                             logCore.error("Inizializzazione dell'immagine ["+img+"] per il Gestore delle Policy di RateLimiting (tipo:"+type+" non riuscita: "+e.getMessage(),e);
  2891.                             msgDiag.logStartupError(e,"Inizializzazione Immagine delle Policy di RateLimiting (tipo:"+type+")");
  2892.                             return;
  2893.                         }
  2894.                     }
  2895.                    
  2896.                     // ripulisco vecchi contatori rimasti in memoria
  2897.                     for (PolicyGroupByActiveThreadsType type : listGestorePolicyRT) {
  2898.                         try{
  2899.                             GestorePolicyAttive.getInstance(type).cleanOldActiveThreadsPolicy();
  2900.                         }catch(Throwable e){
  2901.                             logControlloTraffico.error("Pulizia dei dati presenti nella memoria del gestore delle Policy di RateLimiting (tipo:"+type+") non riuscita: "+e.getMessage(),e);
  2902.                             logCore.error("Pulizia dei dati presenti nella memoria del gestore delle Policy di RateLimiting (tipo:"+type+") non riuscita: "+e.getMessage(),e);
  2903.                             msgDiag.logStartupError(e,"Pulizia dei dati presenti nella memoria del gestore delle Policy di RateLimiting (tipo:"+type+")");
  2904.                         }
  2905.                     }
  2906.                    
  2907.                 }
  2908.                
  2909.                 boolean force = true;
  2910.                 OpenSPCoop2Logger.getLoggerOpenSPCoopControlloTraffico(force).info("Motore di gestione del Controllo del Traffico avviato correttamente");
  2911.             }
  2912.            
  2913.            
  2914.            
  2915.            
  2916.            
  2917.            
  2918.            

  2919.        
  2920.             /* ----------- Inizializzazione Risorse JMX ------------ */
  2921.             if( OpenSPCoop2Startup.this.gestoreRisorseJMX!=null ){
  2922.                 // MBean ConfigurazionePdD
  2923.                 try{
  2924.                     OpenSPCoop2Startup.this.gestoreRisorseJMX.registerMBeanConfigurazionePdD();
  2925.                 }catch(Exception e){
  2926.                     msgDiag.logStartupError(e,"RisorsaJMX - configurazione");
  2927.                 }
  2928.                 // MBean Registro dei Servizi
  2929.                 try{
  2930.                     OpenSPCoop2Startup.this.gestoreRisorseJMX.registerMBeanAccessoRegistroServizi();
  2931.                 }catch(Exception e){
  2932.                     msgDiag.logStartupError(e,"RisorsaJMX - accesso al Registro dei Servizi");
  2933.                 }
  2934.                 // MBean Monitoraggio Risorse
  2935.                 try{
  2936.                     OpenSPCoop2Startup.this.gestoreRisorseJMX.registerMBeanMonitoraggioRisorse();
  2937.                 }catch(Exception e){
  2938.                     msgDiag.logStartupError(e,"RisorsaJMX - monitoraggio delle Risorse");
  2939.                 }
  2940.                 // MBean Autorizzazione
  2941.                 try{
  2942.                     OpenSPCoop2Startup.this.gestoreRisorseJMX.registerMBeanAutorizzazione();
  2943.                 }catch(Exception e){
  2944.                     msgDiag.logStartupError(e,"RisorsaJMX - dati di autorizzazione");
  2945.                 }
  2946.                 // MBean Autenticazione
  2947.                 try{
  2948.                     OpenSPCoop2Startup.this.gestoreRisorseJMX.registerMBeanAutenticazione();
  2949.                 }catch(Exception e){
  2950.                     msgDiag.logStartupError(e,"RisorsaJMX - dati di autenticazione");
  2951.                 }
  2952.                 // MBean GestioneToken
  2953.                 try{
  2954.                     OpenSPCoop2Startup.this.gestoreRisorseJMX.registerMBeanGestioneToken();
  2955.                 }catch(Exception e){
  2956.                     msgDiag.logStartupError(e,"RisorsaJMX - dati di gestione dei token");
  2957.                 }
  2958.                 // MBean AttributeAuthority
  2959.                 try{
  2960.                     OpenSPCoop2Startup.this.gestoreRisorseJMX.registerMBeanAttributeAuthority();
  2961.                 }catch(Exception e){
  2962.                     msgDiag.logStartupError(e,"RisorsaJMX - dati raccolti tramite attribute authority");
  2963.                 }
  2964.                 // MBean GestioneResponseCaching
  2965.                 try{
  2966.                     OpenSPCoop2Startup.this.gestoreRisorseJMX.registerMBeanResponseCaching();
  2967.                 }catch(Exception e){
  2968.                     msgDiag.logStartupError(e,"RisorsaJMX - risposte salvate in cache");
  2969.                 }
  2970.                 // MBean GestioneKeystoreCaching
  2971.                 try{
  2972.                     OpenSPCoop2Startup.this.gestoreRisorseJMX.registerMBeanKeystoreCaching();
  2973.                 }catch(Exception e){
  2974.                     msgDiag.logStartupError(e,"RisorsaJMX - keystore salvate in cache");
  2975.                 }
  2976.                 // MBean GestioneConsegnaApplicativi
  2977.                 try{
  2978.                     OpenSPCoop2Startup.this.gestoreRisorseJMX.registerMBeanConsegnaApplicativi();
  2979.                 }catch(Exception e){
  2980.                     msgDiag.logStartupError(e,"RisorsaJMX - gestione consegna applicativi");
  2981.                 }
  2982.                 // MBean RepositoryMessaggi
  2983.                 try{
  2984.                     OpenSPCoop2Startup.this.gestoreRisorseJMX.registerMBeanRepositoryMessaggi();
  2985.                 }catch(Exception e){
  2986.                     msgDiag.logStartupError(e,"RisorsaJMX - repository dei messaggi");
  2987.                 }
  2988.                 // MBean StatoServiziPdD
  2989.                 try{
  2990.                     OpenSPCoop2Startup.this.gestoreRisorseJMX.registerMBeanStatoServiziPdD();
  2991.                 }catch(Exception e){
  2992.                     msgDiag.logStartupError(e,"RisorsaJMX - stato servizi");
  2993.                 }
  2994.                 // MBean StatistichePdD
  2995.                 try{
  2996.                     if(propertiesReader.isStatisticheViaJmx()) {
  2997.                         OpenSPCoop2Startup.this.gestoreRisorseJMX.registerMBeanStatistichePdD();
  2998.                     }
  2999.                 }catch(Exception e){
  3000.                     msgDiag.logStartupError(e,"RisorsaJMX - statistiche");
  3001.                 }
  3002.                 // MBean SystemPropertiesPdD
  3003.                 try{
  3004.                     OpenSPCoop2Startup.this.gestoreRisorseJMX.registerMBeanSystemPropertiesPdD();
  3005.                 }catch(Exception e){
  3006.                     msgDiag.logStartupError(e,"RisorsaJMX - proprietà di sistema");
  3007.                 }
  3008.                 // MBean ConfigurazioneSistema
  3009.                 try{
  3010.                     OpenSPCoop2Startup.this.gestoreRisorseJMX.registerMBeanConfigurazioneSistema();
  3011.                 }catch(Exception e){
  3012.                     msgDiag.logStartupError(e,"RisorsaJMX - configurazione di sistema");
  3013.                 }
  3014.                 if(propertiesReader.isControlloTrafficoEnabled()){
  3015.                     // MBean ControlloTraffico
  3016.                     try{
  3017.                         OpenSPCoop2Startup.this.gestoreRisorseJMX.registerMBeanControlloTraffico();
  3018.                     }catch(Exception e){
  3019.                         msgDiag.logStartupError(e,"RisorsaJMX - Controllo del Traffico");
  3020.                     }
  3021.                 }
  3022.                 // MBean GestoreRichieste
  3023.                 try{
  3024.                     OpenSPCoop2Startup.this.gestoreRisorseJMX.registerMBeanGestioneRichieste();
  3025.                 }catch(Exception e){
  3026.                     msgDiag.logStartupError(e,"RisorsaJMX - gestione richieste");
  3027.                 }
  3028.             }


  3029.            
  3030.            
  3031.            
  3032.            
  3033.             /* ----------- Log Configurazione di Sistema ------------ */
  3034.            
  3035.             InformazioniStatoPorta informazioniStatoPorta = new InformazioniStatoPorta();
  3036.             List<InformazioniStatoPortaCache> informazioniStatoPortaCache = new ArrayList<>();
  3037.            
  3038.             AccessoRegistroServizi infoRegistroServizi = new AccessoRegistroServizi();
  3039.             InformazioniStatoPortaCache informazioniStatoPortaCacheRegistro = new InformazioniStatoPortaCache(CostantiPdD.JMX_REGISTRO_SERVIZI, infoRegistroServizi.isCacheAbilitata());
  3040.             if(infoRegistroServizi.isCacheAbilitata()){
  3041.                 informazioniStatoPortaCacheRegistro.setStatoCache(infoRegistroServizi.printStatCache());
  3042.             }
  3043.             informazioniStatoPortaCache.add(informazioniStatoPortaCacheRegistro);
  3044.            
  3045.             org.openspcoop2.pdd.core.jmx.ConfigurazionePdD infoConfigurazione = new org.openspcoop2.pdd.core.jmx.ConfigurazionePdD();
  3046.             InformazioniStatoPortaCache informazioniStatoPortaCacheConfig = new InformazioniStatoPortaCache(CostantiPdD.JMX_CONFIGURAZIONE_PDD, infoConfigurazione.isCacheAbilitata());
  3047.             if(infoConfigurazione.isCacheAbilitata()){
  3048.                 informazioniStatoPortaCacheConfig.setStatoCache(infoConfigurazione.printStatCache());
  3049.             }
  3050.             informazioniStatoPortaCache.add(informazioniStatoPortaCacheConfig);
  3051.            
  3052.             org.openspcoop2.pdd.core.jmx.EngineAutorizzazione infoAutorizzazioneDati = new org.openspcoop2.pdd.core.jmx.EngineAutorizzazione();
  3053.             InformazioniStatoPortaCache informazioniStatoPortaCacheAutorizzazioneDati = new InformazioniStatoPortaCache(CostantiPdD.JMX_AUTORIZZAZIONE, infoAutorizzazioneDati.isCacheAbilitata());
  3054.             if(infoAutorizzazioneDati.isCacheAbilitata()){
  3055.                 informazioniStatoPortaCacheAutorizzazioneDati.setStatoCache(infoAutorizzazioneDati.printStatCache());
  3056.             }
  3057.             informazioniStatoPortaCache.add(informazioniStatoPortaCacheAutorizzazioneDati);
  3058.            
  3059.             org.openspcoop2.pdd.core.jmx.EngineAutenticazione infoAutenticazioneDati = new org.openspcoop2.pdd.core.jmx.EngineAutenticazione();
  3060.             InformazioniStatoPortaCache informazioniStatoPortaCacheAutenticazioneDati = new InformazioniStatoPortaCache(CostantiPdD.JMX_AUTENTICAZIONE, infoAutenticazioneDati.isCacheAbilitata());
  3061.             if(infoAutenticazioneDati.isCacheAbilitata()){
  3062.                 informazioniStatoPortaCacheAutenticazioneDati.setStatoCache(infoAutenticazioneDati.printStatCache());
  3063.             }
  3064.             informazioniStatoPortaCache.add(informazioniStatoPortaCacheAutenticazioneDati);
  3065.            
  3066.             org.openspcoop2.pdd.core.jmx.EngineGestioneToken infoGestioneTokenDati = new org.openspcoop2.pdd.core.jmx.EngineGestioneToken();
  3067.             InformazioniStatoPortaCache informazioniStatoPortaCacheGestioneTokenDati = new InformazioniStatoPortaCache(CostantiPdD.JMX_TOKEN, infoGestioneTokenDati.isCacheAbilitata());
  3068.             if(infoGestioneTokenDati.isCacheAbilitata()){
  3069.                 informazioniStatoPortaCacheGestioneTokenDati.setStatoCache(infoGestioneTokenDati.printStatCache());
  3070.             }
  3071.             informazioniStatoPortaCache.add(informazioniStatoPortaCacheGestioneTokenDati);
  3072.            
  3073.             org.openspcoop2.pdd.core.jmx.EngineAttributeAuthority infoAttributeAuthorityDati = new org.openspcoop2.pdd.core.jmx.EngineAttributeAuthority();
  3074.             InformazioniStatoPortaCache informazioniStatoPortaCacheAttributeAuthorityDati = new InformazioniStatoPortaCache(CostantiPdD.JMX_ATTRIBUTE_AUTHORITY, infoAttributeAuthorityDati.isCacheAbilitata());
  3075.             if(infoAttributeAuthorityDati.isCacheAbilitata()){
  3076.                 informazioniStatoPortaCacheAttributeAuthorityDati.setStatoCache(infoAttributeAuthorityDati.printStatCache());
  3077.             }
  3078.             informazioniStatoPortaCache.add(informazioniStatoPortaCacheAttributeAuthorityDati);
  3079.            
  3080.             org.openspcoop2.pdd.core.jmx.EngineResponseCaching infoResponseCaching = new org.openspcoop2.pdd.core.jmx.EngineResponseCaching();
  3081.             InformazioniStatoPortaCache informazioniStatoPortaCacheResponseCaching = new InformazioniStatoPortaCache(CostantiPdD.JMX_RESPONSE_CACHING, infoResponseCaching.isCacheAbilitata());
  3082.             if(infoResponseCaching.isCacheAbilitata()){
  3083.                 informazioniStatoPortaCacheResponseCaching.setStatoCache(infoResponseCaching.printStatCache());
  3084.             }
  3085.             informazioniStatoPortaCache.add(informazioniStatoPortaCacheResponseCaching);
  3086.            
  3087.             org.openspcoop2.pdd.core.jmx.EngineKeystoreCaching infoKeystoreCaching = new org.openspcoop2.pdd.core.jmx.EngineKeystoreCaching();
  3088.             InformazioniStatoPortaCache informazioniStatoPortaCacheKeystoreCaching = new InformazioniStatoPortaCache(CostantiPdD.JMX_KEYSTORE_CACHING, infoKeystoreCaching.isCacheAbilitata());
  3089.             if(infoKeystoreCaching.isCacheAbilitata()){
  3090.                 informazioniStatoPortaCacheKeystoreCaching.setStatoCache(infoKeystoreCaching.printStatCache());
  3091.             }
  3092.             informazioniStatoPortaCache.add(informazioniStatoPortaCacheKeystoreCaching);
  3093.            
  3094.             org.openspcoop2.pdd.core.jmx.GestoreConsegnaApplicativi infoGestoreConsegnaApplicativi = new org.openspcoop2.pdd.core.jmx.GestoreConsegnaApplicativi();
  3095.             InformazioniStatoPortaCache informazioniStatoPortaCacheGestoreConsegnaApplicativi = new InformazioniStatoPortaCache(CostantiPdD.JMX_LOAD_BALANCER, infoGestoreConsegnaApplicativi.isCacheAbilitata());
  3096.             if(infoGestoreConsegnaApplicativi.isCacheAbilitata()){
  3097.                 informazioniStatoPortaCacheGestoreConsegnaApplicativi.setStatoCache(infoGestoreConsegnaApplicativi.printStatCache());
  3098.             }
  3099.             informazioniStatoPortaCache.add(informazioniStatoPortaCacheGestoreConsegnaApplicativi);
  3100.            
  3101.             org.openspcoop2.pdd.core.jmx.GestoreRichieste infoGestoreRichieste = new org.openspcoop2.pdd.core.jmx.GestoreRichieste();
  3102.             InformazioniStatoPortaCache informazioniStatoPortaCacheGestoreRichieste = new InformazioniStatoPortaCache(CostantiPdD.JMX_GESTORE_RICHIESTE, infoGestoreRichieste.isCacheAbilitata());
  3103.             if(infoGestoreRichieste.isCacheAbilitata()){
  3104.                 informazioniStatoPortaCacheGestoreRichieste.setStatoCache(infoGestoreRichieste.printStatCache());
  3105.             }
  3106.             informazioniStatoPortaCache.add(informazioniStatoPortaCacheGestoreRichieste);
  3107.            
  3108.             org.openspcoop2.pdd.core.jmx.RepositoryMessaggi infoRepositoryMessaggi = new org.openspcoop2.pdd.core.jmx.RepositoryMessaggi();
  3109.             InformazioniStatoPortaCache informazioniStatoPortaCacheRepositoryMessaggi = new InformazioniStatoPortaCache(CostantiPdD.JMX_REPOSITORY_MESSAGGI, infoRepositoryMessaggi.isCacheAbilitata());
  3110.             if(infoRepositoryMessaggi.isCacheAbilitata()){
  3111.                 informazioniStatoPortaCacheRepositoryMessaggi.setStatoCache(infoRepositoryMessaggi.printStatCache());
  3112.             }
  3113.             informazioniStatoPortaCache.add(informazioniStatoPortaCacheRepositoryMessaggi);
  3114.            
  3115.             ConfigurazioneSistema infoConfigSistema = new ConfigurazioneSistema();
  3116.             ConfigurazioneSistema.setIncludePassword(propertiesReader.isConfigurazioneSistema_javaProperties_showPassword());
  3117.             StatoServiziJMXResource statoServiziPdD = new StatoServiziJMXResource();
  3118.             OpenSPCoop2Logger.getLoggerOpenSPCoopConfigurazioneSistema().
  3119.                 info(informazioniStatoPorta.formatStatoPorta(infoConfigSistema.getVersionePdD(),
  3120.                         infoConfigSistema.getVersioneBaseDati(), infoConfigSistema.getDirectoryConfigurazione(),
  3121.                         infoConfigSistema.getVersioneJava(), infoConfigSistema.getVendorJava(), infoConfigSistema.getMessageFactory(),
  3122.                         statoServiziPdD.getComponentePD(), statoServiziPdD.getComponentePD_abilitazioniPuntuali(), statoServiziPdD.getComponentePD_disabilitazioniPuntuali(),
  3123.                         statoServiziPdD.getComponentePA(), statoServiziPdD.getComponentePA_abilitazioniPuntuali(), statoServiziPdD.getComponentePA_disabilitazioniPuntuali(),
  3124.                         statoServiziPdD.getComponenteIM(),
  3125.                         LogLevels.toOpenSPCoop2(configurazionePdDManager.getSeveritaMessaggiDiagnostici(),true),
  3126.                         LogLevels.toOpenSPCoop2(configurazionePdDManager.getSeveritaLog4JMessaggiDiagnostici(),true),
  3127.                         OpenSPCoop2Logger.loggerMsgDiagnosticoAbilitato, OpenSPCoop2Logger.loggerMsgDiagnosticoReadableAbilitato, OpenSPCoop2Logger.loggerIntegrationManagerAbilitato,
  3128.                         configurazionePdDManager.tracciamentoBuste(),
  3129.                         configurazionePdDManager.dumpBinarioPD(), configurazionePdDManager.dumpBinarioPA(),
  3130.                         OpenSPCoop2Logger.loggerTracciamentoAbilitato, OpenSPCoop2Logger.loggerDumpAbilitato,
  3131.                         propertiesReader.getFileTraceGovWayState().toString(),
  3132.                         ErroriProperties.isFORCE_SPECIFIC_ERROR_TYPE_FOR_INTERNAL_BAD_REQUEST(),
  3133.                         (ErroriProperties.isFORCE_SPECIFIC_ERROR_TYPE_FOR_BAD_RESPONSE() && ErroriProperties.isFORCE_SPECIFIC_ERROR_TYPE_FOR_INTERNAL_RESPONSE_ERROR()),
  3134.                         ErroriProperties.isFORCE_SPECIFIC_ERROR_TYPE_FOR_INTERNAL_ERROR(),
  3135.                         Costanti.isTRANSACTION_ERROR_STATUS_ABILITATO(), Costanti.isTRANSACTION_ERROR_SOAP_USE_GOVWAY_STATUS_AS_FAULT_CODE(),
  3136.                         Costanti.isTRANSACTION_FORCE_SPECIFIC_ERROR_DETAILS(), Costanti.isTRANSACTION_ERROR_INSTANCE_ID_ABILITATO(), Costanti.isTRANSACTION_ERROR_SOAP_GENERATE_HTTP_HEADER_GOVWAY_CODE(),
  3137.                         infoConfigSistema.getInformazioniDatabase(), infoConfigSistema.getInformazioniAltriDatabase(),
  3138.                         infoConfigSistema.getInformazioniSSL(true,true,true,true),
  3139.                         infoConfigSistema.getInformazioniCryptographyKeyLength(),
  3140.                         infoConfigSistema.getInformazioniCharset(),
  3141.                         infoConfigSistema.getInformazioniInternazionalizzazione(true),
  3142.                         infoConfigSistema.getInformazioniTimeZone(true),
  3143.                         infoConfigSistema.getInformazioniProprietaJava(true, true, false, ConfigurazioneSistema.isIncludePassword()),
  3144.                         infoConfigSistema.getInformazioniProprietaJava(true, false, true, ConfigurazioneSistema.isIncludePassword()),
  3145.                         infoConfigSistema.getInformazioniProprietaSistema(),
  3146.                         infoConfigSistema.getPluginProtocols(),
  3147.                         infoConfigSistema.getInformazioniInstallazione(),
  3148.                         informazioniStatoPortaCache.toArray(new InformazioniStatoPortaCache[1])));

  3149.            
  3150.            
  3151.            
  3152.            
  3153.            
  3154.    
  3155.            
  3156.            
  3157.            
  3158.             // Inizializzazione Init Handler
  3159.             try{
  3160.                 InitContext initContext = new InitContext();
  3161.                 initContext.setLogCore(logCore);
  3162.                 initContext.setLogConsole(OpenSPCoop2Startup.log);
  3163.                 initContext.setPddContext(OpenSPCoop2Startup.this.pddContext);
  3164.                 GestoreHandlers.init(initContext, msgDiag,OpenSPCoop2Startup.log); // per avere gli init stampati su server log
  3165.             }catch(HandlerException e){
  3166.                 if(e.isEmettiDiagnostico()){
  3167.                     msgDiag.logStartupError(e,e.getIdentitaHandler());
  3168.                 }
  3169.                 else{
  3170.                     logCore.error(e.getMessage(),e);
  3171.                 }
  3172.                 return;
  3173.             }catch(Exception e){
  3174.                 msgDiag.logStartupError(e,"InitHandler");
  3175.                 return;
  3176.             }
  3177.            
  3178.            
  3179.            
  3180.            
  3181.            



  3182.             // Inizializzazione Timer per il check delle risorse
  3183.             try{
  3184.                 if( propertiesReader.isAbilitatoControlloRisorseConfigurazione() ||
  3185.                         propertiesReader.isAbilitatoControlloValidazioneSemanticaConfigurazione() ||
  3186.                         propertiesReader.isAbilitatoControlloRisorseDB() ||
  3187.                         propertiesReader.isAbilitatoControlloRisorseJMS() ||
  3188.                         propertiesReader.isAbilitatoControlloRisorseMsgDiagnosticiPersonalizzati() ||
  3189.                         propertiesReader.isAbilitatoControlloRisorseRegistriServizi() ||
  3190.                         propertiesReader.isAbilitatoControlloValidazioneSemanticaRegistriServizi() ||
  3191.                         propertiesReader.isAbilitatoControlloRisorseTracciamentiPersonalizzati()){
  3192.                     OpenSPCoop2Startup.this.timerMonitoraggioRisorse = new TimerMonitoraggioRisorseThread();
  3193.                     OpenSPCoop2Startup.this.timerMonitoraggioRisorse.start();
  3194.                     TimerMonitoraggioRisorseThread.setSTATE( TimerState.ENABLED );
  3195.                     OpenSPCoop2Startup.logStartupInfo("Inizializzo Timer per il Monitoraggio delle Risorse");
  3196.                 }
  3197.             }catch(Exception e){
  3198.                 msgDiag.logStartupError(e,"TimerMonitoraggioRisorse");
  3199.                 return;
  3200.             }





  3201.             // Inizializzazione Timer per il check del Threshold
  3202.             try{
  3203.                 List<String> tipiThreshold = propertiesReader.getRepositoryThresholdTypes();
  3204.                 if(tipiThreshold!=null && !tipiThreshold.isEmpty()){
  3205.                     OpenSPCoop2Startup.this.timerThreshold = new TimerThresholdThread();
  3206.                     OpenSPCoop2Startup.this.timerThreshold.start();
  3207.                     TimerThresholdThread.setSTATE( TimerState.ENABLED );
  3208.                     OpenSPCoop2Startup.logStartupInfo("Inizializzo Timer per il Controllo dei Threshold sulle risorse");
  3209.                 }
  3210.             }catch(Exception e){
  3211.                 msgDiag.logStartupError(e,"TimerThreshold");
  3212.                 return;
  3213.             }






  3214.             // Inizializzazione delle risorse esterne terminata
  3215.             OpenSPCoop2Startup.initialize = true;
  3216.             Utilities.sleep(1000);








  3217.             /* -------- Check deploy timer ------ */
  3218.             boolean gestoreBusteNonRiscontrate = false;
  3219.             boolean gestoreMessaggi = false;
  3220.             boolean gestorePuliziaMessaggiAnomali = false;
  3221.             boolean gestoreRepository=false;
  3222.             if(OpenSPCoop2Startup.this.serverJ2EE){
  3223.                 long scadenzaWhile = System.currentTimeMillis() + propertiesReader.getTimerEJBDeployTimeout();
  3224.                 GestoreJNDI jndi = null;
  3225.                 if(propertiesReader.getJNDIContext_TimerEJB()==null)
  3226.                     jndi = new GestoreJNDI();
  3227.                 else
  3228.                     jndi = new GestoreJNDI(propertiesReader.getJNDIContext_TimerEJB());

  3229.                 while( (System.currentTimeMillis() < scadenzaWhile)
  3230.                         &&
  3231.                         (gestoreBusteNonRiscontrate==false
  3232.                                 || gestoreMessaggi==false
  3233.                                 || gestorePuliziaMessaggiAnomali==false
  3234.                                 || gestoreRepository==false)){

  3235.                     gestoreBusteNonRiscontrate = false;
  3236.                     gestoreMessaggi = false;
  3237.                     gestorePuliziaMessaggiAnomali = false;
  3238.                     gestoreRepository=false;

  3239.                     // check Timer Gestore Riscontri
  3240.                     if(propertiesReader.isTimerGestoreRiscontriRicevuteAbilitato()){
  3241.                         try{
  3242.                             String nomeJNDI = propertiesReader.getJNDITimerEJBName().get(TimerGestoreBusteNonRiscontrate.ID_MODULO);
  3243.                             OpenSPCoop2Startup.logStartupInfo("Inizializzo EJB gestore riscontri ["+nomeJNDI+"]");
  3244.                             jndi.lookup(nomeJNDI);
  3245.                             gestoreBusteNonRiscontrate = true;
  3246.                         }catch(Exception e){
  3247.                             this.logError("Search EJB gestore riscontri non trovato: "+e.getMessage(),e);
  3248.                             try {
  3249.                                 Utilities.sleep((RandomUtilities.getRandom()).nextInt(propertiesReader.getTimerEJBDeployCheckInterval())); // random da 0ms a TransactionManagerCheckInterval ms
  3250.                             }catch(Exception eRandom){
  3251.                                 // ignore
  3252.                             }
  3253.                             continue;
  3254.                         }
  3255.                     }else{
  3256.                         gestoreBusteNonRiscontrate = true;
  3257.                     }

  3258.                     //  check Timer Gestore Messaggi
  3259.                     if(propertiesReader.isTimerGestoreMessaggiAbilitato()){
  3260.                         try{
  3261.                             String nomeJNDI = propertiesReader.getJNDITimerEJBName().get(TimerGestoreMessaggi.ID_MODULO);
  3262.                             OpenSPCoop2Startup.logStartupInfo("Inizializzo EJB gestore messaggi ["+nomeJNDI+"]");
  3263.                             jndi.lookup(nomeJNDI);
  3264.                             gestoreMessaggi = true;
  3265.                         }catch(Exception e){
  3266.                             this.logError("Search EJB gestore messaggi non trovato: "+e.getMessage(),e);
  3267.                             try{
  3268.                                 Utilities.sleep((RandomUtilities.getRandom()).nextInt(propertiesReader.getTimerEJBDeployCheckInterval())); // random da 0ms a TransactionManagerCheckInterval ms
  3269.                             }catch(Exception eRandom){
  3270.                                 // ignore
  3271.                             }
  3272.                             continue;
  3273.                         }
  3274.                     }else{
  3275.                         gestoreMessaggi = true;
  3276.                     }

  3277.                     //  check Timer Gestore Pulizia Messaggi Anomali
  3278.                     if(propertiesReader.isTimerGestorePuliziaMessaggiAnomaliAbilitato()){
  3279.                         try{
  3280.                             String nomeJNDI = propertiesReader.getJNDITimerEJBName().get(TimerGestorePuliziaMessaggiAnomali.ID_MODULO);
  3281.                             OpenSPCoop2Startup.logStartupInfo("Inizializzo EJB gestore pulizia messaggi anomali ["+nomeJNDI+"]");
  3282.                             jndi.lookup(nomeJNDI);
  3283.                             gestorePuliziaMessaggiAnomali = true;
  3284.                         }catch(Exception e){
  3285.                             this.logError("Search EJB pulizia messaggi anomali non trovato: "+e.getMessage(),e);
  3286.                             try{
  3287.                                 Utilities.sleep((RandomUtilities.getRandom()).nextInt(propertiesReader.getTimerEJBDeployCheckInterval())); // random da 0ms a TransactionManagerCheckInterval ms
  3288.                             }catch(Exception eRandom){
  3289.                                 // ignore
  3290.                             }
  3291.                             continue;
  3292.                         }
  3293.                     }else{
  3294.                         gestorePuliziaMessaggiAnomali = true;
  3295.                     }


  3296.                     //  check Timer Gestore Repository
  3297.                     if(propertiesReader.isTimerGestoreRepositoryBusteAbilitato()){
  3298.                         try{
  3299.                             String nomeJNDI = propertiesReader.getJNDITimerEJBName().get(TimerGestoreRepositoryBuste.ID_MODULO);
  3300.                             OpenSPCoop2Startup.logStartupInfo("Inizializzo EJB gestore repository ["+nomeJNDI+"]");
  3301.                             jndi.lookup(nomeJNDI);
  3302.                             gestoreRepository = true;
  3303.                         }catch(Exception e){
  3304.                             this.logError("Search EJB gestore repository non trovato: "+e.getMessage(),e);
  3305.                             try{
  3306.                                 Utilities.sleep((RandomUtilities.getRandom()).nextInt(propertiesReader.getTimerEJBDeployCheckInterval())); // random da 0ms a TransactionManagerCheckInterval ms
  3307.                             }catch(Exception eRandom){
  3308.                                 // ignore
  3309.                             }
  3310.                             continue;
  3311.                         }
  3312.                     }else{
  3313.                         gestoreRepository = true;
  3314.                     }
  3315.                 }
  3316.             }






  3317.             /* ------------ Avvia il thread per la gestione dei Riscontri Scaduti  ------------ */
  3318.             if(OpenSPCoop2Startup.this.serverJ2EE){
  3319.                 if(propertiesReader.isTimerGestoreRiscontriRicevuteAbilitato()){
  3320.                     if(gestoreBusteNonRiscontrate){
  3321.                         try{
  3322.                             OpenSPCoop2Startup.this.timerRiscontri = TimerUtils.createTimerGestoreBusteNonRiscontrate();
  3323.                         }catch(Exception e){
  3324.                             msgDiag.logStartupError(e,"Creazione timer '"+TimerGestoreBusteNonRiscontrate.ID_MODULO+"'");
  3325.                         }
  3326.                         if(OpenSPCoop2Startup.this.timerRiscontri != null) {
  3327.                             try {
  3328.                                 OpenSPCoop2Startup.this.timerRiscontri.start();
  3329.                                 TimerGestoreBusteNonRiscontrateLib.setSTATE_ONEWAY( TimerState.ENABLED );
  3330.                                 TimerGestoreBusteNonRiscontrateLib.setSTATE_ASINCRONI( TimerState.ENABLED );
  3331.                             } catch (RemoteException e) {
  3332.                                 msgDiag.logStartupError(e,"Avvio timer '"+TimerGestoreBusteNonRiscontrate.ID_MODULO+"'");
  3333.                             }
  3334.                         }else{
  3335.                             msgDiag.logStartupError("timer is null","Avvio timer '"+TimerGestoreBusteNonRiscontrate.ID_MODULO+"'");
  3336.                         }
  3337.                     }else{
  3338.                         msgDiag.logStartupError("timer non esiste nell'application server","Avvio timer '"+TimerGestoreBusteNonRiscontrate.ID_MODULO+"'");
  3339.                     }
  3340.                 }else{
  3341.                     msgDiag.setPrefixMsgPersonalizzati(MsgDiagnosticiProperties.MSG_DIAG_TIMER_GESTORE_RISCONTRI_RICEVUTE);
  3342.                     msgDiag.addKeyword(CostantiPdD.KEY_TIMER_GESTORE_MESSAGGI, TimerGestoreBusteNonRiscontrate.ID_MODULO);
  3343.                     msgDiag.logPersonalizzato("disabilitato");
  3344.                     msgDiag.setPrefixMsgPersonalizzati(null);
  3345.                 }
  3346.             }









  3347.             /* ------------ Avvia il thread per l'eliminazione dei messaggi  ------------ */
  3348.             if(propertiesReader.isTimerGestoreMessaggiAbilitato()){
  3349.                 if(OpenSPCoop2Startup.this.serverJ2EE){
  3350.                     if(gestoreMessaggi){
  3351.                         try{
  3352.                             OpenSPCoop2Startup.this.timerEliminazioneMsg = TimerUtils.createTimerGestoreMessaggi();
  3353.                         }catch(Exception e){
  3354.                             msgDiag.logStartupError(e,"Creazione timer '"+TimerGestoreMessaggi.ID_MODULO+"'");
  3355.                         }
  3356.                         if(OpenSPCoop2Startup.this.timerEliminazioneMsg != null) {
  3357.                             try {
  3358.                                 OpenSPCoop2Startup.this.timerEliminazioneMsg.start();
  3359.                                 TimerGestoreMessaggiLib.setSTATE_MESSAGGI_ELIMINATI( propertiesReader.isTimerGestoreMessaggiPuliziaMessaggiEliminatiAbilitata() ? TimerState.ENABLED : TimerState.DISABLED );
  3360.                                 TimerGestoreMessaggiLib.setSTATE_MESSAGGI_SCADUTI( propertiesReader.isTimerGestoreMessaggiPuliziaMessaggiScadutiAbilitata() ? TimerState.ENABLED : TimerState.DISABLED );
  3361.                                 TimerGestoreMessaggiLib.setSTATE_MESSAGGI_NON_GESTITI( propertiesReader.isTimerGestoreMessaggiPuliziaMessaggiNonGestitiAbilitata() ? TimerState.ENABLED : TimerState.DISABLED );
  3362.                                 TimerGestoreMessaggiLib.setSTATE_CORRELAZIONE_APPLICATIVA( propertiesReader.isTimerGestoreMessaggiPuliziaCorrelazioneApplicativaAbilitata() ? TimerState.ENABLED : TimerState.DISABLED );
  3363.                                 TimerGestoreMessaggiLib.setSTATE_VERIFICA_CONNESSIONI_ATTIVE( propertiesReader.isTimerGestoreMessaggiVerificaConnessioniAttive() ? TimerState.ENABLED : TimerState.DISABLED );
  3364.                             } catch (RemoteException e) {
  3365.                                 msgDiag.logStartupError(e,"Avvio timer '"+TimerGestoreMessaggi.ID_MODULO+"'");
  3366.                             }
  3367.                         }else{
  3368.                             msgDiag.logStartupError("timer is null","Avvio timer '"+TimerGestoreMessaggi.ID_MODULO+"'");
  3369.                         }
  3370.                     }else{
  3371.                         msgDiag.logStartupError("timer non esiste nell'application server","Avvio timer '"+TimerGestoreMessaggi.ID_MODULO+"'");
  3372.                     }
  3373.                 }else{
  3374.                     try{
  3375.                         OpenSPCoop2Startup.this.threadEliminazioneMsg = new TimerGestoreMessaggiThread();
  3376.                         OpenSPCoop2Startup.this.threadEliminazioneMsg.start();
  3377.                         TimerGestoreMessaggiLib.setSTATE_MESSAGGI_ELIMINATI( propertiesReader.isTimerGestoreMessaggiPuliziaMessaggiEliminatiAbilitata() ? TimerState.ENABLED : TimerState.DISABLED );
  3378.                         TimerGestoreMessaggiLib.setSTATE_MESSAGGI_SCADUTI( propertiesReader.isTimerGestoreMessaggiPuliziaMessaggiScadutiAbilitata() ? TimerState.ENABLED : TimerState.DISABLED );
  3379.                         TimerGestoreMessaggiLib.setSTATE_MESSAGGI_NON_GESTITI( propertiesReader.isTimerGestoreMessaggiPuliziaMessaggiNonGestitiAbilitata() ? TimerState.ENABLED : TimerState.DISABLED );
  3380.                         TimerGestoreMessaggiLib.setSTATE_CORRELAZIONE_APPLICATIVA( propertiesReader.isTimerGestoreMessaggiPuliziaCorrelazioneApplicativaAbilitata() ? TimerState.ENABLED : TimerState.DISABLED );
  3381.                         TimerGestoreMessaggiLib.setSTATE_VERIFICA_CONNESSIONI_ATTIVE( propertiesReader.isTimerGestoreMessaggiVerificaConnessioniAttive() ? TimerState.ENABLED : TimerState.DISABLED );
  3382.                     }catch(Exception e){
  3383.                         msgDiag.logStartupError(e,"Avvio timer (thread) '"+TimerGestoreMessaggi.ID_MODULO+"'");
  3384.                     }
  3385.                 }
  3386.             }else{
  3387.                 msgDiag.setPrefixMsgPersonalizzati(MsgDiagnosticiProperties.MSG_DIAG_TIMER_GESTORE_MESSAGGI);
  3388.                 msgDiag.addKeyword(CostantiPdD.KEY_TIMER_GESTORE_MESSAGGI, TimerGestoreMessaggi.ID_MODULO);
  3389.                 msgDiag.logPersonalizzato("disabilitato");
  3390.                 msgDiag.setPrefixMsgPersonalizzati(null);
  3391.             }









  3392.             /* ------------ Avvia il thread per l'eliminazione dei messaggi anomali ------------ */
  3393.             if(propertiesReader.isTimerGestorePuliziaMessaggiAnomaliAbilitato()){
  3394.                 if(OpenSPCoop2Startup.this.serverJ2EE){
  3395.                     if(gestorePuliziaMessaggiAnomali){
  3396.                         try{
  3397.                             OpenSPCoop2Startup.this.timerPuliziaMsgAnomali = TimerUtils.createTimerGestorePuliziaMessaggiAnomali();
  3398.                         }catch(Exception e){
  3399.                             msgDiag.logStartupError(e,"Creazione timer '"+TimerGestorePuliziaMessaggiAnomali.ID_MODULO+"'");
  3400.                         }
  3401.                         if(OpenSPCoop2Startup.this.timerPuliziaMsgAnomali != null) {
  3402.                             try {
  3403.                                 OpenSPCoop2Startup.this.timerPuliziaMsgAnomali.start();
  3404.                                 TimerGestorePuliziaMessaggiAnomaliLib.setSTATE( TimerState.ENABLED );
  3405.                             } catch (RemoteException e) {
  3406.                                 msgDiag.logStartupError(e,"Avvio timer '"+TimerGestorePuliziaMessaggiAnomali.ID_MODULO+"'");
  3407.                             }
  3408.                         }else{
  3409.                             msgDiag.logStartupError("timer is null","Avvio timer '"+TimerGestorePuliziaMessaggiAnomali.ID_MODULO+"'");
  3410.                         }
  3411.                     }else{
  3412.                         msgDiag.logStartupError("timer non esiste nell'application server","Avvio timer '"+TimerGestorePuliziaMessaggiAnomali.ID_MODULO+"'");
  3413.                     }
  3414.                 }else{
  3415.                     try{
  3416.                         OpenSPCoop2Startup.this.threadPuliziaMsgAnomali = new TimerGestorePuliziaMessaggiAnomaliThread();
  3417.                         OpenSPCoop2Startup.this.threadPuliziaMsgAnomali.start();
  3418.                         TimerGestorePuliziaMessaggiAnomaliLib.setSTATE( TimerState.ENABLED );
  3419.                     }catch(Exception e){
  3420.                         msgDiag.logStartupError(e,"Avvio timer (thread) '"+TimerGestorePuliziaMessaggiAnomali.ID_MODULO+"'");
  3421.                     }
  3422.                 }
  3423.             }else{
  3424.                 msgDiag.setPrefixMsgPersonalizzati(MsgDiagnosticiProperties.MSG_DIAG_TIMER_GESTORE_MESSAGGI_INCONSISTENTI);
  3425.                 msgDiag.addKeyword(CostantiPdD.KEY_TIMER_GESTORE_MESSAGGI_INCONSISTENTI, TimerGestorePuliziaMessaggiAnomali.ID_MODULO);
  3426.                 msgDiag.logPersonalizzato("disabilitato");
  3427.                 msgDiag.setPrefixMsgPersonalizzati(null);
  3428.             }







  3429.             /* ------------ Avvia il thread per l'eliminazione delle buste  ------------ */
  3430.             if(propertiesReader.isTimerGestoreRepositoryBusteAbilitato()){
  3431.                 if(OpenSPCoop2Startup.this.serverJ2EE){
  3432.                     if(gestoreRepository){
  3433.                         try{
  3434.                             OpenSPCoop2Startup.this.timerRepositoryBuste = TimerUtils.createTimerGestoreRepositoryBuste();
  3435.                         }catch(Exception e){
  3436.                             msgDiag.logStartupError(e,"Creazione timer '"+TimerGestoreRepositoryBuste.ID_MODULO+"'");
  3437.                         }
  3438.                         if(OpenSPCoop2Startup.this.timerRepositoryBuste != null) {
  3439.                             try {
  3440.                                 OpenSPCoop2Startup.this.timerRepositoryBuste.start();
  3441.                                 TimerGestoreRepositoryBusteLib.setSTATE( propertiesReader.isTimerGestoreRepositoryBusteAbilitatoInitialState() ? TimerState.ENABLED : TimerState.DISABLED );
  3442.                             } catch (RemoteException e) {
  3443.                                 msgDiag.logStartupError(e,"Avvio timer '"+TimerGestoreRepositoryBuste.ID_MODULO+"'");
  3444.                             }
  3445.                         }else{
  3446.                             msgDiag.logStartupError("timer is null","Avvio timer '"+TimerGestoreRepositoryBuste.ID_MODULO+"'");
  3447.                         }
  3448.                     }else{
  3449.                         msgDiag.logStartupError("timer non esiste nell'application server","Avvio timer '"+TimerGestoreRepositoryBuste.ID_MODULO+"'");
  3450.                     }
  3451.                 }else{
  3452.                     try{
  3453.                         OpenSPCoop2Startup.this.threadRepositoryBuste = new TimerGestoreRepositoryBusteThread();
  3454.                         OpenSPCoop2Startup.this.threadRepositoryBuste.start();
  3455.                         TimerGestoreRepositoryBusteLib.setSTATE( propertiesReader.isTimerGestoreRepositoryBusteAbilitatoInitialState() ? TimerState.ENABLED : TimerState.DISABLED );
  3456.                     }catch(Exception e){
  3457.                         msgDiag.logStartupError(e,"Avvio timer (thread) '"+TimerGestoreRepositoryBuste.ID_MODULO+"'");
  3458.                     }
  3459.                 }
  3460.             }else{
  3461.                 msgDiag.setPrefixMsgPersonalizzati(MsgDiagnosticiProperties.MSG_DIAG_TIMER_GESTORE_REPOSITORY_BUSTE);
  3462.                 msgDiag.addKeyword(CostantiPdD.KEY_TIMER_GESTORE_REPOSITORY_BUSTE, TimerGestoreRepositoryBuste.ID_MODULO);
  3463.                 msgDiag.logPersonalizzato("disabilitato");
  3464.                 msgDiag.setPrefixMsgPersonalizzati(null);
  3465.             }




  3466.            
  3467.            
  3468.            
  3469.            
  3470.            
  3471.             /* ------------ Avvia il thread per la riconsegna dei messaggi per ContenutiApplicativi  ------------ */
  3472.             if(OpenSPCoop2Startup.this.serverJ2EE==false){
  3473.                 if(propertiesReader.isTimerConsegnaContenutiApplicativiAbilitato()){
  3474.                     OpenSPCoop2Startup.this.threadConsegnaContenutiApplicativiMap = new HashMap<String, TimerConsegnaContenutiApplicativiThread>();
  3475.                     List<String> code = propertiesReader.getTimerConsegnaContenutiApplicativiCode();
  3476.                     try{
  3477.                         for (String coda : code) {
  3478.                             ConfigurazioneCoda configurazioneCoda = propertiesReader.getTimerConsegnaContenutiApplicativiConfigurazioneCoda(coda);
  3479.                             TimerConsegnaContenutiApplicativiThread timer = new TimerConsegnaContenutiApplicativiThread(configurazioneCoda);
  3480.                             timer.start();
  3481.                             OpenSPCoop2Startup.this.threadConsegnaContenutiApplicativiMap.put(coda, timer);
  3482.                         }
  3483.                         TimerConsegnaContenutiApplicativi.setSTATE( TimerState.ENABLED );
  3484.                     }catch(Exception e){
  3485.                         msgDiag.logStartupError(e,"Avvio timer (thread) '"+TimerConsegnaContenutiApplicativiThread.ID_MODULO+"'");
  3486.                     }
  3487.                     OpenSPCoop2Startup.threadConsegnaContenutiApplicativiRefMap = OpenSPCoop2Startup.this.threadConsegnaContenutiApplicativiMap;
  3488.                 }else{
  3489.                     msgDiag.setPrefixMsgPersonalizzati(MsgDiagnosticiProperties.MSG_DIAG_TIMER_CONSEGNA_CONTENUTI_APPLICATIVI);
  3490.                     msgDiag.addKeyword(CostantiPdD.KEY_TIMER, TimerConsegnaContenutiApplicativiThread.ID_MODULO);
  3491.                     msgDiag.logPersonalizzato("disabilitato");
  3492.                     msgDiag.setPrefixMsgPersonalizzati(null);
  3493.                 }
  3494.             }
  3495.            
  3496.            
  3497.            
  3498.            
  3499.            
  3500.            
  3501.             /* ------------ Avvia il thread per la generazione delle statistiche  ------------ */
  3502.             if(propertiesReader.isStatisticheGenerazioneEnabled()){
  3503.                
  3504.                 // stat orarie
  3505.                 String idTimerStatOrarie = "Timer"+TipoIntervalloStatistico.STATISTICHE_ORARIE.getValue();
  3506.                 if(propertiesReader.isStatisticheGenerazioneBaseOrariaEnabled()) {
  3507.                     try{
  3508.                         OpenSPCoop2Startup.this.threadGenerazioneStatisticheOrarie =
  3509.                                 new TimerStatisticheThread(propertiesReader.getStatisticheOrarieGenerazioneTimerIntervalSeconds(), TipoIntervalloStatistico.STATISTICHE_ORARIE);
  3510.                         OpenSPCoop2Startup.this.threadGenerazioneStatisticheOrarie.start();
  3511.                         TimerStatisticheLib.setSTATE_STATISTICHE_ORARIE( TimerState.ENABLED );
  3512.                     }catch(Exception e){
  3513.                         msgDiag.logStartupError(e,"Avvio timer (thread) '"+idTimerStatOrarie+"'");
  3514.                     }
  3515.                 }else{
  3516.                     msgDiag.setPrefixMsgPersonalizzati(MsgDiagnosticiProperties.MSG_DIAG_TIMER_STATISTICHE);
  3517.                     msgDiag.addKeyword(CostantiPdD.KEY_TIMER, idTimerStatOrarie);
  3518.                     msgDiag.logPersonalizzato("disabilitato");
  3519.                     msgDiag.setPrefixMsgPersonalizzati(null);
  3520.                 }
  3521.                
  3522.                 // stat giornaliere
  3523.                 String idTimerStatGiornaliere = "Timer"+TipoIntervalloStatistico.STATISTICHE_GIORNALIERE.getValue();
  3524.                 if(propertiesReader.isStatisticheGenerazioneBaseGiornalieraEnabled()) {
  3525.                     try{
  3526.                         OpenSPCoop2Startup.this.threadGenerazioneStatisticheGiornaliere =
  3527.                                 new TimerStatisticheThread(propertiesReader.getStatisticheGiornaliereGenerazioneTimerIntervalSeconds(), TipoIntervalloStatistico.STATISTICHE_GIORNALIERE);
  3528.                         OpenSPCoop2Startup.this.threadGenerazioneStatisticheGiornaliere.start();
  3529.                         TimerStatisticheLib.setSTATE_STATISTICHE_GIORNALIERE( TimerState.ENABLED );
  3530.                     }catch(Exception e){
  3531.                         msgDiag.logStartupError(e,"Avvio timer (thread) '"+idTimerStatGiornaliere+"'");
  3532.                     }
  3533.                 }else{
  3534.                     msgDiag.setPrefixMsgPersonalizzati(MsgDiagnosticiProperties.MSG_DIAG_TIMER_STATISTICHE);
  3535.                     msgDiag.addKeyword(CostantiPdD.KEY_TIMER, idTimerStatGiornaliere);
  3536.                     msgDiag.logPersonalizzato("disabilitato");
  3537.                     msgDiag.setPrefixMsgPersonalizzati(null);
  3538.                 }
  3539.                
  3540.                 // stat settimanali
  3541.                 String idTimerStatSettimanali = "Timer"+TipoIntervalloStatistico.STATISTICHE_SETTIMANALI.getValue();
  3542.                 if(propertiesReader.isStatisticheGenerazioneBaseSettimanaleEnabled()) {
  3543.                     try{
  3544.                         OpenSPCoop2Startup.this.threadGenerazioneStatisticheSettimanali =
  3545.                                 new TimerStatisticheThread(propertiesReader.getStatisticheSettimanaliGenerazioneTimerIntervalSeconds(), TipoIntervalloStatistico.STATISTICHE_SETTIMANALI);
  3546.                         OpenSPCoop2Startup.this.threadGenerazioneStatisticheSettimanali.start();
  3547.                         TimerStatisticheLib.setSTATE_STATISTICHE_SETTIMANALI( TimerState.ENABLED );
  3548.                     }catch(Exception e){
  3549.                         msgDiag.logStartupError(e,"Avvio timer (thread) '"+idTimerStatSettimanali+"'");
  3550.                     }
  3551.                 }else{
  3552.                     msgDiag.setPrefixMsgPersonalizzati(MsgDiagnosticiProperties.MSG_DIAG_TIMER_STATISTICHE);
  3553.                     msgDiag.addKeyword(CostantiPdD.KEY_TIMER, idTimerStatSettimanali);
  3554.                     msgDiag.logPersonalizzato("disabilitato");
  3555.                     msgDiag.setPrefixMsgPersonalizzati(null);
  3556.                 }
  3557.                
  3558.                 // stat mensili
  3559.                 String idTimerStatMensili = "Timer"+TipoIntervalloStatistico.STATISTICHE_MENSILI.getValue();
  3560.                 if(propertiesReader.isStatisticheGenerazioneBaseMensileEnabled()) {
  3561.                     try{
  3562.                         OpenSPCoop2Startup.this.threadGenerazioneStatisticheMensili =
  3563.                                 new TimerStatisticheThread(propertiesReader.getStatisticheMensiliGenerazioneTimerIntervalSeconds(), TipoIntervalloStatistico.STATISTICHE_MENSILI);
  3564.                         OpenSPCoop2Startup.this.threadGenerazioneStatisticheMensili.start();
  3565.                         TimerStatisticheLib.setSTATE_STATISTICHE_MENSILI( TimerState.ENABLED );
  3566.                     }catch(Exception e){
  3567.                         msgDiag.logStartupError(e,"Avvio timer (thread) '"+idTimerStatMensili+"'");
  3568.                     }
  3569.                 }else{
  3570.                     msgDiag.setPrefixMsgPersonalizzati(MsgDiagnosticiProperties.MSG_DIAG_TIMER_STATISTICHE);
  3571.                     msgDiag.addKeyword(CostantiPdD.KEY_TIMER, idTimerStatMensili);
  3572.                     msgDiag.logPersonalizzato("disabilitato");
  3573.                     msgDiag.setPrefixMsgPersonalizzati(null);
  3574.                 }
  3575.                
  3576.                 // pdnd generazione tracciamento
  3577.                 String idTimerPdndTracciamentoGenerazione = "Timer"+TipoIntervalloStatistico.PDND_GENERAZIONE_TRACCIAMENTO.getValue();
  3578.                 if(propertiesReader.isStatistichePdndTracciamentoGenerazioneEnabled()) {
  3579.                     try{
  3580.                         OpenSPCoop2Startup.this.threadPdndTracciamentoGenerazione =
  3581.                                 new TimerStatisticheThread(propertiesReader.getStatistichePdndTracciamentoGenerazioneTimerIntervalSeconds(), TipoIntervalloStatistico.PDND_GENERAZIONE_TRACCIAMENTO);
  3582.                         OpenSPCoop2Startup.this.threadPdndTracciamentoGenerazione.start();
  3583.                         TimerStatisticheLib.setSTATE_PDND_TRACCIAMENTO_GENERAZIONE(TimerState.ENABLED);
  3584.                     }catch(Exception e){
  3585.                         msgDiag.logStartupError(e,"Avvio timer (thread) '"+idTimerPdndTracciamentoGenerazione+"'");
  3586.                     }
  3587.                 }else{
  3588.                     msgDiag.setPrefixMsgPersonalizzati(MsgDiagnosticiProperties.MSG_DIAG_TIMER_STATISTICHE);
  3589.                     msgDiag.addKeyword(CostantiPdD.KEY_TIMER, idTimerPdndTracciamentoGenerazione);
  3590.                     msgDiag.logPersonalizzato("disabilitato");
  3591.                     msgDiag.setPrefixMsgPersonalizzati(null);
  3592.                 }
  3593.                
  3594.                 // pdnd generazione pubblicazione
  3595.                 String idTimerPdndTracciamentoPubblicazione = "Timer"+TipoIntervalloStatistico.PDND_PUBBLICAZIONE_TRACCIAMENTO.getValue();
  3596.                 if(propertiesReader.isStatistichePdndTracciamentoPubblicazioneEnabled()) {
  3597.                     try{
  3598.                         OpenSPCoop2Startup.this.threadPdndTracciamentoPubblicazione =
  3599.                                 new TimerStatisticheThread(propertiesReader.getStatistichePdndTracciamentoPubblicazioneTimerIntervalSeconds(), TipoIntervalloStatistico.PDND_PUBBLICAZIONE_TRACCIAMENTO);
  3600.                         OpenSPCoop2Startup.this.threadPdndTracciamentoPubblicazione.start();
  3601.                         TimerStatisticheLib.setSTATE_PDND_TRACCIAMENTO_PUBBLICAZIONE(TimerState.ENABLED);
  3602.                     }catch(Exception e){
  3603.                         msgDiag.logStartupError(e,"Avvio timer (thread) '"+idTimerPdndTracciamentoPubblicazione+"'");
  3604.                     }
  3605.                 }else{
  3606.                     msgDiag.setPrefixMsgPersonalizzati(MsgDiagnosticiProperties.MSG_DIAG_TIMER_STATISTICHE);
  3607.                     msgDiag.addKeyword(CostantiPdD.KEY_TIMER, idTimerPdndTracciamentoPubblicazione);
  3608.                     msgDiag.logPersonalizzato("disabilitato");
  3609.                     msgDiag.setPrefixMsgPersonalizzati(null);
  3610.                 }
  3611.             }
  3612.             else{
  3613.                 // Tutti i timers sono disabilitati
  3614.                 msgDiag.setPrefixMsgPersonalizzati(MsgDiagnosticiProperties.MSG_DIAG_TIMER_STATISTICHE);
  3615.                 msgDiag.addKeyword(CostantiPdD.KEY_TIMER, TimerStatisticheThread.ID_MODULO);
  3616.                 msgDiag.logPersonalizzato("disabilitato");
  3617.                 msgDiag.setPrefixMsgPersonalizzati(null);
  3618.             }
  3619.            
  3620.            
  3621.            
  3622.        
  3623.            
  3624.             /* ------------ Avvia il thread per la gestione delle chiavi PDND ------------ */
  3625.             if(protocolFactoryManager.existsProtocolFactory(CostantiLabel.MODIPA_PROTOCOL_NAME)) { // verifico che esista su PDND
  3626.                
  3627.                 RemoteStoreProviderDriver.setKeyMaxLifeMinutes(propertiesReader.getGestoreChiaviPDNDkeysMaxLifeMinutes());
  3628.                 OpenSPCoop2Startup.logStartupInfo("PDND Key max life minutes: "+RemoteStoreProviderDriver.getKeyMaxLifeMinutes());
  3629.                
  3630.                 RemoteStoreProviderDriver.setClientDetailsMaxLifeMinutes(propertiesReader.getGestoreChiaviPDNDclientInfoMaxLifeMinutes());
  3631.                 OpenSPCoop2Startup.logStartupInfo("PDND ClientId details max life minutes: "+RemoteStoreProviderDriver.getClientDetailsMaxLifeMinutes());
  3632.                
  3633.                
  3634.                 List<PDNDConfig> listRemoteConfig = null;
  3635.                 try {
  3636.                     listRemoteConfig = PDNDConfigUtilities.getRemoteStoreConfig(propertiesReader);
  3637.                 }catch(Exception e){
  3638.                     String msgError = "Inizializzazione thread per la gestione delle chiavi PDND non riuscita: "+e.getMessage();
  3639.                     msgDiag.logStartupError(e,msgError);
  3640.                     return;
  3641.                 }
  3642.                
  3643.                 if(listRemoteConfig!=null && !listRemoteConfig.isEmpty() && propertiesReader.isGestoreChiaviPDNDEnabled()) {
  3644.                    
  3645.                     OpenSPCoop2Startup.this.threadGestoreChiaviPDNDEnabled = true;
  3646.                    
  3647.                     try{
  3648.                         OpenSPCoop2Startup.this.threadGestoreChiaviPDND =
  3649.                                 new TimerGestoreChiaviPDND(propertiesReader.getGestoreChiaviPDNDeventsKeysTimerIntervalloSecondi(), listRemoteConfig);
  3650.                         OpenSPCoop2Startup.this.threadGestoreChiaviPDND.start();
  3651.                         TimerGestoreChiaviPDNDLib.setState( TimerState.ENABLED );
  3652.                     }catch(Exception e){
  3653.                         msgDiag.logStartupError(e,"Avvio timer (thread) '"+TimerGestoreChiaviPDND.ID_MODULO+"'");
  3654.                     }
  3655.                    
  3656.                     try{
  3657.                         OpenSPCoop2Startup.this.threadGestoreCacheChiaviPDND =
  3658.                                 new TimerGestoreCacheChiaviPDND(propertiesReader.getGestoreChiaviPDNDcacheKeysTimerIntervalloSecondi(), listRemoteConfig);
  3659.                         OpenSPCoop2Startup.this.threadGestoreCacheChiaviPDND.start();
  3660.                         TimerGestoreCacheChiaviPDNDLib.setState( TimerState.ENABLED );
  3661.                     }catch(Exception e){
  3662.                         msgDiag.logStartupError(e,"Avvio timer (thread) '"+TimerGestoreCacheChiaviPDND.ID_MODULO+"'");
  3663.                     }
  3664.                 }
  3665.                 else {
  3666.                     msgDiag.setPrefixMsgPersonalizzati(MsgDiagnosticiProperties.MSG_DIAG_TIMER_GESTORE_CHIAVI_PDND);
  3667.                    
  3668.                     msgDiag.addKeyword(CostantiPdD.KEY_TIMER, TimerGestoreChiaviPDND.ID_MODULO);
  3669.                     msgDiag.addKeyword(CostantiPdD.KEY_REMOTE_STORE, "-");
  3670.                     msgDiag.logPersonalizzato("disabilitato");
  3671.                    
  3672.                     msgDiag.addKeyword(CostantiPdD.KEY_TIMER, TimerGestoreCacheChiaviPDND.ID_MODULO);
  3673.                     msgDiag.addKeyword(CostantiPdD.KEY_REMOTE_STORE, "-");
  3674.                     msgDiag.logPersonalizzato("disabilitato");
  3675.                    
  3676.                     msgDiag.setPrefixMsgPersonalizzati(null);
  3677.                 }
  3678.                
  3679.             }
  3680.            
  3681.            
  3682.            
  3683.            
  3684.            
  3685.            
  3686.             /* ------------ Avvia il thread per la gestione delle operazioni remote in un cluster dinamico ------------ */
  3687.            
  3688.             if(propertiesReader.isProxyReadJMXResourcesEnabled() && propertiesReader.isProxyReadJMXResourcesAsyncProcessByTimer()) {
  3689.                
  3690.                 OpenSPCoop2Startup.this.threadGestoreOperazioniRemoteEnabled = true;
  3691.                
  3692.                 try{
  3693.                     OpenSPCoop2Startup.this.threadGestoreOperazioniRemote =
  3694.                             new TimerGestoreOperazioniRemote(propertiesReader.getProxyReadJMXResourcesAsyncProcessByTimerCheckInterval());
  3695.                     OpenSPCoop2Startup.this.threadGestoreOperazioniRemote.start();
  3696.                     TimerGestoreOperazioniRemoteLib.setState( TimerState.ENABLED );
  3697.                 }catch(Exception e){
  3698.                     msgDiag.logStartupError(e,"Avvio timer (thread) '"+TimerGestoreOperazioniRemote.ID_MODULO+"'");
  3699.                 }
  3700.                
  3701.                 try{
  3702.                     OpenSPCoop2Startup.this.threadSvecchiamentoOperazioniRemote =
  3703.                             new TimerSvecchiamentoOperazioniRemote(propertiesReader.getProxyReadJMXResourcesAsyncProcessByTimerCheckOldRecordInterval());
  3704.                     OpenSPCoop2Startup.this.threadSvecchiamentoOperazioniRemote.start();
  3705.                     TimerSvecchiamentoOperazioniRemoteLib.setState( TimerState.ENABLED );
  3706.                 }catch(Exception e){
  3707.                     msgDiag.logStartupError(e,"Avvio timer (thread) '"+TimerSvecchiamentoOperazioniRemote.ID_MODULO+"'");
  3708.                 }
  3709.             }
  3710.             else {
  3711.                 msgDiag.setPrefixMsgPersonalizzati(MsgDiagnosticiProperties.MSG_DIAG_TIMER_GESTORE_OPERAZIONI_ASINCRONE);
  3712.                
  3713.                 msgDiag.addKeyword(CostantiPdD.KEY_TIMER, TimerGestoreOperazioniRemote.ID_MODULO);
  3714.                 msgDiag.logPersonalizzato("disabilitato");
  3715.                
  3716.                 msgDiag.setPrefixMsgPersonalizzati(MsgDiagnosticiProperties.MSG_DIAG_TIMER_SVECCHIAMENTO_OPERAZIONI_ASINCRONE);
  3717.                
  3718.                 msgDiag.addKeyword(CostantiPdD.KEY_TIMER, TimerSvecchiamentoOperazioniRemote.ID_MODULO);
  3719.                 msgDiag.logPersonalizzato("disabilitato");
  3720.                
  3721.                 msgDiag.setPrefixMsgPersonalizzati(null);
  3722.             }
  3723.            
  3724.            
  3725.            
  3726.            
  3727.             /* ------------ Avvia il thread per la gestione Stateful delle transazioni ------------ */
  3728.             Logger forceLogTransazioniStateful = OpenSPCoop2Logger.getLoggerOpenSPCoopTransazioniStateful(true);
  3729.             try{
  3730.                 boolean debug = propertiesReader.isTransazioniStatefulDebug();
  3731.                
  3732.                 Logger logTransazioniStateful = OpenSPCoop2Logger.getLoggerOpenSPCoopTransazioniStateful(debug);
  3733.                            
  3734.                 if(propertiesReader.isTransazioniStatefulEnabled()){
  3735.                     if(debug)
  3736.                         logTransazioniStateful.debug("Avvio inizializzazione thread per gestione transazioni stateful ...");
  3737.                     OpenSPCoop2Startup.this.threadRepositoryStateful = new TimerRepositoryStatefulThread();
  3738.                     OpenSPCoop2Startup.this.threadRepositoryStateful.start();
  3739.                     TimerRepositoryStatefulThread.setSTATE( TimerState.ENABLED );
  3740.                     forceLogTransazioniStateful.info("Thread per la gestione transazioni stateful avviato correttamente");
  3741.                 }
  3742.                 else{
  3743.                     forceLogTransazioniStateful.info("Thread per la gestione transazioni stateful disabilitato");
  3744.                 }
  3745.            
  3746.             }catch(Exception e){
  3747.                 String msgError = "Inizializzazione thread per la gestione transazioni stateful non riuscita: "+e.getMessage();
  3748.                 forceLogTransazioniStateful.error(msgError,e);
  3749.                 msgDiag.logStartupError(e,"Inizializzazione Gesotre Transazioni Stateful");
  3750.                 return;
  3751.             }
  3752.            
  3753.            
  3754.            
  3755.            
  3756.             /* ------------ Avvia il thread per il Recovery FileSystem ------------ */
  3757.             Logger forceLogRecoveryFileSystem = OpenSPCoop2Logger.getLoggerOpenSPCoopFileSystemRecovery(true);
  3758.             try{
  3759.                 boolean debug = propertiesReader.isFileSystemRecoveryDebug();
  3760.                
  3761.                 Logger logRecoveryFS = OpenSPCoop2Logger.getLoggerOpenSPCoopFileSystemRecovery(debug);
  3762.                            
  3763.                 if(propertiesReader.isFileSystemRecoveryTimerEnabled()){
  3764.                     if(debug)
  3765.                         logRecoveryFS.debug("Avvio inizializzazione thread per recovery da file system ...");
  3766.                     OpenSPCoop2Startup.this.threadFileSystemRecovery = new TimerFileSystemRecoveryThread(logRecoveryFS,
  3767.                             OpenSPCoop2Logger.getLoggerOpenSPCoopFileSystemRecoverySql(debug));
  3768.                     OpenSPCoop2Startup.this.threadFileSystemRecovery.start();
  3769.                     forceLogRecoveryFileSystem.info("Thread per la gestione transazioni stateful avviato correttamente");
  3770.                     TimerFileSystemRecoveryThread.setSTATE( TimerState.ENABLED );
  3771.                 }
  3772.                 else{
  3773.                     forceLogRecoveryFileSystem.info("Thread per il recovery da file system disabilitato");
  3774.                 }
  3775.            
  3776.             }catch(Exception e){
  3777.                 String msgError = "Inizializzazione thread per il recovery da file system non riuscita: "+e.getMessage();
  3778.                 forceLogRecoveryFileSystem.error(msgError,e);
  3779.                 msgDiag.logStartupError(e,"Inizializzazione Recovery da FileSystem");
  3780.                 return;
  3781.             }
  3782.            
  3783.            
  3784.            
  3785.    
  3786.            
  3787.             /* ------------ Eventi (ed in oltre avvia il thread) ------------ */
  3788.             Logger forceLogEventi = OpenSPCoop2Logger.getLoggerOpenSPCoopEventi(true);
  3789.             try{
  3790.                 if(propertiesReader.isEventiEnabled()){
  3791.                     OpenSPCoop2Startup.this.gestoreEventi = GestoreEventi.getInstance();
  3792.                     boolean debugEventi = propertiesReader.isEventiDebug();
  3793.                     Logger logEventi = OpenSPCoop2Logger.getLoggerOpenSPCoopEventi(debugEventi);
  3794.                    
  3795.                     if(propertiesReader.isEventiRegistrazioneStatoPorta()){
  3796.                         Evento evento = new Evento();
  3797.                         evento.setTipo(TipoEvento.STATO_GATEWAY.getValue());
  3798.                         evento.setCodice(CodiceEventoStatoGateway.START.getValue());
  3799.                         evento.setSeverita(SeveritaConverter.toIntValue(TipoSeverita.INFO));
  3800.                         evento.setClusterId(clusterID);
  3801.                         OpenSPCoop2Startup.this.gestoreEventi.log(evento);
  3802.                     }
  3803.                    
  3804.                     // Timer
  3805.                     if(propertiesReader.isEventiTimerEnabled()){
  3806.                         try{
  3807.                             if(debugEventi)
  3808.                                 logEventi.debug("Avvio inizializzazione thread per Eventi ...");
  3809.                             OpenSPCoop2Startup.this.threadEventi = new TimerEventiThread(logEventi);
  3810.                             OpenSPCoop2Startup.this.threadEventi.start();
  3811.                             TimerEventiThread.setSTATE( TimerState.ENABLED );
  3812.                             forceLogEventi.info("Thread per gli Eventi avviato correttamente");
  3813.                         }catch(Exception e){
  3814.                             throw new HandlerException("Avvio timer degli eventi fallito: "+e.getMessage(),e);
  3815.                         }
  3816.                     }
  3817.                     else{
  3818.                         forceLogEventi.info("Thread per gli Eventi disabilitato");
  3819.                     }
  3820.                 }
  3821.             }catch(Exception e){
  3822.                 String msgError = "Inizializzazione gestore eventi: "+e.getMessage();
  3823.                 forceLogEventi.error(msgError,e);
  3824.                 msgDiag.logStartupError(e,"Inizializzazione GestoreEventi");
  3825.                 return;
  3826.             }
  3827.            
  3828.             /* ------------ Evento start per ControlloTraffico ------------ */
  3829.             try{
  3830.                 if(propertiesReader.isControlloTrafficoEnabled() && propertiesReader.isAllarmiEnabled()) {
  3831.                    
  3832.                     ConfigurazioneGatewayControlloTraffico config = propertiesReader.getConfigurazioneControlloTraffico();
  3833.                     if(config.isNotifierEnabled()) {
  3834.                    
  3835.                         INotify notifier = config.getNotifier();
  3836.                         if(notifier.isNotifichePassiveAttive()) {
  3837.                            
  3838.                             boolean debug = propertiesReader.isAllarmiDebug();
  3839.                             notifier.notificaGatewayRiavviato(OpenSPCoop2Logger.getLoggerOpenSPCoopAllarmi(debug), debug);
  3840.                            
  3841.                         }
  3842.                     }
  3843.                 }
  3844.             }catch(Exception e){
  3845.                 String msgError = "Segnalazione gateway ripartito al controllo del traffico non riuscita: "+e.getMessage();
  3846.                 forceLogEventi.error(msgError,e);
  3847.                 msgDiag.logStartupError(e,"Segnalazione GovWayStarted ControlloTraffico");
  3848.                 return;
  3849.             }
  3850.                    
  3851.            
  3852.            
  3853.            
  3854.            
  3855.            
  3856.             /*----------- Inizializzazione Thread per Configurazione Cluster Dinamica --------------*/
  3857.             try{
  3858.                 boolean rateLimitingGestioneCluster = false;
  3859.                 if(propertiesReader.isControlloTrafficoEnabled()) {
  3860.                     rateLimitingGestioneCluster = GestorePolicyAttive.isAttivo(PolicyGroupByActiveThreadsType.LOCAL_DIVIDED_BY_NODES);
  3861.                 }
  3862.                 if(propertiesReader.isClusterDinamico() || rateLimitingGestioneCluster) {  
  3863.                     startTimerClusterDinamicoThread();
  3864.                 }
  3865.             }catch(Exception e){
  3866.                 this.logError("Riscontrato errore durante l'inizializzazione del thread che aggiorna il cluster dinamico: "+e.getMessage(),e);
  3867.                 return;
  3868.             }
  3869.            
  3870.            
  3871.            
  3872.            
  3873.             /*----------- Buffer UUID --------------*/
  3874.             try{
  3875.                 if(UniqueIdentifierManager.isBufferSupported() && propertiesReader.getIDManagerBufferSize()>0) {
  3876.                     UniversallyUniqueIdentifierProducer.initialize(propertiesReader.getIDManagerBufferSize(), OpenSPCoop2Logger.getLoggerOpenSPCoopTimers());
  3877.                     OpenSPCoop2Startup.this.universallyUniqueIdentifierProducer = UniversallyUniqueIdentifierProducer.getInstance();
  3878.                     OpenSPCoop2Startup.this.universallyUniqueIdentifierProducer.start();
  3879.                     OpenSPCoop2Startup.logStartupInfo("Thread per la produzione di un buffer di uuid avviato correttamente");
  3880.                 }
  3881.             }catch(Exception e){
  3882.                 this.logError("Riscontrato errore durante l'inizializzazione del thread che produce e mantiene in un buffer gli uuid: "+e.getMessage(),e);
  3883.                 return;
  3884.             }
  3885.            
  3886.            
  3887.            
  3888.            
  3889.             /* ----------- Inizializzazione Cache Cleaner ------------ */
  3890.             try{
  3891.                 GestoreCacheCleaner.initialize();
  3892.             }catch(Exception e){
  3893.                 this.logError("Riscontrato errore durante l'inizializzazione del ripulitore delle cache: "+e.getMessage(),e);
  3894.                 return;
  3895.             }
  3896.            
  3897.            
  3898.            
  3899.            

  3900.             /* ------------ Jminix StandaloneMiniConsole  ------------ */
  3901.             if(propertiesReader.getPortJminixConsole()!=null){
  3902.                 try{
  3903.                     jminixStandaloneConsole = new StandaloneMiniConsole(propertiesReader.getPortJminixConsole());
  3904.                     log.info("JminixStandaloneConsole correttamente avviata");
  3905.                     logCore.info("JminixStandaloneConsole correttamente avviata");
  3906.                 }catch(Throwable e){
  3907.                     logCore.error("Errore durante l'avvio della jminixStandaloneConsole: "+e.getMessage(),e);
  3908.                     msgDiag.logStartupError(e,"Inizializzazione JminixStandaloneConsole");
  3909.                 }
  3910.             }
  3911.            
  3912.            
  3913.            




  3914.             /* ------------ OpenSPCoop startup terminato  ------------ */
  3915.             long endDate = System.currentTimeMillis();
  3916.             long secondStarter = (endDate - OpenSPCoop2Startup.this.startDate) / 1000;
  3917.             msgDiag.setPrefixMsgPersonalizzati(MsgDiagnosticiProperties.MSG_DIAG_OPENSPCOOP_STARTUP);
  3918.             msgDiag.addKeyword(CostantiPdD.KEY_VERSIONE_PORTA, propertiesReader.getPddDetailsForLog());
  3919.             msgDiag.addKeyword(CostantiPdD.KEY_TEMPO_AVVIO, secondStarter+" secondi");
  3920.             OpenSPCoop2Startup.logStartupInfo(propertiesReader.getPddDetailsForLog()+" avviata correttamente in "+secondStarter+" secondi.");
  3921.             if(OpenSPCoop2Logger.isLoggerOpenSPCoopConsoleStartupAgganciatoLog()){
  3922.                 // per farlo finire anche sul server.log
  3923.                 System.out.println(propertiesReader.getPddDetailsForLog()+" avviata correttamente in "+secondStarter+" secondi.");
  3924.             }
  3925.             msgDiag.logPersonalizzato("pdd");
  3926.             MsgDiagnostico msgIM = MsgDiagnostico.newInstance(IntegrationManager.ID_MODULO);
  3927.             msgIM.setPrefixMsgPersonalizzati(MsgDiagnosticiProperties.MSG_DIAG_OPENSPCOOP_STARTUP);
  3928.             msgIM.addKeyword(CostantiPdD.KEY_VERSIONE_PORTA, propertiesReader.getPddDetailsForLog());
  3929.             msgIM.addKeyword(CostantiPdD.KEY_TEMPO_AVVIO, secondStarter+" secondi");
  3930.             msgIM.logPersonalizzato("IntegrationManager");
  3931.            

  3932.         }

  3933.     }
  3934.    
  3935.     private static void setSystemProperties(String propName, String propValue) {
  3936.         System.setProperty(propName, propValue);
  3937.         OpenSPCoop2Startup.logStartupInfo("Hazelcast - '"+propName+"': "+System.getProperty(propName));
  3938.     }
  3939.    
  3940.     public static void startTimerClusterDinamicoThread() throws Exception {
  3941.         if(OpenSPCoop2Startup.threadClusterDinamico == null) {
  3942.             initTimerClusterDinamicoThread();
  3943.         }
  3944.     }
  3945.     private static synchronized void initTimerClusterDinamicoThread() throws Exception {
  3946.         if(OpenSPCoop2Startup.threadClusterDinamico == null) {
  3947.             Logger forceLogEventi = OpenSPCoop2Logger.getLoggerOpenSPCoopEventi(true);
  3948.             OpenSPCoop2Startup.threadClusterDinamico = new TimerClusterDinamicoThread(OpenSPCoop2Logger.getLoggerOpenSPCoopTimers());
  3949.             OpenSPCoop2Startup.threadClusterDinamico.start();
  3950.             TimerClusterDinamicoThread.setSTATE( TimerState.ENABLED );
  3951.             forceLogEventi.info("Thread per l'aggiornamento del cluster avviato correttamente");
  3952.         }
  3953.     }
  3954.    
  3955.     public static boolean isStartedTimerClusteredRateLimitingLocalCache() {
  3956.         return OpenSPCoop2Startup.timerClusteredRateLimitingLocalCache!=null;
  3957.     }
  3958.     public static void startTimerClusteredRateLimitingLocalCache(GestorePolicyAttiveInMemory gestore) throws Exception {
  3959.         if(OpenSPCoop2Startup.timerClusteredRateLimitingLocalCache == null) {
  3960.             initTimerClusteredRateLimitingLocalCache(gestore);
  3961.         }
  3962.     }
  3963.     private static synchronized void initTimerClusteredRateLimitingLocalCache(GestorePolicyAttiveInMemory gestore) throws Exception {
  3964.         if(OpenSPCoop2Startup.timerClusteredRateLimitingLocalCache == null) {
  3965.             OpenSPCoop2Properties properties = OpenSPCoop2Properties.getInstance();
  3966.             Logger logControlloTraffico = OpenSPCoop2Logger.getLoggerOpenSPCoopControlloTraffico(true);//properties.isControlloTrafficoDebug());
  3967.             OpenSPCoop2Startup.timerClusteredRateLimitingLocalCache = new TimerClusteredRateLimitingLocalCache(OpenSPCoop2Logger.getLoggerOpenSPCoopTimers(), gestore);
  3968.             OpenSPCoop2Startup.timerClusteredRateLimitingLocalCache.setTimeout(properties.getControlloTrafficoGestorePolicyInMemoryHazelcastLocalCacheTimerUpdate());
  3969.             OpenSPCoop2Startup.timerClusteredRateLimitingLocalCache.start();
  3970.             logControlloTraffico.info("Thread per l'aggiornamento della LocalCache tramite Hazelcast avviato correttamente");
  3971.         }
  3972.     }
  3973.    
  3974.    
  3975.     /**
  3976.      * Undeploy dell'applicazione WEB di OpenSPCoop
  3977.      *
  3978.      * @param sce Servlet Context Event
  3979.      *
  3980.      */
  3981.     @Override
  3982.     public void contextDestroyed(ServletContextEvent sce) {

  3983.         OpenSPCoop2Startup.setContextDestroyed(true);
  3984.        
  3985.         OpenSPCoop2Properties properties = null;
  3986.         try {
  3987.             properties = OpenSPCoop2Properties.getInstance();
  3988.         }catch(Throwable e){
  3989.             // ignore
  3990.         }
  3991.        
  3992.         // ID Cluster
  3993.         try{
  3994.             if(OpenSPCoop2Startup.threadClusterDinamico!=null){
  3995.                 OpenSPCoop2Startup.threadClusterDinamico.setStop(true);
  3996.             }
  3997.         }catch(Throwable e){
  3998.             // ignore
  3999.         }
  4000.         try{
  4001.             boolean rateLimitingGestioneCluster = false;
  4002.             if(properties!=null && properties.isControlloTrafficoEnabled()) {
  4003.                 rateLimitingGestioneCluster = GestorePolicyAttive.isAttivo(PolicyGroupByActiveThreadsType.LOCAL_DIVIDED_BY_NODES);
  4004.             }
  4005.             if( (properties!=null && properties.isClusterDinamico()) || rateLimitingGestioneCluster) {  
  4006.                 DynamicClusterManager.getInstance().unregister(OpenSPCoop2Startup.log);
  4007.             }
  4008.         }catch(Throwable e){
  4009.             // ignore
  4010.         }
  4011.        
  4012.        
  4013.         // Eventi
  4014.         try{
  4015.             if(properties!=null) {
  4016.                 String clusterID = properties.getClusterId(false);
  4017.                 boolean debugEventi = properties.isEventiDebug();
  4018.                 Logger logEventi = OpenSPCoop2Logger.getLoggerOpenSPCoopEventi(debugEventi);
  4019.                 Evento eventoShutdown = null;
  4020.                 try{
  4021.                     if(OpenSPCoop2Startup.this.gestoreEventi!=null){
  4022.                         if(properties.isEventiRegistrazioneStatoPorta()){
  4023.                             eventoShutdown = new Evento();
  4024.                             eventoShutdown.setTipo(TipoEvento.STATO_GATEWAY.getValue());
  4025.                             eventoShutdown.setCodice(CodiceEventoStatoGateway.STOP.getValue());
  4026.                             eventoShutdown.setSeverita(SeveritaConverter.toIntValue(TipoSeverita.INFO));
  4027.                             eventoShutdown.setClusterId(clusterID);
  4028.                             OpenSPCoop2Startup.this.gestoreEventi.log(eventoShutdown,true);
  4029.                         }
  4030.                     }
  4031.                 }catch(Exception e){
  4032.                     // L'errore puo' avvenire poiche' lo shutdown puo' anche disattivare il datasource
  4033.                     logEventi.debug("Errore durante la segnalazione di shutdown ('Emissione Evento'): "+e.getMessage(),e);
  4034.                     if(eventoShutdown!=null){
  4035.                         try{
  4036.                             if(eventoShutdown.getOraRegistrazione()==null){
  4037.                                 eventoShutdown.setOraRegistrazione(DateManager.getDate());
  4038.                             }
  4039.                             ByteArrayOutputStream bout = new ByteArrayOutputStream();
  4040.                             eventoShutdown.writeTo(bout, WriteToSerializerType.XML_JAXB);
  4041.                             bout.flush();
  4042.                             bout.close();
  4043.                             FileSystemSerializer.getInstance().registraEvento(bout.toByteArray(), eventoShutdown.getOraRegistrazione());
  4044.                         }catch(Exception eSerializer){
  4045.                             logEventi.error("Errore durante la registrazione su file system dell'evento: "+eSerializer.getMessage(),eSerializer);
  4046.                         }
  4047.                     }
  4048.                 }
  4049.    
  4050.                 if(properties.isEventiTimerEnabled()){
  4051.                     try{    
  4052.                         if(debugEventi)
  4053.                             logEventi.debug("Recupero thread per gli Eventi ...");
  4054.                         if(OpenSPCoop2Startup.this.threadEventi!=null){
  4055.                             OpenSPCoop2Startup.this.threadEventi.setStop(true);
  4056.                             if(debugEventi)
  4057.                                 logEventi.debug("Richiesto stop al thread per gli Eventi");
  4058.                         }else{
  4059.                             throw new CoreException("Thread per gli Eventi non trovato");
  4060.                         }
  4061.                     }catch(Exception e){
  4062.                         if(logEventi!=null){
  4063.                             if(debugEventi)
  4064.                                 logEventi.error("Errore durante la gestione dell'exit (ThreadEventi): "+e.getMessage(),e);
  4065.                         }
  4066.                     }
  4067.                 }
  4068.             }
  4069.         }catch(Throwable e){
  4070.             // ignore
  4071.         }
  4072.        
  4073.         // Recovery FileSystem
  4074.         try {
  4075.             if(properties!=null && properties.isFileSystemRecoveryTimerEnabled()){
  4076.                 boolean debugRecoveryFileSystem = properties.isFileSystemRecoveryDebug();
  4077.                 Logger logRecoveryFileSystem = OpenSPCoop2Logger.getLoggerOpenSPCoopFileSystemRecovery(debugRecoveryFileSystem);
  4078.                 if(debugRecoveryFileSystem)
  4079.                     logRecoveryFileSystem.debug("Recupero thread per il recovery da file system ...");
  4080.                 if(OpenSPCoop2Startup.this.threadFileSystemRecovery!=null){
  4081.                     OpenSPCoop2Startup.this.threadFileSystemRecovery.setStop(true);
  4082.                     if(debugRecoveryFileSystem)
  4083.                         logRecoveryFileSystem.debug("Richiesto stop al thread per il recovery da file system");
  4084.                 }else{
  4085.                     throw new CoreException("Thread per il recovery da file system non trovato");
  4086.                 }  
  4087.             }
  4088.         }catch(Throwable e){
  4089.             // ignore
  4090.         }
  4091.        
  4092.         // GestoreTransazioniStateful
  4093.         try {
  4094.             if(properties!=null && properties.isTransazioniStatefulEnabled()){
  4095.                 boolean debugTransazioniStateful = properties.isTransazioniStatefulDebug();
  4096.                 Logger logTransazioniStateful = OpenSPCoop2Logger.getLoggerOpenSPCoopTransazioniStateful(debugTransazioniStateful);
  4097.                 if(debugTransazioniStateful)
  4098.                     logTransazioniStateful.debug("Recupero thread per la gestione delle transazioni stateful ...");
  4099.                 if(OpenSPCoop2Startup.this.threadRepositoryStateful!=null){
  4100.                     OpenSPCoop2Startup.this.threadRepositoryStateful.setStop(true);
  4101.                     if(debugTransazioniStateful)
  4102.                         logTransazioniStateful.debug("Richiesto stop al thread per la gestione delle transazioni stateful");
  4103.                 }else{
  4104.                     throw new CoreException("Thread per la gestione delle transazioni stateful non trovato");
  4105.                 }  
  4106.             }
  4107.         }catch(Throwable e){
  4108.             // ignore
  4109.         }

  4110.         // Statistiche
  4111.         try{
  4112.             if(properties!=null && properties.isStatisticheGenerazioneEnabled()){
  4113.                 boolean debugStatistiche = properties.isStatisticheGenerazioneDebug();
  4114.                
  4115.                 Logger logStatisticheOrarie = OpenSPCoop2Logger.getLoggerOpenSPCoopStatistiche(TipoIntervalloStatistico.STATISTICHE_ORARIE, debugStatistiche);
  4116.                 if(debugStatistiche)
  4117.                     logStatisticheOrarie.debug("Recupero thread per la generazione delle statistiche orarie ...");
  4118.                 if(OpenSPCoop2Startup.this.threadGenerazioneStatisticheOrarie!=null){
  4119.                     OpenSPCoop2Startup.this.threadGenerazioneStatisticheOrarie.setStop(true);
  4120.                     if(debugStatistiche)
  4121.                         logStatisticheOrarie.debug("Richiesto stop al thread per la generazione delle statistiche orarie");
  4122.                 }else{
  4123.                     if(properties.isStatisticheGenerazioneBaseOrariaEnabled()) {
  4124.                         throw new CoreException("Thread per la generazione delle statistiche orarie non trovato");
  4125.                     }
  4126.                 }  
  4127.                
  4128.                 Logger logStatisticheGiornaliere = OpenSPCoop2Logger.getLoggerOpenSPCoopStatistiche(TipoIntervalloStatistico.STATISTICHE_GIORNALIERE, debugStatistiche);
  4129.                 if(debugStatistiche)
  4130.                     logStatisticheGiornaliere.debug("Recupero thread per la generazione delle statistiche giornaliere ...");
  4131.                 if(OpenSPCoop2Startup.this.threadGenerazioneStatisticheGiornaliere!=null){
  4132.                     OpenSPCoop2Startup.this.threadGenerazioneStatisticheGiornaliere.setStop(true);
  4133.                     if(debugStatistiche)
  4134.                         logStatisticheGiornaliere.debug("Richiesto stop al thread per la generazione delle statistiche giornaliere");
  4135.                 }else{
  4136.                     if(properties.isStatisticheGenerazioneBaseGiornalieraEnabled()) {
  4137.                         throw new CoreException("Thread per la generazione delle statistiche giornaliere non trovato");
  4138.                     }
  4139.                 }
  4140.                
  4141.                 Logger logStatisticheSettimanali = OpenSPCoop2Logger.getLoggerOpenSPCoopStatistiche(TipoIntervalloStatistico.STATISTICHE_SETTIMANALI, debugStatistiche);
  4142.                 if(debugStatistiche)
  4143.                     logStatisticheSettimanali.debug("Recupero thread per la generazione delle statistiche settimanali ...");
  4144.                 if(OpenSPCoop2Startup.this.threadGenerazioneStatisticheSettimanali!=null){
  4145.                     OpenSPCoop2Startup.this.threadGenerazioneStatisticheSettimanali.setStop(true);
  4146.                     if(debugStatistiche)
  4147.                         logStatisticheSettimanali.debug("Richiesto stop al thread per la generazione delle statistiche settimanali");
  4148.                 }else{
  4149.                     if(properties.isStatisticheGenerazioneBaseSettimanaleEnabled()) {
  4150.                         throw new CoreException("Thread per la generazione delle statistiche settimanali non trovato");
  4151.                     }
  4152.                 }
  4153.                
  4154.                 Logger logStatisticheMensili = OpenSPCoop2Logger.getLoggerOpenSPCoopStatistiche(TipoIntervalloStatistico.STATISTICHE_MENSILI, debugStatistiche);
  4155.                 if(debugStatistiche)
  4156.                     logStatisticheMensili.debug("Recupero thread per la generazione delle statistiche mensili ...");
  4157.                 if(OpenSPCoop2Startup.this.threadGenerazioneStatisticheMensili!=null){
  4158.                     OpenSPCoop2Startup.this.threadGenerazioneStatisticheMensili.setStop(true);
  4159.                     if(debugStatistiche)
  4160.                         logStatisticheMensili.debug("Richiesto stop al thread per la generazione delle statistiche mensili");
  4161.                 }else{
  4162.                     if(properties.isStatisticheGenerazioneBaseMensileEnabled()) {
  4163.                         throw new CoreException("Thread per la generazione delle statistiche mensili non trovato");
  4164.                     }
  4165.                 }
  4166.                
  4167.                 Logger logPdndTracciamentoGenerazione = OpenSPCoop2Logger.getLoggerOpenSPCoopStatistiche(TipoIntervalloStatistico.PDND_GENERAZIONE_TRACCIAMENTO, debugStatistiche);
  4168.                 if(debugStatistiche)
  4169.                     logPdndTracciamentoGenerazione.debug("Recupero thread per la generazione dei tracciamenti PDND ...");
  4170.                 if(OpenSPCoop2Startup.this.threadPdndTracciamentoGenerazione!=null){
  4171.                     OpenSPCoop2Startup.this.threadPdndTracciamentoGenerazione.setStop(true);
  4172.                     if(debugStatistiche)
  4173.                         logPdndTracciamentoGenerazione.debug("Richiesto stop al thread per la generazione dei tracciamenti PDND");
  4174.                 }else{
  4175.                     if(properties.isStatistichePdndTracciamentoGenerazioneEnabled()) {
  4176.                         throw new CoreException("Thread per la generazione dei tracciamenti PDND non trovato");
  4177.                     }
  4178.                 }
  4179.                
  4180.                 Logger logPdndTracciamentoPubblicazione = OpenSPCoop2Logger.getLoggerOpenSPCoopStatistiche(TipoIntervalloStatistico.PDND_PUBBLICAZIONE_TRACCIAMENTO, debugStatistiche);
  4181.                 if(debugStatistiche)
  4182.                     logPdndTracciamentoPubblicazione.debug("Recupero thread per la pubblicazione dei tracciamenti PDND ...");
  4183.                 if(OpenSPCoop2Startup.this.threadPdndTracciamentoPubblicazione!=null){
  4184.                     OpenSPCoop2Startup.this.threadPdndTracciamentoPubblicazione.setStop(true);
  4185.                     if(debugStatistiche)
  4186.                         logPdndTracciamentoPubblicazione.debug("Richiesto stop al thread per la pubblicazione dei tracciamenti PDND");
  4187.                 }else{
  4188.                     if(properties.isStatistichePdndTracciamentoPubblicazioneEnabled()) {
  4189.                         throw new CoreException("Thread per la pubblicazione dei tracciamenti PDND non trovato");
  4190.                     }
  4191.                 }
  4192.                
  4193.             }
  4194.         }catch (Throwable e) {
  4195.             // ignore
  4196.         }
  4197.        
  4198.         // Timer per la gestione delle chiavi da PDND
  4199.        
  4200.         try{
  4201.             if(properties!=null && OpenSPCoop2Startup.this.threadGestoreChiaviPDNDEnabled){
  4202.                 boolean debug = properties.isGestoreChiaviPDNDDebug();
  4203.            
  4204.                 Logger logGestorePDND = OpenSPCoop2Logger.getLoggerOpenSPCoopGestoreChiaviPDND(debug);
  4205.                 if(debug)
  4206.                     logGestorePDND.debug("Recupero thread per la gestione delle chiavi PDND ...");
  4207.                 if(OpenSPCoop2Startup.this.threadGestoreChiaviPDND!=null){
  4208.                     OpenSPCoop2Startup.this.threadGestoreChiaviPDND.setStop(true);
  4209.                     if(debug)
  4210.                         logGestorePDND.debug("Richiesto stop al thread per la gestione delle chiavi PDND");
  4211.                 }else{
  4212.                     throw new CoreException("Thread per la gestione delle chiavi PDND non trovato");
  4213.                 }  
  4214.             }
  4215.         }catch (Throwable e) {
  4216.             // ignore
  4217.         }
  4218.         try{
  4219.             if(properties!=null && OpenSPCoop2Startup.this.threadGestoreChiaviPDNDEnabled){
  4220.                 boolean debug = properties.isGestoreChiaviPDNDDebug();
  4221.            
  4222.                 Logger logGestorePDND = OpenSPCoop2Logger.getLoggerOpenSPCoopGestoreChiaviPDND(debug);
  4223.                 if(debug)
  4224.                     logGestorePDND.debug("Recupero thread per la gestione della cache delle chiavi PDND ...");
  4225.                 if(OpenSPCoop2Startup.this.threadGestoreCacheChiaviPDND!=null){
  4226.                     OpenSPCoop2Startup.this.threadGestoreCacheChiaviPDND.setStop(true);
  4227.                     if(debug)
  4228.                         logGestorePDND.debug("Richiesto stop al thread per la gestione della cache delle chiavi PDND");
  4229.                 }else{
  4230.                     throw new CoreException("Thread per gestione della cache delle chiavi PDND non trovato");
  4231.                 }  
  4232.             }
  4233.         }catch (Throwable e) {
  4234.             // ignore
  4235.         }
  4236.        
  4237.         // Timer per la gestione delle operazioni remote in un cluster dinamico
  4238.        
  4239.         try{
  4240.             if(properties!=null && OpenSPCoop2Startup.this.threadGestoreOperazioniRemoteEnabled){
  4241.                 boolean debug = properties.isProxyReadJMXResourcesAsyncProcessByTimerDebug();
  4242.            
  4243.                 Logger logGestoreOperazioniRemote = OpenSPCoop2Logger.getLoggerOpenSPCoopGestoreOperazioniRemote(debug);
  4244.                 if(debug)
  4245.                     logGestoreOperazioniRemote.debug("Recupero thread per la gestione delle operazioni remote ...");
  4246.                 if(OpenSPCoop2Startup.this.threadGestoreOperazioniRemote!=null){
  4247.                     OpenSPCoop2Startup.this.threadGestoreOperazioniRemote.setStop(true);
  4248.                     if(debug)
  4249.                         logGestoreOperazioniRemote.debug("Richiesto stop al thread per la gestione delle operazioni remote");
  4250.                 }else{
  4251.                     throw new CoreException("Thread per la gestione delle operazioni remote non trovato");
  4252.                 }  
  4253.             }
  4254.         }catch (Throwable e) {
  4255.             // ignore
  4256.         }
  4257.         try{
  4258.             if(properties!=null && OpenSPCoop2Startup.this.threadGestoreOperazioniRemoteEnabled){
  4259.                 boolean debug = properties.isProxyReadJMXResourcesAsyncProcessByTimerDebug();
  4260.            
  4261.                 Logger logGestoreOperazioniRemote = OpenSPCoop2Logger.getLoggerOpenSPCoopGestoreOperazioniRemote(debug);
  4262.                 if(debug)
  4263.                     logGestoreOperazioniRemote.debug("Recupero thread per lo svecchiamento delle operazioni remote ...");
  4264.                 if(OpenSPCoop2Startup.this.threadSvecchiamentoOperazioniRemote!=null){
  4265.                     OpenSPCoop2Startup.this.threadSvecchiamentoOperazioniRemote.setStop(true);
  4266.                     if(debug)
  4267.                         logGestoreOperazioniRemote.debug("Richiesto stop al thread per lo svecchiamento delle operazioni remote");
  4268.                 }else{
  4269.                     throw new CoreException("Thread per lo svecchiamento delle operazioni remote non trovato");
  4270.                 }  
  4271.             }
  4272.         }catch (Throwable e) {
  4273.             // ignore
  4274.         }
  4275.        
  4276.         // ExitHandler
  4277.         try{
  4278.             ExitContext context = new ExitContext();
  4279.             context.setPddContext(this.pddContext);
  4280.             context.setLogConsole(OpenSPCoop2Startup.log);
  4281.             context.setLogCore(OpenSPCoop2Logger.getLoggerOpenSPCoopCore());
  4282.             GestoreHandlers.exit(context);
  4283.         }catch(Throwable e){
  4284.             // ignore
  4285.         }
  4286.        
  4287.         // Gestione Stato ControlloTraffico
  4288.         if(properties!=null && properties.isControlloTrafficoEnabled()){
  4289.             OutputStream out = null;
  4290.             Logger logControlloTraffico = null;
  4291.             List<PolicyGroupByActiveThreadsType> tipiGestorePolicyRateLimiting = null;
  4292.             try{
  4293.                 logControlloTraffico = OpenSPCoop2Logger.getLoggerOpenSPCoopControlloTraffico(properties.isControlloTrafficoDebug());
  4294.                 tipiGestorePolicyRateLimiting = GestorePolicyAttive.getTipiGestoriAttivi();
  4295.             }catch(Throwable e){
  4296.                 if(logControlloTraffico!=null){
  4297.                     logControlloTraffico.error("Errore durante la terminazione dei gestori delle policy di Rate Limiting: "+e.getMessage(),e);
  4298.                 }
  4299.             }
  4300.             if(tipiGestorePolicyRateLimiting!=null && !tipiGestorePolicyRateLimiting.isEmpty()) {
  4301.                 for (PolicyGroupByActiveThreadsType type : tipiGestorePolicyRateLimiting) {
  4302.                     try{
  4303.                         File fRepository = properties.getControlloTrafficoGestorePolicyFileSystemRecoveryRepository();
  4304.                         if(fRepository!=null){
  4305.                             if(fRepository.exists()==false){
  4306.                                 throw new CoreException("Directory ["+fRepository.getAbsolutePath()+"] not exists");
  4307.                             }
  4308.                             if(fRepository.isDirectory()==false){
  4309.                                 throw new CoreException("File ["+fRepository.getAbsolutePath()+"] is not directory");
  4310.                             }
  4311.                             if(fRepository.canRead()==false){
  4312.                                 throw new CoreException("File ["+fRepository.getAbsolutePath()+"] cannot read");
  4313.                             }
  4314.                             if(fRepository.canWrite()==false){
  4315.                                 throw new CoreException("File ["+fRepository.getAbsolutePath()+"] cannot write");
  4316.                             }      
  4317.                            
  4318.                             File fDati = new File(fRepository, GestorePolicyAttive.getControlloTrafficoImage(type));
  4319.                             out = new FileOutputStream(fDati, false); // se già esiste lo sovrascrive
  4320.                             GestorePolicyAttive.getInstance(type).serialize(out);
  4321.                             out.flush();
  4322.                             out.close();
  4323.                             out = null;
  4324.                            
  4325.                             boolean inizializzazioneAttiva = false;
  4326.                             // Il meccanismo di ripristino dell'immagine degli eventi non sembra funzionare
  4327.                             // Lascio comunque il codice se in futuro si desidera approfindire la questione
  4328.                             if(inizializzazioneAttiva) {
  4329.                                 fDati = new File(fRepository, GestorePolicyAttive.getControlloTrafficoEventiImage(type));
  4330.                                 NotificatoreEventi.getInstance().serialize(fDati);
  4331.                             }
  4332.                            
  4333.                         }
  4334.                     }catch(Throwable e){
  4335.                         if(logControlloTraffico!=null){
  4336.                             logControlloTraffico.error("Errore durante la terminazione dei gestori delle policy di Rate Limiting: "+e.getMessage(),e);
  4337.                         }
  4338.                     }finally{
  4339.                         try{
  4340.                             if(out!=null){
  4341.                                 out.flush();
  4342.                             }
  4343.                         }catch(Exception eClose){
  4344.                             // ignore
  4345.                         }
  4346.                         try{
  4347.                             if(out!=null){
  4348.                                 out.close();
  4349.                             }
  4350.                         }catch(Exception eClose){
  4351.                             // ignore
  4352.                         }
  4353.                     }
  4354.                 }
  4355.             }
  4356.            
  4357.             if (OpenSPCoop2Startup.timerClusteredRateLimitingLocalCache != null) {
  4358.                 OpenSPCoop2Startup.timerClusteredRateLimitingLocalCache.setStop(true);      
  4359.             }
  4360.         }
  4361.        
  4362.         // Fermo timer runtime
  4363.         if(this.serverJ2EE){
  4364.             try {
  4365.                 if(this.timerRiscontri!=null)
  4366.                     this.timerRiscontri.stop();
  4367.             } catch (Throwable e) {
  4368.                 // ignore
  4369.             }
  4370.             try {
  4371.                 if(this.timerEliminazioneMsg!=null)
  4372.                     this.timerEliminazioneMsg.stop();
  4373.             } catch (Throwable e) {
  4374.                 // ignore
  4375.             }
  4376.             try {
  4377.                 if(this.timerPuliziaMsgAnomali!=null)
  4378.                     this.timerPuliziaMsgAnomali.stop();
  4379.             } catch (Throwable e) {
  4380.                 // ignore
  4381.             }
  4382.             try {
  4383.                 if(this.timerRepositoryBuste!=null)
  4384.                     this.timerRepositoryBuste.stop();
  4385.             } catch (Throwable e) {
  4386.                 // ignore
  4387.             }
  4388.         }else{
  4389.             try{
  4390.                 if(this.threadEliminazioneMsg!=null) {
  4391.                     this.threadEliminazioneMsg.setStop(true);
  4392.                 }
  4393.             }catch (Throwable e) {
  4394.                 // ignore
  4395.             }
  4396.             try{
  4397.                 if(this.threadPuliziaMsgAnomali!=null)
  4398.                     this.threadPuliziaMsgAnomali.setStop(true);
  4399.             }catch (Throwable e) {
  4400.                 // ignore
  4401.             }
  4402.             try{
  4403.                 if(this.threadRepositoryBuste!=null)
  4404.                     this.threadRepositoryBuste.setStop(true);
  4405.             }catch (Throwable e) {
  4406.                 // ignore
  4407.             }
  4408.         }
  4409.         try{
  4410.             if(this.threadConsegnaContenutiApplicativiMap!=null && !this.threadConsegnaContenutiApplicativiMap.isEmpty()) {
  4411.                 for (String coda : this.threadConsegnaContenutiApplicativiMap.keySet()) {
  4412.                     TimerConsegnaContenutiApplicativiThread timer = this.threadConsegnaContenutiApplicativiMap.get(coda);
  4413.                     timer.setStop(true);
  4414.                 }
  4415.             }
  4416.         }catch (Throwable e) {
  4417.             // ignore
  4418.         }

  4419.         // fermo timer Monitoraggio Risorse
  4420.         try{
  4421.             if(this.timerMonitoraggioRisorse!=null)
  4422.                 this.timerMonitoraggioRisorse.setStop(true);
  4423.         }catch (Throwable e) {
  4424.             // ignore
  4425.         }

  4426.         // fermo timer Threshold
  4427.         try{
  4428.             if(this.timerThreshold!=null)
  4429.                 this.timerThreshold.setStop(true);
  4430.         }catch (Throwable e) {
  4431.             // ignore
  4432.         }

  4433.         // Rilascio risorse JMX
  4434.         if(this.gestoreRisorseJMX!=null){
  4435.             this.gestoreRisorseJMX.unregisterMBeans();
  4436.         }

  4437.         // Verifico che i timer siano conclusi prima di rilasciare i lock
  4438.         try{
  4439.             if(this.threadEventi!=null)
  4440.                 this.threadEventi.waitShutdown();
  4441.         }catch (Throwable e) {
  4442.             // ignore
  4443.         }
  4444.         try{
  4445.             if(this.threadFileSystemRecovery!=null)
  4446.                 this.threadFileSystemRecovery.waitShutdown();
  4447.         }catch (Throwable e) {
  4448.             // ignore
  4449.         }
  4450.         try{
  4451.             if(this.threadRepositoryStateful!=null)
  4452.                 this.threadRepositoryStateful.waitShutdown();
  4453.         }catch (Throwable e) {
  4454.             // ignore
  4455.         }
  4456.         try{
  4457.             if(this.threadGenerazioneStatisticheOrarie!=null)
  4458.                 this.threadGenerazioneStatisticheOrarie.waitShutdown();
  4459.         }catch (Throwable e) {
  4460.             // ignore
  4461.         }
  4462.         try{
  4463.             if(this.threadGenerazioneStatisticheGiornaliere!=null)
  4464.                 this.threadGenerazioneStatisticheGiornaliere.waitShutdown();
  4465.         }catch (Throwable e) {
  4466.             // ignore
  4467.         }
  4468.         try{
  4469.             if(this.threadGenerazioneStatisticheSettimanali!=null)
  4470.                 this.threadGenerazioneStatisticheSettimanali.waitShutdown();
  4471.         }catch (Throwable e) {
  4472.             // ignore
  4473.         }
  4474.         try{
  4475.             if(this.threadGenerazioneStatisticheMensili!=null)
  4476.                 this.threadGenerazioneStatisticheMensili.waitShutdown();
  4477.         }catch (Throwable e) {
  4478.             // ignore
  4479.         }
  4480.         if(this.serverJ2EE){ // TODO ATTESA ATTIVA CHE SI FERMINO PER J2EE
  4481.             Utilities.sleep(5000); // aspetto che i timer terminano la loro gestione.
  4482.         }
  4483.         else {
  4484.             try{
  4485.                 if(this.threadEliminazioneMsg!=null) {
  4486.                     this.threadEliminazioneMsg.waitShutdown();
  4487.                 }
  4488.             }catch (Throwable e) {
  4489.                 // ignore
  4490.             }
  4491.             try{
  4492.                 if(this.threadPuliziaMsgAnomali!=null) {
  4493.                     this.threadPuliziaMsgAnomali.waitShutdown();
  4494.                 }
  4495.             }catch (Throwable e) {
  4496.                 // ignore
  4497.             }
  4498.             try{
  4499.                 if(this.threadRepositoryBuste!=null) {
  4500.                     this.threadRepositoryBuste.waitShutdown();
  4501.                 }
  4502.             }catch (Throwable e) {
  4503.                 // ignore
  4504.             }
  4505.         }
  4506.         try{
  4507.             if(this.threadConsegnaContenutiApplicativiMap!=null && !this.threadConsegnaContenutiApplicativiMap.isEmpty()) {
  4508.                 for (String coda : this.threadConsegnaContenutiApplicativiMap.keySet()) {
  4509.                     TimerConsegnaContenutiApplicativiThread timer = this.threadConsegnaContenutiApplicativiMap.get(coda);
  4510.                     timer.waitShutdown();
  4511.                 }
  4512.             }
  4513.         }catch (Throwable e) {
  4514.             // ignore
  4515.         }
  4516.         try{
  4517.             if(this.timerMonitoraggioRisorse!=null) {
  4518.                 this.timerMonitoraggioRisorse.waitShutdown();
  4519.             }
  4520.         }catch (Throwable e) {
  4521.             // ignore
  4522.         }
  4523.         try{
  4524.             if(this.timerThreshold!=null) {
  4525.                 this.timerThreshold.waitShutdown();
  4526.             }
  4527.         }catch (Throwable e) {
  4528.             // ignore
  4529.         }
  4530.         try{
  4531.             if(OpenSPCoop2Startup.threadClusterDinamico!=null)
  4532.                 OpenSPCoop2Startup.threadClusterDinamico.waitShutdown();
  4533.         }catch (Throwable e) {
  4534.             // ignore
  4535.         }
  4536.         try{
  4537.             if(OpenSPCoop2Startup.timerClusteredRateLimitingLocalCache!=null)
  4538.                 OpenSPCoop2Startup.timerClusteredRateLimitingLocalCache.waitShutdown();
  4539.         }catch (Throwable e) {
  4540.             // ignore
  4541.         }
  4542.        
  4543.         // Rilascio lock (da fare dopo che i timer sono stati fermati)
  4544.         // L'errore puo' avvenire poiche' lo shutdown puo' anche disattivare il datasource
  4545.         boolean logErrorConnection = false;
  4546.         TimerUtils.relaseLockTimers(properties, ID_MODULO, OpenSPCoop2Logger.getLoggerOpenSPCoopTimers(), logErrorConnection);
  4547.        
  4548.         // UniversallyUniqueIdentifierProducer (fermo dopo lo stop di tutte le altre attivita)
  4549.         try{
  4550.             if(OpenSPCoop2Startup.this.universallyUniqueIdentifierProducer!=null){
  4551.                 OpenSPCoop2Startup.this.universallyUniqueIdentifierProducer.setStop(true);
  4552.                 OpenSPCoop2Startup.this.universallyUniqueIdentifierProducer.waitShutdown();
  4553.             }
  4554.         }catch(Throwable e){
  4555.             // ignore
  4556.         }
  4557.        
  4558.         // DataManger
  4559.         DateManager.close();

  4560.         // Jminix StandaloneMiniConsole
  4561.         try{
  4562.             if(jminixStandaloneConsole!=null){
  4563.                 jminixStandaloneConsole.shutdown();
  4564.             }
  4565.         }catch (Throwable e) {
  4566.             // ignore
  4567.         }

  4568.         // *** Repository plugins ***
  4569.         try{
  4570.             CorePluginLoader.close(OpenSPCoop2Logger.getLoggerOpenSPCoopCore());
  4571.         }catch(Throwable e){
  4572.             // ignore
  4573.         }
  4574.        
  4575.         // *** Hazelcast ***
  4576.         if(properties!=null && properties.isControlloTrafficoEnabled()){
  4577.             HazelcastManager.close();
  4578.         }
  4579.        
  4580.         // *** Semaphore **
  4581.         try{
  4582.             org.openspcoop2.utils.SemaphoreLock.releaseScheduledExecutorService();
  4583.         }catch(Throwable e){
  4584.             // ignore
  4585.         }
  4586.        
  4587.         // Attendo qualche secondo
  4588.         Utilities.sleep(2000);
  4589.     }



  4590. }