FSRecoveryLibrary.java
- /*
- * GovWay - A customizable API Gateway
- * https://govway.org
- *
- * Copyright (c) 2005-2025 Link.it srl (https://link.it).
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 3, as published by
- * the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
- package org.openspcoop2.monitor.engine.fs_recovery;
- import org.openspcoop2.core.commons.dao.DAOFactory;
- import org.openspcoop2.generic_project.utils.ServiceManagerProperties;
- import org.openspcoop2.monitor.engine.constants.Costanti;
- import org.openspcoop2.protocol.sdk.diagnostica.IDiagnosticProducer;
- import org.openspcoop2.protocol.sdk.dump.IDumpProducer;
- import org.openspcoop2.protocol.sdk.tracciamento.ITracciaProducer;
- import org.openspcoop2.utils.UtilsException;
- import org.slf4j.Logger;
- import java.io.File;
- import java.sql.Connection;
- /**
- * FSRecoveryLibrary
- *
- * @author Poli Andrea (apoli@link.it)
- * @author $Author$
- * @version $Rev$, $Date$
- */
- public class FSRecoveryLibrary {
-
- private FSRecoveryLibrary() {}
- public static void generate(FSRecoveryConfig config,
- DAOFactory daoFactory, Logger daoFactoryLogger, ServiceManagerProperties daoFactoryServiceManagerProperties,
- long gestioneSerializableDBAttesaAttiva, int gestioneSerializableDBCheckInterval,
- org.openspcoop2.core.transazioni.dao.IServiceManager transazioniSM,
- ITracciaProducer tracciamentoAppender,
- IDiagnosticProducer diagnosticoAppender,
- IDumpProducer dumpAppender, boolean transazioniRegistrazioneDumpHeadersCompactEnabled,
- org.openspcoop2.core.eventi.dao.IServiceManager pluginsEventiSM){
- generate(config,
- daoFactory, daoFactoryLogger, daoFactoryServiceManagerProperties,
- gestioneSerializableDBAttesaAttiva, gestioneSerializableDBCheckInterval,
- transazioniSM, tracciamentoAppender, diagnosticoAppender,
- dumpAppender, transazioniRegistrazioneDumpHeadersCompactEnabled,
- pluginsEventiSM, null);
- }
- public static void generate(FSRecoveryConfig config,
- DAOFactory daoFactory, Logger daoFactoryLogger, ServiceManagerProperties daoFactoryServiceManagerProperties,
- long gestioneSerializableDBAttesaAttiva, int gestioneSerializableDBCheckInterval,
- org.openspcoop2.core.transazioni.dao.IServiceManager transazioniSM,
- ITracciaProducer tracciamentoAppender,
- IDiagnosticProducer diagnosticoAppender,
- IDumpProducer dumpAppender, boolean transazioniRegistrazioneDumpHeadersCompactEnabled,
- org.openspcoop2.core.eventi.dao.IServiceManager pluginsEventiSM,
- Connection connection){
- try{
-
- File dir = new File(config.getRepository());
- checkDir(dir, false, false);
-
- if(config.isRipristinoEventi()){
- if(config.isDebug()){
- config.getLogCore().debug("Esecuzione thread per ripristino eventi ....");
- }
-
- File dirEventi = new File(dir,Costanti.DIRECTORY_FILE_SYSTEM_REPOSITORY_EVENTI);
- checkDir(dirEventi, true, false);
- File dirEventiDLQ = new File(dirEventi,Costanti.DIRECTORY_FILE_SYSTEM_REPOSITORY_DLQ);
- checkDir(dirEventiDLQ, true, true);
-
- FSRecoveryEventi fs = new FSRecoveryEventi(config.getLogCore(),config.isDebug(), pluginsEventiSM,
- dirEventi,dirEventiDLQ, config.getTentativi(), config.getProcessingEventFileAfterMs());
- fs.process();
-
- if(config.isDebug()){
- config.getLogCore().debug("Esecuzione thread per ripristino eventi terminato");
- }
- }else{
- if(config.isDebug()){
- config.getLogCore().debug("Thread per ripristino eventi disabilitato");
- }
- }
-
- if(config.isRipristinoTransazioni()){
- if(config.isDebug()){
- config.getLogCore().debug("Esecuzione thread per ripristino transazioni ....");
- }
-
- File dirDiagnostici = new File(dir,Costanti.DIRECTORY_FILE_SYSTEM_REPOSITORY_DIAGNOSTICO);
- checkDir(dirDiagnostici, true, false);
- File dirDiagnosticiDLQ = new File(dirDiagnostici,Costanti.DIRECTORY_FILE_SYSTEM_REPOSITORY_DLQ);
- checkDir(dirDiagnosticiDLQ, true, true);
-
- File dirTracce = new File(dir,Costanti.DIRECTORY_FILE_SYSTEM_REPOSITORY_TRACCIA);
- checkDir(dirTracce, true, false);
- File dirTracceDLQ = new File(dirTracce,Costanti.DIRECTORY_FILE_SYSTEM_REPOSITORY_DLQ);
- checkDir(dirTracceDLQ, true, true);
-
- File dirDump = new File(dir,Costanti.DIRECTORY_FILE_SYSTEM_REPOSITORY_DUMP);
- checkDir(dirDump, true, false);
- File dirDumpDLQ = new File(dirDump,Costanti.DIRECTORY_FILE_SYSTEM_REPOSITORY_DLQ);
- checkDir(dirDumpDLQ, true, true);
-
- File dirTransazioniApplicativoServer = new File(dir,Costanti.DIRECTORY_FILE_SYSTEM_REPOSITORY_TRANSAZIONE_APPLICATIVO_SERVER);
- checkDir(dirTransazioniApplicativoServer, true, false);
- File dirTransazioniApplicativoServerDLQ = new File(dirTransazioniApplicativoServer,Costanti.DIRECTORY_FILE_SYSTEM_REPOSITORY_DLQ);
- checkDir(dirTransazioniApplicativoServerDLQ, true, true);
-
- File dirTransazioniApplicativoServerConsegnaTerminata = new File(dir,Costanti.DIRECTORY_FILE_SYSTEM_REPOSITORY_TRANSAZIONE_APPLICATIVO_SERVER_CONSEGNA_TERMINATA);
- checkDir(dirTransazioniApplicativoServerConsegnaTerminata, true, false);
- File dirTransazioniApplicativoServerConsegnaTerminataDLQ = new File(dirTransazioniApplicativoServerConsegnaTerminata,Costanti.DIRECTORY_FILE_SYSTEM_REPOSITORY_DLQ);
- checkDir(dirTransazioniApplicativoServerConsegnaTerminataDLQ, true, true);
-
- File dirTransazioni = new File(dir,Costanti.DIRECTORY_FILE_SYSTEM_REPOSITORY_TRANSAZIONE);
- checkDir(dirTransazioni, true, false);
- File dirTransazioniDLQ = new File(dirTransazioni,Costanti.DIRECTORY_FILE_SYSTEM_REPOSITORY_DLQ);
- checkDir(dirTransazioniDLQ, true, true);
-
- FSRecoveryTransazioni fs = new FSRecoveryTransazioni(config.getLogCore(),config.isDebug(),
- daoFactory, daoFactoryLogger, daoFactoryServiceManagerProperties,
- gestioneSerializableDBAttesaAttiva, gestioneSerializableDBCheckInterval,
- transazioniSM,
- tracciamentoAppender, diagnosticoAppender,
- dumpAppender, transazioniRegistrazioneDumpHeadersCompactEnabled,
- dirDiagnostici,dirDiagnosticiDLQ,
- dirTracce,dirTracceDLQ,
- dirDump,dirDumpDLQ,
- dirTransazioniApplicativoServer, dirTransazioniApplicativoServerDLQ,
- dirTransazioniApplicativoServerConsegnaTerminata, dirTransazioniApplicativoServerConsegnaTerminataDLQ,
- dirTransazioni,dirTransazioniDLQ,
- config.getTentativi(), config.getProcessingTransactionFileAfterMs());
- fs.process(connection);
-
- if(config.isDebug()){
- config.getLogCore().debug("Esecuzione thread per ripristino transazioni terminato");
- }
- }else{
- if(config.isDebug()){
- config.getLogCore().debug("Thread per ripristino transazioni disabilitato");
- }
- }
-
- }catch(Exception e){
- config.getLogCore().error("Errore durante il recovery da file system: "+e.getMessage(),e);
- }
- }
-
- private static void checkDir(File dir, boolean checkWritable, boolean create) throws UtilsException{
- String prefix = "Directory ["+dir.getAbsolutePath()+"] ";
- if(!dir.exists()){
- if(create){
- if(!dir.mkdir()){
- throw new UtilsException(prefix+"non esistente e creazione non riuscita");
- }
- }else{
- throw new UtilsException(prefix+"non esistente");
- }
- }
- if(!dir.canRead()){
- throw new UtilsException(prefix+"non accessibile in lettura");
- }
- if(checkWritable &&
- !dir.canWrite()){
- throw new UtilsException(prefix+"non accessibile in scrittura");
- }
- }
-
- }