NodeSenderDB.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.core.node;

  21. import java.io.ByteArrayOutputStream;
  22. import java.io.IOException;
  23. import java.io.ObjectOutput;
  24. import java.io.ObjectOutputStream;
  25. import java.io.Serializable;

  26. import org.slf4j.Logger;
  27. import org.openspcoop2.core.id.IDSoggetto;
  28. import org.openspcoop2.pdd.config.ClassNameProperties;
  29. import org.openspcoop2.pdd.config.OpenSPCoop2Properties;
  30. import org.openspcoop2.pdd.core.AbstractCore;
  31. import org.openspcoop2.pdd.core.GestoreMessaggi;
  32. import org.openspcoop2.pdd.core.GestoreMessaggiException;
  33. import org.openspcoop2.pdd.logger.MsgDiagnostico;
  34. import org.openspcoop2.pdd.logger.OpenSPCoop2Logger;
  35. import org.openspcoop2.pdd.mdb.GenericMessage;
  36. import org.openspcoop2.utils.TipiDatabase;
  37. import org.openspcoop2.utils.jdbc.IJDBCAdapter;
  38. import org.openspcoop2.utils.jdbc.JDBCAdapterFactory;
  39. import org.openspcoop2.utils.resources.Loader;

  40. /**
  41.  * Classe utilizzata per la spedizione di messaggi contenuti nell'architettura di OpenSPCoop (versione JMS).
  42.  *
  43.  * @author Poli Andrea (apoli@link.it)
  44.  * @author Tronci Fabio (tronci@link.it)
  45.  * @author $Author$
  46.  * @version $Rev$, $Date$
  47.  */

  48. public class NodeSenderDB extends AbstractCore implements INodeSender{

  49.     private static final String ID_MODULO= "NODE_SENDER_DB";

  50.     /** adapterJDBC di OpenSPCoop di OpenSPCoop */
  51.     private static IJDBCAdapter adapter=null;

  52.     private static OpenSPCoop2Properties propertiesReader;
  53.     private static Logger log;


  54.     private static boolean isInitialized = false;

  55.     private static synchronized void initStaticResources() throws NodeException{
  56.         if (!NodeSenderDB.isInitialized) {
  57.             try{

  58.                 NodeSenderDB.propertiesReader = OpenSPCoop2Properties.getInstance();
  59.                 NodeSenderDB.log = OpenSPCoop2Logger.getLoggerOpenSPCoopCore();
  60.                
  61.                 String jdbcAdapter = NodeSenderDB.propertiesReader.getRepositoryJDBCAdapter();
  62.                 if(NodeSenderDB.propertiesReader.getDatabaseType()!=null && TipiDatabase.DEFAULT.equals(jdbcAdapter)){
  63.                     NodeSenderDB.adapter = JDBCAdapterFactory.createJDBCAdapter(NodeSenderDB.propertiesReader.getDatabaseType());
  64.                 }
  65.                 else{
  66.                     //  initDBManager();
  67.                     ClassNameProperties classNameProperties = ClassNameProperties.getInstance();
  68.                     //      Ricerco connettore
  69.                     String adapterClass = classNameProperties.getJDBCAdapter(jdbcAdapter);
  70.                     if(adapterClass == null){
  71.                         NodeSenderDB.log.error("Inizializzione GestoreMessaggi non riuscita: AdapterClass non registrata ["+NodeSenderDB.propertiesReader.getRepositoryJDBCAdapter()+"]");
  72.                     }
  73.                     NodeSenderDB.adapter = (IJDBCAdapter) Loader.getInstance().newInstance(adapterClass);
  74.                 }
  75.             }catch(Exception e){
  76.                 NodeSenderDB.log.error("Inizializzione GestoreMessaggi non riuscita: AdapterClass non trovata ["+NodeSenderDB.propertiesReader.getRepositoryJDBCAdapter()+"]:"+e.getMessage(),e);
  77.                 System.out.println("Inizializzazione NODESENDER FALLITA: " + e);
  78.                 return;
  79.             }
  80.             NodeSenderDB.isInitialized=true;
  81.         }
  82.     }
  83.    
  84.     private void init() throws NodeException{
  85.         if (!NodeSenderDB.isInitialized) {
  86.             initStaticResources();  
  87.         }
  88.     }




  89.     /**
  90.      * Spedizione di un messaggio  
  91.      *
  92.      * @param msg Messaggio
  93.      * @param destinazione Modulo di destinazione del msg
  94.      * @param codicePorta Codice Porta per cui effettuare la receive
  95.      * @param idModulo Nodo destinatario per cui effettuare la ricezione.
  96.      * @param idMessaggio Identificativo del messaggio
  97.      *
  98.      */
  99.     @Override
  100.     public void send(Serializable msg, String destinazione, MsgDiagnostico msgDiag,
  101.             IDSoggetto codicePorta, String idModulo, String idMessaggio, GestoreMessaggi gm) throws NodeException {

  102.         if (!NodeSenderDB.isInitialized) try { init(); } catch (Exception e) {
  103.             OpenSPCoop2Logger.getLoggerOpenSPCoopCore().error("Inizializzazione NODESENDER FALLITA",e);
  104.             return;
  105.         }

  106.         MessaggioSerializzato messaggioSerializzato = new MessaggioSerializzato(idMessaggio, (GenericMessage) msg);

  107.         //serializzao il messaggio:
  108.         ByteArrayOutputStream bos = new ByteArrayOutputStream() ;
  109.         byte[] msgByte;
  110.         try {
  111.             ObjectOutput out = new ObjectOutputStream(bos);
  112.             out.writeObject(messaggioSerializzato);
  113.             out.close();
  114.             msgByte = bos.toByteArray();    
  115.         } catch (IOException e) {
  116.             NodeSenderDB.log.error(NodeSenderDB.ID_MODULO + " Serializzazione messaggio fallita: "+e.getMessage(),e);
  117.             return;
  118.         }

  119.         try {
  120.             gm.aggiungiMessaggioSerializzato(NodeSenderDB.adapter,msgByte);
  121.         } catch (GestoreMessaggiException e) {
  122.             throw new NodeException(e);
  123.         }


  124.         msgDiag.highDebug("ObjectMessage send (NOP operation).");
  125.     }


  126. }