NodeSenderDB.java
/*
* GovWay - A customizable API Gateway
* https://govway.org
*
* Copyright (c) 2005-2024 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.pdd.core.node;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import org.slf4j.Logger;
import org.openspcoop2.core.id.IDSoggetto;
import org.openspcoop2.pdd.config.ClassNameProperties;
import org.openspcoop2.pdd.config.OpenSPCoop2Properties;
import org.openspcoop2.pdd.core.AbstractCore;
import org.openspcoop2.pdd.core.GestoreMessaggi;
import org.openspcoop2.pdd.core.GestoreMessaggiException;
import org.openspcoop2.pdd.logger.MsgDiagnostico;
import org.openspcoop2.pdd.logger.OpenSPCoop2Logger;
import org.openspcoop2.pdd.mdb.GenericMessage;
import org.openspcoop2.utils.TipiDatabase;
import org.openspcoop2.utils.jdbc.IJDBCAdapter;
import org.openspcoop2.utils.jdbc.JDBCAdapterFactory;
import org.openspcoop2.utils.resources.Loader;
/**
* Classe utilizzata per la spedizione di messaggi contenuti nell'architettura di OpenSPCoop (versione JMS).
*
* @author Poli Andrea (apoli@link.it)
* @author Tronci Fabio (tronci@link.it)
* @author $Author$
* @version $Rev$, $Date$
*/
public class NodeSenderDB extends AbstractCore implements INodeSender{
private static final String ID_MODULO= "NODE_SENDER_DB";
/** adapterJDBC di OpenSPCoop di OpenSPCoop */
private static IJDBCAdapter adapter=null;
private static OpenSPCoop2Properties propertiesReader;
private static Logger log;
private static boolean isInitialized = false;
private static synchronized void initStaticResources() throws NodeException{
if (!NodeSenderDB.isInitialized) {
try{
NodeSenderDB.propertiesReader = OpenSPCoop2Properties.getInstance();
NodeSenderDB.log = OpenSPCoop2Logger.getLoggerOpenSPCoopCore();
String jdbcAdapter = NodeSenderDB.propertiesReader.getRepositoryJDBCAdapter();
if(NodeSenderDB.propertiesReader.getDatabaseType()!=null && TipiDatabase.DEFAULT.equals(jdbcAdapter)){
NodeSenderDB.adapter = JDBCAdapterFactory.createJDBCAdapter(NodeSenderDB.propertiesReader.getDatabaseType());
}
else{
// initDBManager();
ClassNameProperties classNameProperties = ClassNameProperties.getInstance();
// Ricerco connettore
String adapterClass = classNameProperties.getJDBCAdapter(jdbcAdapter);
if(adapterClass == null){
NodeSenderDB.log.error("Inizializzione GestoreMessaggi non riuscita: AdapterClass non registrata ["+NodeSenderDB.propertiesReader.getRepositoryJDBCAdapter()+"]");
}
NodeSenderDB.adapter = (IJDBCAdapter) Loader.getInstance().newInstance(adapterClass);
}
}catch(Exception e){
NodeSenderDB.log.error("Inizializzione GestoreMessaggi non riuscita: AdapterClass non trovata ["+NodeSenderDB.propertiesReader.getRepositoryJDBCAdapter()+"]:"+e.getMessage(),e);
System.out.println("Inizializzazione NODESENDER FALLITA: " + e);
return;
}
NodeSenderDB.isInitialized=true;
}
}
private void init() throws NodeException{
if (!NodeSenderDB.isInitialized) {
initStaticResources();
}
}
/**
* Spedizione di un messaggio
*
* @param msg Messaggio
* @param destinazione Modulo di destinazione del msg
* @param codicePorta Codice Porta per cui effettuare la receive
* @param idModulo Nodo destinatario per cui effettuare la ricezione.
* @param idMessaggio Identificativo del messaggio
*
*/
@Override
public void send(Serializable msg, String destinazione, MsgDiagnostico msgDiag,
IDSoggetto codicePorta, String idModulo, String idMessaggio, GestoreMessaggi gm) throws NodeException {
if (!NodeSenderDB.isInitialized) try { init(); } catch (Exception e) {
OpenSPCoop2Logger.getLoggerOpenSPCoopCore().error("Inizializzazione NODESENDER FALLITA",e);
return;
}
MessaggioSerializzato messaggioSerializzato = new MessaggioSerializzato(idMessaggio, (GenericMessage) msg);
//serializzao il messaggio:
ByteArrayOutputStream bos = new ByteArrayOutputStream() ;
byte[] msgByte;
try {
ObjectOutput out = new ObjectOutputStream(bos);
out.writeObject(messaggioSerializzato);
out.close();
msgByte = bos.toByteArray();
} catch (IOException e) {
NodeSenderDB.log.error(NodeSenderDB.ID_MODULO + " Serializzazione messaggio fallita: "+e.getMessage(),e);
return;
}
try {
gm.aggiungiMessaggioSerializzato(NodeSenderDB.adapter,msgByte);
} catch (GestoreMessaggiException e) {
throw new NodeException(e);
}
msgDiag.highDebug("ObjectMessage send (NOP operation).");
}
}