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.keystore.cache.RemoteStoreClientInfoCache;
  215. import org.openspcoop2.security.message.WsuIdAllocator;
  216. import org.openspcoop2.security.message.engine.MessageSecurityFactory;
  217. import org.openspcoop2.security.utils.ExternalPWCallback;
  218. import org.openspcoop2.utils.LoggerWrapperFactory;
  219. import org.openspcoop2.utils.TipiDatabase;
  220. import org.openspcoop2.utils.Utilities;
  221. import org.openspcoop2.utils.beans.WriteToSerializerType;
  222. import org.openspcoop2.utils.cache.Cache;
  223. import org.openspcoop2.utils.certificate.CertificateFactory;
  224. import org.openspcoop2.utils.certificate.byok.BYOKManager;
  225. import org.openspcoop2.utils.certificate.hsm.HSMManager;
  226. import org.openspcoop2.utils.certificate.ocsp.OCSPManager;
  227. import org.openspcoop2.utils.certificate.remote.RemoteStoreConfig;
  228. import org.openspcoop2.utils.date.DateManager;
  229. import org.openspcoop2.utils.date.DateUtils;
  230. import org.openspcoop2.utils.dch.MailcapActivationReader;
  231. import org.openspcoop2.utils.digest.MessageDigestFactory;
  232. import org.openspcoop2.utils.id.UniqueIdentifierManager;
  233. import org.openspcoop2.utils.id.UniversallyUniqueIdentifierProducer;
  234. import org.openspcoop2.utils.id.serial.InfoStatistics;
  235. import org.openspcoop2.utils.io.DumpByteArrayOutputStream;
  236. import org.openspcoop2.utils.io.notifier.unblocked.PipedUnblockedStreamFactory;
  237. import org.openspcoop2.utils.jdbc.JDBCUtilities;
  238. import org.openspcoop2.utils.json.JsonPathExpressionEngine;
  239. import org.openspcoop2.utils.json.YamlSnakeLimits;
  240. import org.openspcoop2.utils.properties.MapProperties;
  241. import org.openspcoop2.utils.random.RandomUtilities;
  242. import org.openspcoop2.utils.resources.FileSystemMkdirConfig;
  243. import org.openspcoop2.utils.resources.FileSystemUtilities;
  244. import org.openspcoop2.utils.resources.GestoreJNDI;
  245. import org.openspcoop2.utils.resources.Loader;
  246. import org.openspcoop2.utils.security.ProviderUtils;
  247. import org.openspcoop2.utils.semaphore.Semaphore;
  248. import org.openspcoop2.utils.semaphore.SemaphoreConfiguration;
  249. import org.openspcoop2.utils.semaphore.SemaphoreMapping;
  250. import org.openspcoop2.utils.xml.AbstractXMLUtils;
  251. import org.openspcoop2.utils.xml.XSDSchemaCollection;
  252. import org.slf4j.Logger;

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



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

  262. public class OpenSPCoop2Startup implements ServletContextListener {

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  373.     }

  374.     class OpenSPCoopStartupThread implements Runnable {

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

  392.         public OpenSPCoopStartupThread() {                        
  393.         }

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

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


  410.            
  411.                    
  412.            
  413.            
  414.            
  415.            

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




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

  460.            
  461.            







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


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



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

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


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










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





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

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

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





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





  1250.             /* -------------- Inizializzo DBManager --------------- */

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

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

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

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

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

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

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

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

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











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

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





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




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









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


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

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

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

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

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

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

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

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

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


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





  2224.            






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

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

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

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


  2261.            
  2262.            






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

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

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

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

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


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

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

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







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




  2426.             /* ---------------- Validazione semantica -----------------------*/

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

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

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



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

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

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

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

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


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

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



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





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






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








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

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

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

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

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

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


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






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









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









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







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




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

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




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

  3936.         }

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

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

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

  4423.         // fermo timer Monitoraggio Risorse
  4424.         try{
  4425.             if(this.timerMonitoraggioRisorse!=null)
  4426.                 this.timerMonitoraggioRisorse.setStop(true);
  4427.         }catch (Throwable e) {
  4428.             // ignore
  4429.         }

  4430.         // fermo timer Threshold
  4431.         try{
  4432.             if(this.timerThreshold!=null)
  4433.                 this.timerThreshold.setStop(true);
  4434.         }catch (Throwable e) {
  4435.             // ignore
  4436.         }

  4437.         // Rilascio risorse JMX
  4438.         if(this.gestoreRisorseJMX!=null){
  4439.             this.gestoreRisorseJMX.unregisterMBeans();
  4440.         }

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

  4564.         // Jminix StandaloneMiniConsole
  4565.         try{
  4566.             if(jminixStandaloneConsole!=null){
  4567.                 jminixStandaloneConsole.shutdown();
  4568.             }
  4569.         }catch (Throwable e) {
  4570.             // ignore
  4571.         }

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



  4594. }