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

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



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

  259. public class OpenSPCoop2Startup implements ServletContextListener {

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

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

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

  276.     /** Context della Servlet */
  277.     ServletContext servletContext;

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

  283.     /** Timer per la gestione della funzionalita' 'RiscontriScaduti' */
  284.     private TimerGestoreBusteNonRiscontrate timerRiscontri;

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

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

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

  294.     /** Gestore Threshold */
  295.     private TimerThresholdThread timerThreshold = null;

  296.     /** Gestore Monitoraggio Risorse */
  297.     private TimerMonitoraggioRisorseThread timerMonitoraggioRisorse = null;

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

  344.     /** PdDContext */
  345.     private PdDContext pddContext = new PdDContext();
  346.    
  347.     /** OpenSPCoopStartupThread */
  348.     private OpenSPCoopStartupThread th;
  349.    
  350.     /** Jminix StandaloneMiniConsole */
  351.     private static StandaloneMiniConsole jminixStandaloneConsole;

  352.     /**
  353.      * Startup dell'applicazione WEB di OpenSPCoop
  354.      *
  355.      * @param sce Servlet Context Event
  356.      *
  357.      */
  358.     @Override
  359.     public void contextInitialized(ServletContextEvent sce) {

  360.         OpenSPCoop2Startup.setContextDestroyed(false);
  361.        
  362.         this.startDate = System.currentTimeMillis();
  363.        
  364.         /* ------  Ottiene il servletContext --------*/
  365.         this.servletContext = sce.getServletContext();
  366.         this.th = new OpenSPCoopStartupThread();
  367.         new Thread(this.th).start();

  368.     }

  369.     class OpenSPCoopStartupThread implements Runnable {

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

  387.         public OpenSPCoopStartupThread() {                        
  388.         }

  389.         @Override
  390.         public void run() {

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


  405.            
  406.                    
  407.            
  408.            
  409.            
  410.            

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




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

  455.            
  456.            







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


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



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

  902.             org.openspcoop2.utils.Semaphore.setLogDebug(OpenSPCoop2Logger.getLoggerOpenSPCoopResources());
  903.            
  904.            


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










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





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

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

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





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





  1245.             /* -------------- Inizializzo DBManager --------------- */

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

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

  1267.                 if (DBManager.isInitialized()) {
  1268.                     trovato = true;
  1269.                 } else {
  1270.                     count += 10000;
  1271.                     Utilities.sleep(10000);
  1272.                 }
  1273.             }

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

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

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

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

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

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











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

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





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




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









  1566.             /* -------------- Inizializzo MsgDiagnostico -------------------- */
  1567.             MsgDiagnostico msgDiag = MsgDiagnostico.newInstance(OpenSPCoop2Startup.ID_MODULO);


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

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

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

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

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

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

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

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

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


  2200.             /* ------------- Inizializzo il sistema di Logging per gli appender personalizzati --------------- */
  2201.             boolean isInitializeAppender = false;
  2202.             isInitializeAppender = OpenSPCoop2Logger.initializeMsgDiagnosticiOpenSPCoopAppender(configurazionePdDManager.getOpenSPCoopAppenderMessaggiDiagnostici());
  2203.             if(!isInitializeAppender){
  2204.                 return;
  2205.             }
  2206.             isInitializeAppender = OpenSPCoop2Logger.initializeTracciamentoOpenSPCoopAppender(configurazionePdDManager.getOpenSPCoopAppenderTracciamento());
  2207.             if(!isInitializeAppender){
  2208.                 return;
  2209.             }
  2210.             isInitializeAppender = OpenSPCoop2Logger.initializeDumpOpenSPCoopAppender(configurazionePdDManager.getOpenSPCoopAppenderDump());
  2211.             if(!isInitializeAppender){
  2212.                 return;
  2213.             }





  2214.            






  2215.             /* -------------- Inizializzo QueueManager --------------- */
  2216.             if(OpenSPCoop2Startup.this.serverJ2EE){
  2217.                 if( CostantiConfigurazione.COMUNICAZIONE_INFRASTRUTTURALE_JMS.equals(propertiesReader.getNodeReceiver())
  2218.                         || CostantiConfigurazione.COMUNICAZIONE_INFRASTRUTTURALE_JMS.equals(propertiesReader.getNodeSender()) ){

  2219.                     // Connection Factory
  2220.                     try{
  2221.                         QueueManager.initialize(propertiesReader.getJNDIName_ConnectionFactory(),
  2222.                                 propertiesReader.getJNDIContext_ConnectionFactory());
  2223.                     }catch(Exception e){
  2224.                         msgDiag.logStartupError(e, "QueueManager.initConnectionFactory");
  2225.                         return;
  2226.                     }
  2227.                     OpenSPCoop2Startup.logStartupInfo("Inizializzazione connectionFactoryJMS ["+propertiesReader.getJNDIName_ConnectionFactory()+"] effettuata.");

  2228.                     // Code di Ricezione
  2229.                     if( CostantiConfigurazione.COMUNICAZIONE_INFRASTRUTTURALE_JMS.equals(propertiesReader.getNodeReceiver())
  2230.                     ){
  2231.                         try{
  2232.                             QueueManager.initializeQueueNodeReceiver(propertiesReader.getJNDIContext_CodeInterne());
  2233.                         }catch(Exception e){
  2234.                             msgDiag.logStartupError(e, "QueueManager.initQueueNodeReceiver");
  2235.                             return;
  2236.                         }
  2237.                         OpenSPCoop2Startup.logStartupInfo("Inizializzazione code JMS per la ricezione di messaggi nell'infrastruttura di OpenSPCoop, effettuata.");
  2238.                     }

  2239.                     // Code di Spedizione
  2240.                     //if( CostantiConfigurazione.COMUNICAZIONE_INFRASTRUTTURALE_JMS.equals(propertiesReader.getNodeSender())
  2241.                     //){
  2242.                     try{
  2243.                         QueueManager.initializeQueueNodeSender(propertiesReader.getJNDIContext_CodeInterne());
  2244.                     }catch(Exception e){
  2245.                         msgDiag.logStartupError(e, "QueueManager.initQueueNodeSender");
  2246.                         return;
  2247.                     }
  2248.                     OpenSPCoop2Startup.logStartupInfo("Inizializzazione code JMS per la spedizione di messaggi nell'infrastruttura di OpenSPCoop, effettuata.");
  2249.                 }
  2250.             }


  2251.            
  2252.            






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

  2254.             // Check configurazione registro dei Servizi
  2255.             if( configurazionePdDManager.getAccessoRegistroServizi() == null ){
  2256.                 msgDiag.logStartupError("Riscontrato errore durante la lettura dei valori associati al registro dei servizi di OpenSPCoop.", "Lettura configurazione PdD");
  2257.                 return;
  2258.             }

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

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

  2317.             // Inizializza il reader del registro dei Servizi utilizzato nella configurazione
  2318.             /**try{
  2319.                 configurazionePdDReader.initializeRegistroServiziReader();
  2320.             }catch(Exception e){
  2321.                 msgDiag.logStartupError(e,"Inizializzazione Reader per il registro dei servizi utilizzato nella configurazione");
  2322.                 return;
  2323.             }*/


  2324.            
  2325.            
  2326.            
  2327.            
  2328.            
  2329.            
  2330.            
  2331.             /* ------------ PreLoading ------------- */
  2332.            
  2333.             if(propertiesReader.getConfigPreLoadingLocale()!=null) {
  2334.                 try{
  2335.                    
  2336.                     Object oConfig = ConfigurazionePdDReader.getDriverConfigurazionePdD();
  2337.                     Object oRegistry = RegistroServiziReader.getDriverRegistroServizi().values().iterator().next();
  2338.                     if( (oConfig instanceof DriverConfigurazioneDB) && (oRegistry instanceof DriverRegistroServiziDB) ) {
  2339.                         PreLoadingConfig preLoading = new PreLoadingConfig(logCore, logCore, propertiesReader.getDefaultProtocolName(),
  2340.                                 propertiesReader.getIdentitaPortaDefault(propertiesReader.getDefaultProtocolName(), null));
  2341.                        
  2342.                         TimerLock timerLock = new TimerLock(TipoLock.STARTUP);
  2343.                         InfoStatistics semaphore_statistics = null;
  2344.                         Semaphore semaphore = null;
  2345.                         Logger logTimer = OpenSPCoop2Logger.getLoggerOpenSPCoopTimers();
  2346.                         if(propertiesReader.isTimerLockByDatabase()) {
  2347.                             semaphore_statistics = new InfoStatistics();

  2348.                             SemaphoreConfiguration config = GestoreMessaggi.newSemaphoreConfiguration(propertiesReader.getStartupLockMaxLife(),
  2349.                                     propertiesReader.getStartupLockIdleTime());

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







  2396.             // *** Repository plugins ***
  2397.             try{
  2398.                 if(propertiesReader.isConfigurazionePluginsEnabled()) {
  2399.                     CorePluginLoader.initialize(loader, OpenSPCoop2Logger.getLoggerOpenSPCoopPlugins(propertiesReader.isConfigurazionePluginsDebug()),
  2400.                             PddPluginLoader.class,
  2401.                             configurazionePdDManager.getRegistroPluginsReader(),
  2402.                             propertiesReader.getConfigurazionePluginsSeconds());
  2403.                 }
  2404.                 else {
  2405.                     CorePluginLoader.initialize(loader, OpenSPCoop2Logger.getLoggerOpenSPCoopPlugins(propertiesReader.isConfigurazionePluginsDebug()),
  2406.                             PddPluginLoader.class);
  2407.                 }
  2408.             }catch(Exception e){
  2409.                 msgDiag.logStartupError(e,"Inizializzazione plugins");
  2410.                 return;
  2411.             }
  2412.            
  2413.            
  2414.            
  2415.            




  2416.             /* ---------------- Validazione semantica -----------------------*/

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

  2454.             // Registro dei Servizi
  2455.             try{
  2456.                 RegistroServiziManager.getInstance().validazioneSemantica(true, propertiesReader.isValidazioneSemanticaRegistroServiziCheckURI(),
  2457.                         protocolFactoryManager.getOrganizationTypesAsArray(),
  2458.                         protocolFactoryManager.getServiceTypesAsArray(ServiceBinding.SOAP),
  2459.                         protocolFactoryManager.getServiceTypesAsArray(ServiceBinding.REST),
  2460.                         classNameReader.getConnettore(),
  2461.                         propertiesReader.isValidazioneSemanticaRegistroServiziStartupXML(),
  2462.                         propertiesReader.isValidazioneSemanticaRegistroServiziStartup(),OpenSPCoop2Startup.log);        
  2463.                 if(propertiesReader.isValidazioneSemanticaRegistroServiziStartupXML()){
  2464.                     RegistroServiziManager.getInstance().setValidazioneSemanticaModificaRegistroServiziXML(propertiesReader.isValidazioneSemanticaRegistroServiziCheckURI(),
  2465.                             protocolFactoryManager.getOrganizationTypesAsArray(),
  2466.                             protocolFactoryManager.getServiceTypesAsArray(ServiceBinding.SOAP),
  2467.                             protocolFactoryManager.getServiceTypesAsArray(ServiceBinding.REST),
  2468.                             classNameReader.getConnettore());
  2469.                 }
  2470.             }catch(Exception e){
  2471.                 msgDiag.logStartupError(e,"Validazione semantica del registro dei servizi");
  2472.                 return;
  2473.             }

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



  2526.        
  2527.        
  2528.        
  2529.        
  2530.             /* ----------- Inizializzo GestoreMessaggi Cache ------------ */
  2531.             try{
  2532.                 GestoreMessaggi.initialize();
  2533.             }catch(Exception e){
  2534.                 msgDiag.logStartupError(e,"Cache GestoreMessaggi");
  2535.                 return;
  2536.             }
  2537.        
  2538.        
  2539.        
  2540.        
  2541.            
  2542.             /* ----------- Inizializzazione MessageSecurity ------------ */
  2543.             try{
  2544.                 String wssPropertiesFileExternalPWCallback = propertiesReader.getExternalPWCallbackPropertyFile();
  2545.                 if(wssPropertiesFileExternalPWCallback!=null){
  2546.                     ExternalPWCallback.initialize(wssPropertiesFileExternalPWCallback);
  2547.                 }
  2548.                
  2549.                 // DEVE essere effettuata all'inizio, vedi sopra.
  2550.                 //org.apache.wss4j.dom.engine.WSSConfig.init();
  2551.                
  2552.             }catch(Exception e){
  2553.                 msgDiag.logStartupError(e,"Inizializzazione MessageSecurity");
  2554.                 return;
  2555.             }

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

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

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

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


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

  3140.            
  3141.            
  3142.            
  3143.            
  3144.            
  3145.    
  3146.            
  3147.            
  3148.            
  3149.             // Inizializzazione Init Handler
  3150.             try{
  3151.                 InitContext initContext = new InitContext();
  3152.                 initContext.setLogCore(logCore);
  3153.                 initContext.setLogConsole(OpenSPCoop2Startup.log);
  3154.                 initContext.setPddContext(OpenSPCoop2Startup.this.pddContext);
  3155.                 GestoreHandlers.init(initContext, msgDiag,OpenSPCoop2Startup.log); // per avere gli init stampati su server log
  3156.             }catch(HandlerException e){
  3157.                 if(e.isEmettiDiagnostico()){
  3158.                     msgDiag.logStartupError(e,e.getIdentitaHandler());
  3159.                 }
  3160.                 else{
  3161.                     logCore.error(e.getMessage(),e);
  3162.                 }
  3163.                 return;
  3164.             }catch(Exception e){
  3165.                 msgDiag.logStartupError(e,"InitHandler");
  3166.                 return;
  3167.             }
  3168.            
  3169.            
  3170.            
  3171.            
  3172.            



  3173.             // Inizializzazione Timer per il check delle risorse
  3174.             try{
  3175.                 if( propertiesReader.isAbilitatoControlloRisorseConfigurazione() ||
  3176.                         propertiesReader.isAbilitatoControlloValidazioneSemanticaConfigurazione() ||
  3177.                         propertiesReader.isAbilitatoControlloRisorseDB() ||
  3178.                         propertiesReader.isAbilitatoControlloRisorseJMS() ||
  3179.                         propertiesReader.isAbilitatoControlloRisorseMsgDiagnosticiPersonalizzati() ||
  3180.                         propertiesReader.isAbilitatoControlloRisorseRegistriServizi() ||
  3181.                         propertiesReader.isAbilitatoControlloValidazioneSemanticaRegistriServizi() ||
  3182.                         propertiesReader.isAbilitatoControlloRisorseTracciamentiPersonalizzati()){
  3183.                     OpenSPCoop2Startup.this.timerMonitoraggioRisorse = new TimerMonitoraggioRisorseThread();
  3184.                     OpenSPCoop2Startup.this.timerMonitoraggioRisorse.start();
  3185.                     TimerMonitoraggioRisorseThread.setSTATE( TimerState.ENABLED );
  3186.                     OpenSPCoop2Startup.logStartupInfo("Inizializzo Timer per il Monitoraggio delle Risorse");
  3187.                 }
  3188.             }catch(Exception e){
  3189.                 msgDiag.logStartupError(e,"TimerMonitoraggioRisorse");
  3190.                 return;
  3191.             }





  3192.             // Inizializzazione Timer per il check del Threshold
  3193.             try{
  3194.                 List<String> tipiThreshold = propertiesReader.getRepositoryThresholdTypes();
  3195.                 if(tipiThreshold!=null && !tipiThreshold.isEmpty()){
  3196.                     OpenSPCoop2Startup.this.timerThreshold = new TimerThresholdThread();
  3197.                     OpenSPCoop2Startup.this.timerThreshold.start();
  3198.                     TimerThresholdThread.setSTATE( TimerState.ENABLED );
  3199.                     OpenSPCoop2Startup.logStartupInfo("Inizializzo Timer per il Controllo dei Threshold sulle risorse");
  3200.                 }
  3201.             }catch(Exception e){
  3202.                 msgDiag.logStartupError(e,"TimerThreshold");
  3203.                 return;
  3204.             }






  3205.             // Inizializzazione delle risorse esterne terminata
  3206.             OpenSPCoop2Startup.initialize = true;
  3207.             Utilities.sleep(1000);








  3208.             /* -------- Check deploy timer ------ */
  3209.             boolean gestoreBusteNonRiscontrate = false;
  3210.             boolean gestoreMessaggi = false;
  3211.             boolean gestorePuliziaMessaggiAnomali = false;
  3212.             boolean gestoreRepository=false;
  3213.             if(OpenSPCoop2Startup.this.serverJ2EE){
  3214.                 long scadenzaWhile = System.currentTimeMillis() + propertiesReader.getTimerEJBDeployTimeout();
  3215.                 GestoreJNDI jndi = null;
  3216.                 if(propertiesReader.getJNDIContext_TimerEJB()==null)
  3217.                     jndi = new GestoreJNDI();
  3218.                 else
  3219.                     jndi = new GestoreJNDI(propertiesReader.getJNDIContext_TimerEJB());

  3220.                 while( (System.currentTimeMillis() < scadenzaWhile)
  3221.                         &&
  3222.                         (gestoreBusteNonRiscontrate==false
  3223.                                 || gestoreMessaggi==false
  3224.                                 || gestorePuliziaMessaggiAnomali==false
  3225.                                 || gestoreRepository==false)){

  3226.                     gestoreBusteNonRiscontrate = false;
  3227.                     gestoreMessaggi = false;
  3228.                     gestorePuliziaMessaggiAnomali = false;
  3229.                     gestoreRepository=false;

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

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

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


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






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









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









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







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




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

  3855.             /* ------------ Jminix StandaloneMiniConsole  ------------ */
  3856.             if(propertiesReader.getPortJminixConsole()!=null){
  3857.                 try{
  3858.                     jminixStandaloneConsole = new StandaloneMiniConsole(propertiesReader.getPortJminixConsole());
  3859.                     log.info("JminixStandaloneConsole correttamente avviata");
  3860.                     logCore.info("JminixStandaloneConsole correttamente avviata");
  3861.                 }catch(Throwable e){
  3862.                     logCore.error("Errore durante l'avvio della jminixStandaloneConsole: "+e.getMessage(),e);
  3863.                     msgDiag.logStartupError(e,"Inizializzazione JminixStandaloneConsole");
  3864.                 }
  3865.             }
  3866.            
  3867.            
  3868.            




  3869.             /* ------------ OpenSPCoop startup terminato  ------------ */
  3870.             long endDate = System.currentTimeMillis();
  3871.             long secondStarter = (endDate - OpenSPCoop2Startup.this.startDate) / 1000;
  3872.             msgDiag.setPrefixMsgPersonalizzati(MsgDiagnosticiProperties.MSG_DIAG_OPENSPCOOP_STARTUP);
  3873.             msgDiag.addKeyword(CostantiPdD.KEY_VERSIONE_PORTA, propertiesReader.getPddDetailsForLog());
  3874.             msgDiag.addKeyword(CostantiPdD.KEY_TEMPO_AVVIO, secondStarter+" secondi");
  3875.             OpenSPCoop2Startup.logStartupInfo(propertiesReader.getPddDetailsForLog()+" avviata correttamente in "+secondStarter+" secondi.");
  3876.             if(OpenSPCoop2Logger.isLoggerOpenSPCoopConsoleStartupAgganciatoLog()){
  3877.                 // per farlo finire anche sul server.log
  3878.                 System.out.println(propertiesReader.getPddDetailsForLog()+" avviata correttamente in "+secondStarter+" secondi.");
  3879.             }
  3880.             msgDiag.logPersonalizzato("pdd");
  3881.             MsgDiagnostico msgIM = MsgDiagnostico.newInstance(IntegrationManager.ID_MODULO);
  3882.             msgIM.setPrefixMsgPersonalizzati(MsgDiagnosticiProperties.MSG_DIAG_OPENSPCOOP_STARTUP);
  3883.             msgIM.addKeyword(CostantiPdD.KEY_VERSIONE_PORTA, propertiesReader.getPddDetailsForLog());
  3884.             msgIM.addKeyword(CostantiPdD.KEY_TEMPO_AVVIO, secondStarter+" secondi");
  3885.             msgIM.logPersonalizzato("IntegrationManager");
  3886.            

  3887.         }

  3888.     }
  3889.    
  3890.     private static void setSystemProperties(String propName, String propValue) {
  3891.         System.setProperty(propName, propValue);
  3892.         OpenSPCoop2Startup.logStartupInfo("Hazelcast - '"+propName+"': "+System.getProperty(propName));
  3893.     }
  3894.    
  3895.     public static void startTimerClusterDinamicoThread() throws Exception {
  3896.         if(OpenSPCoop2Startup.threadClusterDinamico == null) {
  3897.             initTimerClusterDinamicoThread();
  3898.         }
  3899.     }
  3900.     private static synchronized void initTimerClusterDinamicoThread() throws Exception {
  3901.         if(OpenSPCoop2Startup.threadClusterDinamico == null) {
  3902.             Logger forceLogEventi = OpenSPCoop2Logger.getLoggerOpenSPCoopEventi(true);
  3903.             OpenSPCoop2Startup.threadClusterDinamico = new TimerClusterDinamicoThread(OpenSPCoop2Logger.getLoggerOpenSPCoopTimers());
  3904.             OpenSPCoop2Startup.threadClusterDinamico.start();
  3905.             TimerClusterDinamicoThread.setSTATE( TimerState.ENABLED );
  3906.             forceLogEventi.info("Thread per l'aggiornamento del cluster avviato correttamente");
  3907.         }
  3908.     }
  3909.    
  3910.     public static boolean isStartedTimerClusteredRateLimitingLocalCache() {
  3911.         return OpenSPCoop2Startup.timerClusteredRateLimitingLocalCache!=null;
  3912.     }
  3913.     public static void startTimerClusteredRateLimitingLocalCache(GestorePolicyAttiveInMemory gestore) throws Exception {
  3914.         if(OpenSPCoop2Startup.timerClusteredRateLimitingLocalCache == null) {
  3915.             initTimerClusteredRateLimitingLocalCache(gestore);
  3916.         }
  3917.     }
  3918.     private static synchronized void initTimerClusteredRateLimitingLocalCache(GestorePolicyAttiveInMemory gestore) throws Exception {
  3919.         if(OpenSPCoop2Startup.timerClusteredRateLimitingLocalCache == null) {
  3920.             OpenSPCoop2Properties properties = OpenSPCoop2Properties.getInstance();
  3921.             Logger logControlloTraffico = OpenSPCoop2Logger.getLoggerOpenSPCoopControlloTraffico(true);//properties.isControlloTrafficoDebug());
  3922.             OpenSPCoop2Startup.timerClusteredRateLimitingLocalCache = new TimerClusteredRateLimitingLocalCache(OpenSPCoop2Logger.getLoggerOpenSPCoopTimers(), gestore);
  3923.             OpenSPCoop2Startup.timerClusteredRateLimitingLocalCache.setTimeout(properties.getControlloTrafficoGestorePolicyInMemoryHazelcastLocalCacheTimerUpdate());
  3924.             OpenSPCoop2Startup.timerClusteredRateLimitingLocalCache.start();
  3925.             logControlloTraffico.info("Thread per l'aggiornamento della LocalCache tramite Hazelcast avviato correttamente");
  3926.         }
  3927.     }
  3928.    
  3929.    
  3930.     /**
  3931.      * Undeploy dell'applicazione WEB di OpenSPCoop
  3932.      *
  3933.      * @param sce Servlet Context Event
  3934.      *
  3935.      */
  3936.     @Override
  3937.     public void contextDestroyed(ServletContextEvent sce) {

  3938.         OpenSPCoop2Startup.setContextDestroyed(true);
  3939.        
  3940.         OpenSPCoop2Properties properties = null;
  3941.         try {
  3942.             properties = OpenSPCoop2Properties.getInstance();
  3943.         }catch(Throwable e){
  3944.             // ignore
  3945.         }
  3946.        
  3947.         // ID Cluster
  3948.         try{
  3949.             if(OpenSPCoop2Startup.threadClusterDinamico!=null){
  3950.                 OpenSPCoop2Startup.threadClusterDinamico.setStop(true);
  3951.             }
  3952.         }catch(Throwable e){
  3953.             // ignore
  3954.         }
  3955.         try{
  3956.             boolean rateLimitingGestioneCluster = false;
  3957.             if(properties!=null && properties.isControlloTrafficoEnabled()) {
  3958.                 rateLimitingGestioneCluster = GestorePolicyAttive.isAttivo(PolicyGroupByActiveThreadsType.LOCAL_DIVIDED_BY_NODES);
  3959.             }
  3960.             if( (properties!=null && properties.isClusterDinamico()) || rateLimitingGestioneCluster) {  
  3961.                 DynamicClusterManager.getInstance().unregister(OpenSPCoop2Startup.log);
  3962.             }
  3963.         }catch(Throwable e){
  3964.             // ignore
  3965.         }
  3966.        
  3967.        
  3968.         // Eventi
  3969.         try{
  3970.             if(properties!=null) {
  3971.                 String clusterID = properties.getClusterId(false);
  3972.                 boolean debugEventi = properties.isEventiDebug();
  3973.                 Logger logEventi = OpenSPCoop2Logger.getLoggerOpenSPCoopEventi(debugEventi);
  3974.                 Evento eventoShutdown = null;
  3975.                 try{
  3976.                     if(OpenSPCoop2Startup.this.gestoreEventi!=null){
  3977.                         if(properties.isEventiRegistrazioneStatoPorta()){
  3978.                             eventoShutdown = new Evento();
  3979.                             eventoShutdown.setTipo(TipoEvento.STATO_GATEWAY.getValue());
  3980.                             eventoShutdown.setCodice(CodiceEventoStatoGateway.STOP.getValue());
  3981.                             eventoShutdown.setSeverita(SeveritaConverter.toIntValue(TipoSeverita.INFO));
  3982.                             eventoShutdown.setClusterId(clusterID);
  3983.                             OpenSPCoop2Startup.this.gestoreEventi.log(eventoShutdown,true);
  3984.                         }
  3985.                     }
  3986.                 }catch(Exception e){
  3987.                     // L'errore puo' avvenire poiche' lo shutdown puo' anche disattivare il datasource
  3988.                     logEventi.debug("Errore durante la segnalazione di shutdown ('Emissione Evento'): "+e.getMessage(),e);
  3989.                     if(eventoShutdown!=null){
  3990.                         try{
  3991.                             if(eventoShutdown.getOraRegistrazione()==null){
  3992.                                 eventoShutdown.setOraRegistrazione(DateManager.getDate());
  3993.                             }
  3994.                             ByteArrayOutputStream bout = new ByteArrayOutputStream();
  3995.                             eventoShutdown.writeTo(bout, WriteToSerializerType.XML_JAXB);
  3996.                             bout.flush();
  3997.                             bout.close();
  3998.                             FileSystemSerializer.getInstance().registraEvento(bout.toByteArray(), eventoShutdown.getOraRegistrazione());
  3999.                         }catch(Exception eSerializer){
  4000.                             logEventi.error("Errore durante la registrazione su file system dell'evento: "+eSerializer.getMessage(),eSerializer);
  4001.                         }
  4002.                     }
  4003.                 }
  4004.    
  4005.                 if(properties.isEventiTimerEnabled()){
  4006.                     try{    
  4007.                         if(debugEventi)
  4008.                             logEventi.debug("Recupero thread per gli Eventi ...");
  4009.                         if(OpenSPCoop2Startup.this.threadEventi!=null){
  4010.                             OpenSPCoop2Startup.this.threadEventi.setStop(true);
  4011.                             if(debugEventi)
  4012.                                 logEventi.debug("Richiesto stop al thread per gli Eventi");
  4013.                         }else{
  4014.                             throw new CoreException("Thread per gli Eventi non trovato");
  4015.                         }
  4016.                     }catch(Exception e){
  4017.                         if(logEventi!=null){
  4018.                             if(debugEventi)
  4019.                                 logEventi.error("Errore durante la gestione dell'exit (ThreadEventi): "+e.getMessage(),e);
  4020.                         }
  4021.                     }
  4022.                 }
  4023.             }
  4024.         }catch(Throwable e){
  4025.             // ignore
  4026.         }
  4027.        
  4028.         // Recovery FileSystem
  4029.         try {
  4030.             if(properties!=null && properties.isFileSystemRecoveryTimerEnabled()){
  4031.                 boolean debugRecoveryFileSystem = properties.isFileSystemRecoveryDebug();
  4032.                 Logger logRecoveryFileSystem = OpenSPCoop2Logger.getLoggerOpenSPCoopFileSystemRecovery(debugRecoveryFileSystem);
  4033.                 if(debugRecoveryFileSystem)
  4034.                     logRecoveryFileSystem.debug("Recupero thread per il recovery da file system ...");
  4035.                 if(OpenSPCoop2Startup.this.threadFileSystemRecovery!=null){
  4036.                     OpenSPCoop2Startup.this.threadFileSystemRecovery.setStop(true);
  4037.                     if(debugRecoveryFileSystem)
  4038.                         logRecoveryFileSystem.debug("Richiesto stop al thread per il recovery da file system");
  4039.                 }else{
  4040.                     throw new CoreException("Thread per il recovery da file system non trovato");
  4041.                 }  
  4042.             }
  4043.         }catch(Throwable e){
  4044.             // ignore
  4045.         }
  4046.        
  4047.         // GestoreTransazioniStateful
  4048.         try {
  4049.             if(properties!=null && properties.isTransazioniStatefulEnabled()){
  4050.                 boolean debugTransazioniStateful = properties.isTransazioniStatefulDebug();
  4051.                 Logger logTransazioniStateful = OpenSPCoop2Logger.getLoggerOpenSPCoopTransazioniStateful(debugTransazioniStateful);
  4052.                 if(debugTransazioniStateful)
  4053.                     logTransazioniStateful.debug("Recupero thread per la gestione delle transazioni stateful ...");
  4054.                 if(OpenSPCoop2Startup.this.threadRepositoryStateful!=null){
  4055.                     OpenSPCoop2Startup.this.threadRepositoryStateful.setStop(true);
  4056.                     if(debugTransazioniStateful)
  4057.                         logTransazioniStateful.debug("Richiesto stop al thread per la gestione delle transazioni stateful");
  4058.                 }else{
  4059.                     throw new CoreException("Thread per la gestione delle transazioni stateful non trovato");
  4060.                 }  
  4061.             }
  4062.         }catch(Throwable e){
  4063.             // ignore
  4064.         }

  4065.         // Statistiche
  4066.         try{
  4067.             if(properties!=null && properties.isStatisticheGenerazioneEnabled()){
  4068.                 boolean debugStatistiche = properties.isStatisticheGenerazioneDebug();
  4069.                
  4070.                 Logger logStatisticheOrarie = OpenSPCoop2Logger.getLoggerOpenSPCoopStatistiche(TipoIntervalloStatistico.STATISTICHE_ORARIE, debugStatistiche);
  4071.                 if(debugStatistiche)
  4072.                     logStatisticheOrarie.debug("Recupero thread per la generazione delle statistiche orarie ...");
  4073.                 if(OpenSPCoop2Startup.this.threadGenerazioneStatisticheOrarie!=null){
  4074.                     OpenSPCoop2Startup.this.threadGenerazioneStatisticheOrarie.setStop(true);
  4075.                     if(debugStatistiche)
  4076.                         logStatisticheOrarie.debug("Richiesto stop al thread per la generazione delle statistiche orarie");
  4077.                 }else{
  4078.                     if(properties.isStatisticheGenerazioneBaseOrariaEnabled()) {
  4079.                         throw new CoreException("Thread per la generazione delle statistiche orarie non trovato");
  4080.                     }
  4081.                 }  
  4082.                
  4083.                 Logger logStatisticheGiornaliere = OpenSPCoop2Logger.getLoggerOpenSPCoopStatistiche(TipoIntervalloStatistico.STATISTICHE_GIORNALIERE, debugStatistiche);
  4084.                 if(debugStatistiche)
  4085.                     logStatisticheGiornaliere.debug("Recupero thread per la generazione delle statistiche giornaliere ...");
  4086.                 if(OpenSPCoop2Startup.this.threadGenerazioneStatisticheGiornaliere!=null){
  4087.                     OpenSPCoop2Startup.this.threadGenerazioneStatisticheGiornaliere.setStop(true);
  4088.                     if(debugStatistiche)
  4089.                         logStatisticheGiornaliere.debug("Richiesto stop al thread per la generazione delle statistiche giornaliere");
  4090.                 }else{
  4091.                     if(properties.isStatisticheGenerazioneBaseGiornalieraEnabled()) {
  4092.                         throw new CoreException("Thread per la generazione delle statistiche giornaliere non trovato");
  4093.                     }
  4094.                 }
  4095.                
  4096.                 Logger logStatisticheSettimanali = OpenSPCoop2Logger.getLoggerOpenSPCoopStatistiche(TipoIntervalloStatistico.STATISTICHE_SETTIMANALI, debugStatistiche);
  4097.                 if(debugStatistiche)
  4098.                     logStatisticheSettimanali.debug("Recupero thread per la generazione delle statistiche settimanali ...");
  4099.                 if(OpenSPCoop2Startup.this.threadGenerazioneStatisticheSettimanali!=null){
  4100.                     OpenSPCoop2Startup.this.threadGenerazioneStatisticheSettimanali.setStop(true);
  4101.                     if(debugStatistiche)
  4102.                         logStatisticheSettimanali.debug("Richiesto stop al thread per la generazione delle statistiche settimanali");
  4103.                 }else{
  4104.                     if(properties.isStatisticheGenerazioneBaseSettimanaleEnabled()) {
  4105.                         throw new CoreException("Thread per la generazione delle statistiche settimanali non trovato");
  4106.                     }
  4107.                 }
  4108.                
  4109.                 Logger logStatisticheMensili = OpenSPCoop2Logger.getLoggerOpenSPCoopStatistiche(TipoIntervalloStatistico.STATISTICHE_MENSILI, debugStatistiche);
  4110.                 if(debugStatistiche)
  4111.                     logStatisticheMensili.debug("Recupero thread per la generazione delle statistiche mensili ...");
  4112.                 if(OpenSPCoop2Startup.this.threadGenerazioneStatisticheMensili!=null){
  4113.                     OpenSPCoop2Startup.this.threadGenerazioneStatisticheMensili.setStop(true);
  4114.                     if(debugStatistiche)
  4115.                         logStatisticheMensili.debug("Richiesto stop al thread per la generazione delle statistiche mensili");
  4116.                 }else{
  4117.                     if(properties.isStatisticheGenerazioneBaseMensileEnabled()) {
  4118.                         throw new CoreException("Thread per la generazione delle statistiche mensili non trovato");
  4119.                     }
  4120.                 }  
  4121.                
  4122.             }
  4123.         }catch (Throwable e) {
  4124.             // ignore
  4125.         }
  4126.        
  4127.         // Timer per la gestione delle chiavi da PDND
  4128.        
  4129.         try{
  4130.             if(properties!=null && OpenSPCoop2Startup.this.threadGestoreChiaviPDNDEnabled){
  4131.                 boolean debug = properties.isGestoreChiaviPDNDDebug();
  4132.            
  4133.                 Logger logGestorePDND = OpenSPCoop2Logger.getLoggerOpenSPCoopGestoreChiaviPDND(debug);
  4134.                 if(debug)
  4135.                     logGestorePDND.debug("Recupero thread per la gestione delle chiavi PDND ...");
  4136.                 if(OpenSPCoop2Startup.this.threadGestoreChiaviPDND!=null){
  4137.                     OpenSPCoop2Startup.this.threadGestoreChiaviPDND.setStop(true);
  4138.                     if(debug)
  4139.                         logGestorePDND.debug("Richiesto stop al thread per la gestione delle chiavi PDND");
  4140.                 }else{
  4141.                     throw new CoreException("Thread per la gestione delle chiavi PDND non trovato");
  4142.                 }  
  4143.             }
  4144.         }catch (Throwable e) {
  4145.             // ignore
  4146.         }
  4147.         try{
  4148.             if(properties!=null && OpenSPCoop2Startup.this.threadGestoreChiaviPDNDEnabled){
  4149.                 boolean debug = properties.isGestoreChiaviPDNDDebug();
  4150.            
  4151.                 Logger logGestorePDND = OpenSPCoop2Logger.getLoggerOpenSPCoopGestoreChiaviPDND(debug);
  4152.                 if(debug)
  4153.                     logGestorePDND.debug("Recupero thread per la gestione della cache delle chiavi PDND ...");
  4154.                 if(OpenSPCoop2Startup.this.threadGestoreCacheChiaviPDND!=null){
  4155.                     OpenSPCoop2Startup.this.threadGestoreCacheChiaviPDND.setStop(true);
  4156.                     if(debug)
  4157.                         logGestorePDND.debug("Richiesto stop al thread per la gestione della cache delle chiavi PDND");
  4158.                 }else{
  4159.                     throw new CoreException("Thread per gestione della cache delle chiavi PDND non trovato");
  4160.                 }  
  4161.             }
  4162.         }catch (Throwable e) {
  4163.             // ignore
  4164.         }
  4165.        
  4166.         // Timer per la gestione delle operazioni remote in un cluster dinamico
  4167.        
  4168.         try{
  4169.             if(properties!=null && OpenSPCoop2Startup.this.threadGestoreOperazioniRemoteEnabled){
  4170.                 boolean debug = properties.isProxyReadJMXResourcesAsyncProcessByTimerDebug();
  4171.            
  4172.                 Logger logGestoreOperazioniRemote = OpenSPCoop2Logger.getLoggerOpenSPCoopGestoreOperazioniRemote(debug);
  4173.                 if(debug)
  4174.                     logGestoreOperazioniRemote.debug("Recupero thread per la gestione delle operazioni remote ...");
  4175.                 if(OpenSPCoop2Startup.this.threadGestoreOperazioniRemote!=null){
  4176.                     OpenSPCoop2Startup.this.threadGestoreOperazioniRemote.setStop(true);
  4177.                     if(debug)
  4178.                         logGestoreOperazioniRemote.debug("Richiesto stop al thread per la gestione delle operazioni remote");
  4179.                 }else{
  4180.                     throw new CoreException("Thread per la gestione delle operazioni remote non trovato");
  4181.                 }  
  4182.             }
  4183.         }catch (Throwable e) {
  4184.             // ignore
  4185.         }
  4186.         try{
  4187.             if(properties!=null && OpenSPCoop2Startup.this.threadGestoreOperazioniRemoteEnabled){
  4188.                 boolean debug = properties.isProxyReadJMXResourcesAsyncProcessByTimerDebug();
  4189.            
  4190.                 Logger logGestoreOperazioniRemote = OpenSPCoop2Logger.getLoggerOpenSPCoopGestoreOperazioniRemote(debug);
  4191.                 if(debug)
  4192.                     logGestoreOperazioniRemote.debug("Recupero thread per lo svecchiamento delle operazioni remote ...");
  4193.                 if(OpenSPCoop2Startup.this.threadSvecchiamentoOperazioniRemote!=null){
  4194.                     OpenSPCoop2Startup.this.threadSvecchiamentoOperazioniRemote.setStop(true);
  4195.                     if(debug)
  4196.                         logGestoreOperazioniRemote.debug("Richiesto stop al thread per lo svecchiamento delle operazioni remote");
  4197.                 }else{
  4198.                     throw new CoreException("Thread per lo svecchiamento delle operazioni remote non trovato");
  4199.                 }  
  4200.             }
  4201.         }catch (Throwable e) {
  4202.             // ignore
  4203.         }
  4204.        
  4205.         // ExitHandler
  4206.         try{
  4207.             ExitContext context = new ExitContext();
  4208.             context.setPddContext(this.pddContext);
  4209.             context.setLogConsole(OpenSPCoop2Startup.log);
  4210.             context.setLogCore(OpenSPCoop2Logger.getLoggerOpenSPCoopCore());
  4211.             GestoreHandlers.exit(context);
  4212.         }catch(Throwable e){
  4213.             // ignore
  4214.         }
  4215.        
  4216.         // Gestione Stato ControlloTraffico
  4217.         if(properties!=null && properties.isControlloTrafficoEnabled()){
  4218.             OutputStream out = null;
  4219.             Logger logControlloTraffico = null;
  4220.             List<PolicyGroupByActiveThreadsType> tipiGestorePolicyRateLimiting = null;
  4221.             try{
  4222.                 logControlloTraffico = OpenSPCoop2Logger.getLoggerOpenSPCoopControlloTraffico(properties.isControlloTrafficoDebug());
  4223.                 tipiGestorePolicyRateLimiting = GestorePolicyAttive.getTipiGestoriAttivi();
  4224.             }catch(Throwable e){
  4225.                 if(logControlloTraffico!=null){
  4226.                     logControlloTraffico.error("Errore durante la terminazione dei gestori delle policy di Rate Limiting: "+e.getMessage(),e);
  4227.                 }
  4228.             }
  4229.             if(tipiGestorePolicyRateLimiting!=null && !tipiGestorePolicyRateLimiting.isEmpty()) {
  4230.                 for (PolicyGroupByActiveThreadsType type : tipiGestorePolicyRateLimiting) {
  4231.                     try{
  4232.                         File fRepository = properties.getControlloTrafficoGestorePolicyFileSystemRecoveryRepository();
  4233.                         if(fRepository!=null){
  4234.                             if(fRepository.exists()==false){
  4235.                                 throw new CoreException("Directory ["+fRepository.getAbsolutePath()+"] not exists");
  4236.                             }
  4237.                             if(fRepository.isDirectory()==false){
  4238.                                 throw new CoreException("File ["+fRepository.getAbsolutePath()+"] is not directory");
  4239.                             }
  4240.                             if(fRepository.canRead()==false){
  4241.                                 throw new CoreException("File ["+fRepository.getAbsolutePath()+"] cannot read");
  4242.                             }
  4243.                             if(fRepository.canWrite()==false){
  4244.                                 throw new CoreException("File ["+fRepository.getAbsolutePath()+"] cannot write");
  4245.                             }      
  4246.                            
  4247.                             File fDati = new File(fRepository, GestorePolicyAttive.getControlloTrafficoImage(type));
  4248.                             out = new FileOutputStream(fDati, false); // se già esiste lo sovrascrive
  4249.                             GestorePolicyAttive.getInstance(type).serialize(out);
  4250.                             out.flush();
  4251.                             out.close();
  4252.                             out = null;
  4253.                            
  4254.                             boolean inizializzazioneAttiva = false;
  4255.                             // Il meccanismo di ripristino dell'immagine degli eventi non sembra funzionare
  4256.                             // Lascio comunque il codice se in futuro si desidera approfindire la questione
  4257.                             if(inizializzazioneAttiva) {
  4258.                                 fDati = new File(fRepository, GestorePolicyAttive.getControlloTrafficoEventiImage(type));
  4259.                                 NotificatoreEventi.getInstance().serialize(fDati);
  4260.                             }
  4261.                            
  4262.                         }
  4263.                     }catch(Throwable e){
  4264.                         if(logControlloTraffico!=null){
  4265.                             logControlloTraffico.error("Errore durante la terminazione dei gestori delle policy di Rate Limiting: "+e.getMessage(),e);
  4266.                         }
  4267.                     }finally{
  4268.                         try{
  4269.                             if(out!=null){
  4270.                                 out.flush();
  4271.                             }
  4272.                         }catch(Exception eClose){
  4273.                             // ignore
  4274.                         }
  4275.                         try{
  4276.                             if(out!=null){
  4277.                                 out.close();
  4278.                             }
  4279.                         }catch(Exception eClose){
  4280.                             // ignore
  4281.                         }
  4282.                     }
  4283.                 }
  4284.             }
  4285.            
  4286.             if (OpenSPCoop2Startup.timerClusteredRateLimitingLocalCache != null) {
  4287.                 OpenSPCoop2Startup.timerClusteredRateLimitingLocalCache.setStop(true);      
  4288.             }
  4289.         }
  4290.        
  4291.         // Fermo timer runtime
  4292.         if(this.serverJ2EE){
  4293.             try {
  4294.                 if(this.timerRiscontri!=null)
  4295.                     this.timerRiscontri.stop();
  4296.             } catch (Throwable e) {
  4297.                 // ignore
  4298.             }
  4299.             try {
  4300.                 if(this.timerEliminazioneMsg!=null)
  4301.                     this.timerEliminazioneMsg.stop();
  4302.             } catch (Throwable e) {
  4303.                 // ignore
  4304.             }
  4305.             try {
  4306.                 if(this.timerPuliziaMsgAnomali!=null)
  4307.                     this.timerPuliziaMsgAnomali.stop();
  4308.             } catch (Throwable e) {
  4309.                 // ignore
  4310.             }
  4311.             try {
  4312.                 if(this.timerRepositoryBuste!=null)
  4313.                     this.timerRepositoryBuste.stop();
  4314.             } catch (Throwable e) {
  4315.                 // ignore
  4316.             }
  4317.         }else{
  4318.             try{
  4319.                 if(this.threadEliminazioneMsg!=null) {
  4320.                     this.threadEliminazioneMsg.setStop(true);
  4321.                 }
  4322.             }catch (Throwable e) {
  4323.                 // ignore
  4324.             }
  4325.             try{
  4326.                 if(this.threadPuliziaMsgAnomali!=null)
  4327.                     this.threadPuliziaMsgAnomali.setStop(true);
  4328.             }catch (Throwable e) {
  4329.                 // ignore
  4330.             }
  4331.             try{
  4332.                 if(this.threadRepositoryBuste!=null)
  4333.                     this.threadRepositoryBuste.setStop(true);
  4334.             }catch (Throwable e) {
  4335.                 // ignore
  4336.             }
  4337.         }
  4338.         try{
  4339.             if(this.threadConsegnaContenutiApplicativiMap!=null && !this.threadConsegnaContenutiApplicativiMap.isEmpty()) {
  4340.                 for (String coda : this.threadConsegnaContenutiApplicativiMap.keySet()) {
  4341.                     TimerConsegnaContenutiApplicativiThread timer = this.threadConsegnaContenutiApplicativiMap.get(coda);
  4342.                     timer.setStop(true);
  4343.                 }
  4344.             }
  4345.         }catch (Throwable e) {
  4346.             // ignore
  4347.         }

  4348.         // fermo timer Monitoraggio Risorse
  4349.         try{
  4350.             if(this.timerMonitoraggioRisorse!=null)
  4351.                 this.timerMonitoraggioRisorse.setStop(true);
  4352.         }catch (Throwable e) {
  4353.             // ignore
  4354.         }

  4355.         // fermo timer Threshold
  4356.         try{
  4357.             if(this.timerThreshold!=null)
  4358.                 this.timerThreshold.setStop(true);
  4359.         }catch (Throwable e) {
  4360.             // ignore
  4361.         }

  4362.         // Rilascio risorse JMX
  4363.         if(this.gestoreRisorseJMX!=null){
  4364.             this.gestoreRisorseJMX.unregisterMBeans();
  4365.         }

  4366.         // Verifico che i timer siano conclusi prima di rilasciare i lock
  4367.         try{
  4368.             if(this.threadEventi!=null)
  4369.                 this.threadEventi.waitShutdown();
  4370.         }catch (Throwable e) {
  4371.             // ignore
  4372.         }
  4373.         try{
  4374.             if(this.threadFileSystemRecovery!=null)
  4375.                 this.threadFileSystemRecovery.waitShutdown();
  4376.         }catch (Throwable e) {
  4377.             // ignore
  4378.         }
  4379.         try{
  4380.             if(this.threadRepositoryStateful!=null)
  4381.                 this.threadRepositoryStateful.waitShutdown();
  4382.         }catch (Throwable e) {
  4383.             // ignore
  4384.         }
  4385.         try{
  4386.             if(this.threadGenerazioneStatisticheOrarie!=null)
  4387.                 this.threadGenerazioneStatisticheOrarie.waitShutdown();
  4388.         }catch (Throwable e) {
  4389.             // ignore
  4390.         }
  4391.         try{
  4392.             if(this.threadGenerazioneStatisticheGiornaliere!=null)
  4393.                 this.threadGenerazioneStatisticheGiornaliere.waitShutdown();
  4394.         }catch (Throwable e) {
  4395.             // ignore
  4396.         }
  4397.         try{
  4398.             if(this.threadGenerazioneStatisticheSettimanali!=null)
  4399.                 this.threadGenerazioneStatisticheSettimanali.waitShutdown();
  4400.         }catch (Throwable e) {
  4401.             // ignore
  4402.         }
  4403.         try{
  4404.             if(this.threadGenerazioneStatisticheMensili!=null)
  4405.                 this.threadGenerazioneStatisticheMensili.waitShutdown();
  4406.         }catch (Throwable e) {
  4407.             // ignore
  4408.         }
  4409.         if(this.serverJ2EE){ // TODO ATTESA ATTIVA CHE SI FERMINO PER J2EE
  4410.             Utilities.sleep(5000); // aspetto che i timer terminano la loro gestione.
  4411.         }
  4412.         else {
  4413.             try{
  4414.                 if(this.threadEliminazioneMsg!=null) {
  4415.                     this.threadEliminazioneMsg.waitShutdown();
  4416.                 }
  4417.             }catch (Throwable e) {
  4418.                 // ignore
  4419.             }
  4420.             try{
  4421.                 if(this.threadPuliziaMsgAnomali!=null) {
  4422.                     this.threadPuliziaMsgAnomali.waitShutdown();
  4423.                 }
  4424.             }catch (Throwable e) {
  4425.                 // ignore
  4426.             }
  4427.             try{
  4428.                 if(this.threadRepositoryBuste!=null) {
  4429.                     this.threadRepositoryBuste.waitShutdown();
  4430.                 }
  4431.             }catch (Throwable e) {
  4432.                 // ignore
  4433.             }
  4434.         }
  4435.         try{
  4436.             if(this.threadConsegnaContenutiApplicativiMap!=null && !this.threadConsegnaContenutiApplicativiMap.isEmpty()) {
  4437.                 for (String coda : this.threadConsegnaContenutiApplicativiMap.keySet()) {
  4438.                     TimerConsegnaContenutiApplicativiThread timer = this.threadConsegnaContenutiApplicativiMap.get(coda);
  4439.                     timer.waitShutdown();
  4440.                 }
  4441.             }
  4442.         }catch (Throwable e) {
  4443.             // ignore
  4444.         }
  4445.         try{
  4446.             if(this.timerMonitoraggioRisorse!=null) {
  4447.                 this.timerMonitoraggioRisorse.waitShutdown();
  4448.             }
  4449.         }catch (Throwable e) {
  4450.             // ignore
  4451.         }
  4452.         try{
  4453.             if(this.timerThreshold!=null) {
  4454.                 this.timerThreshold.waitShutdown();
  4455.             }
  4456.         }catch (Throwable e) {
  4457.             // ignore
  4458.         }
  4459.         try{
  4460.             if(OpenSPCoop2Startup.threadClusterDinamico!=null)
  4461.                 OpenSPCoop2Startup.threadClusterDinamico.waitShutdown();
  4462.         }catch (Throwable e) {
  4463.             // ignore
  4464.         }
  4465.         try{
  4466.             if(OpenSPCoop2Startup.timerClusteredRateLimitingLocalCache!=null)
  4467.                 OpenSPCoop2Startup.timerClusteredRateLimitingLocalCache.waitShutdown();
  4468.         }catch (Throwable e) {
  4469.             // ignore
  4470.         }
  4471.        
  4472.         // Rilascio lock (da fare dopo che i timer sono stati fermati)
  4473.         // L'errore puo' avvenire poiche' lo shutdown puo' anche disattivare il datasource
  4474.         boolean logErrorConnection = false;
  4475.         TimerUtils.relaseLockTimers(properties, ID_MODULO, OpenSPCoop2Logger.getLoggerOpenSPCoopTimers(), logErrorConnection);
  4476.        
  4477.         // UniversallyUniqueIdentifierProducer (fermo dopo lo stop di tutte le altre attivita)
  4478.         try{
  4479.             if(OpenSPCoop2Startup.this.universallyUniqueIdentifierProducer!=null){
  4480.                 OpenSPCoop2Startup.this.universallyUniqueIdentifierProducer.setStop(true);
  4481.                 OpenSPCoop2Startup.this.universallyUniqueIdentifierProducer.waitShutdown();
  4482.             }
  4483.         }catch(Throwable e){
  4484.             // ignore
  4485.         }
  4486.        
  4487.         // DataManger
  4488.         DateManager.close();

  4489.         // Jminix StandaloneMiniConsole
  4490.         try{
  4491.             if(jminixStandaloneConsole!=null){
  4492.                 jminixStandaloneConsole.shutdown();
  4493.             }
  4494.         }catch (Throwable e) {
  4495.             // ignore
  4496.         }

  4497.         // *** Repository plugins ***
  4498.         try{
  4499.             CorePluginLoader.close(OpenSPCoop2Logger.getLoggerOpenSPCoopCore());
  4500.         }catch(Throwable e){
  4501.             // ignore
  4502.         }
  4503.        
  4504.         // *** Hazelcast ***
  4505.         if(properties!=null && properties.isControlloTrafficoEnabled()){
  4506.             HazelcastManager.close();
  4507.         }
  4508.        
  4509.         // *** Semaphore **
  4510.         try{
  4511.             org.openspcoop2.utils.SemaphoreLock.releaseScheduledExecutorService();
  4512.         }catch(Throwable e){
  4513.             // ignore
  4514.         }
  4515.        
  4516.         // Attendo qualche secondo
  4517.         Utilities.sleep(2000);
  4518.     }



  4519. }