Imbustamento.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.mdb;

  21. import java.util.Date;

  22. import org.openspcoop2.core.config.PortaDelegata;
  23. import org.openspcoop2.core.config.ServizioApplicativo;
  24. import org.openspcoop2.core.config.driver.DriverConfigurazioneNotFound;
  25. import org.openspcoop2.core.constants.TipoPdD;
  26. import org.openspcoop2.core.id.IDServizio;
  27. import org.openspcoop2.core.id.IDServizioApplicativo;
  28. import org.openspcoop2.core.id.IDSoggetto;
  29. import org.openspcoop2.message.OpenSPCoop2Message;
  30. import org.openspcoop2.message.OpenSPCoop2MessageFactory;
  31. import org.openspcoop2.message.constants.MessageRole;
  32. import org.openspcoop2.message.utils.MessageUtilities;
  33. import org.openspcoop2.pdd.config.ConfigurazionePdDManager;
  34. import org.openspcoop2.pdd.config.RichiestaDelegata;
  35. import org.openspcoop2.pdd.core.CostantiPdD;
  36. import org.openspcoop2.pdd.core.EJBUtils;
  37. import org.openspcoop2.pdd.core.GestoreMessaggi;
  38. import org.openspcoop2.pdd.core.PdDContext;
  39. import org.openspcoop2.pdd.core.state.IOpenSPCoopState;
  40. import org.openspcoop2.pdd.core.state.OpenSPCoopState;
  41. import org.openspcoop2.pdd.core.state.OpenSPCoopStateException;
  42. import org.openspcoop2.pdd.core.state.OpenSPCoopStateful;
  43. import org.openspcoop2.pdd.core.state.OpenSPCoopStateless;
  44. import org.openspcoop2.pdd.logger.MsgDiagnosticiProperties;
  45. import org.openspcoop2.pdd.logger.MsgDiagnostico;
  46. import org.openspcoop2.pdd.services.error.RicezioneContenutiApplicativiInternalErrorGenerator;
  47. import org.openspcoop2.protocol.engine.constants.Costanti;
  48. import org.openspcoop2.protocol.engine.driver.ConsegnaInOrdine;
  49. import org.openspcoop2.protocol.engine.driver.ProfiloDiCollaborazione;
  50. import org.openspcoop2.protocol.engine.driver.RepositoryBuste;
  51. import org.openspcoop2.protocol.engine.driver.Riscontri;
  52. import org.openspcoop2.protocol.registry.RegistroServiziManager;
  53. import org.openspcoop2.protocol.sdk.Busta;
  54. import org.openspcoop2.protocol.sdk.IProtocolFactory;
  55. import org.openspcoop2.protocol.sdk.Integrazione;
  56. import org.openspcoop2.protocol.sdk.ProtocolException;
  57. import org.openspcoop2.protocol.sdk.Servizio;
  58. import org.openspcoop2.protocol.sdk.builder.ProprietaErroreApplicativo;
  59. import org.openspcoop2.protocol.sdk.config.IProtocolConfiguration;
  60. import org.openspcoop2.protocol.sdk.config.IProtocolVersionManager;
  61. import org.openspcoop2.protocol.sdk.config.ITraduttore;
  62. import org.openspcoop2.protocol.sdk.constants.CodiceErroreIntegrazione;
  63. import org.openspcoop2.protocol.sdk.constants.ErroreIntegrazione;
  64. import org.openspcoop2.protocol.sdk.constants.ErroriIntegrazione;
  65. import org.openspcoop2.protocol.sdk.constants.FunzionalitaProtocollo;
  66. import org.openspcoop2.protocol.sdk.constants.InitialIdConversationType;
  67. import org.openspcoop2.protocol.sdk.constants.Inoltro;
  68. import org.openspcoop2.protocol.sdk.constants.IntegrationFunctionError;
  69. import org.openspcoop2.protocol.sdk.constants.TipoOraRegistrazione;
  70. import org.openspcoop2.protocol.sdk.state.RequestInfo;
  71. import org.openspcoop2.protocol.sdk.state.StatelessMessage;
  72. import org.openspcoop2.utils.Utilities;
  73. import org.openspcoop2.utils.date.DateManager;
  74. import org.openspcoop2.utils.date.DateUtils;
  75. import org.slf4j.Logger;

  76. /**
  77.  * Contiene la libreria Imbustamento
  78.  *
  79.  * @author Poli Andrea (apoli@link.it)
  80.  * @author Tronci Fabio (tronci@link.it)
  81.  * @author $Author$
  82.  * @version $Rev$, $Date$
  83.  */
  84. public class Imbustamento extends GenericLib{

  85.     public static final String ID_MODULO = "Imbustamento";

  86.     public Imbustamento(Logger log) throws GenericLibException {
  87.         super(Imbustamento.ID_MODULO, log);
  88.         inizializza();
  89.     }  

  90.     @Override
  91.     protected synchronized void inizializza() throws GenericLibException {
  92.         super.inizializza();
  93.     }

  94.     @Override
  95.     public EsitoLib _onMessage(IOpenSPCoopState openspcoopstate,
  96.             RegistroServiziManager registroServiziManager,ConfigurazionePdDManager configurazionePdDManager,
  97.             MsgDiagnostico msgDiag) throws OpenSPCoopStateException {

  98.         EsitoLib esito = new EsitoLib();

  99.         ImbustamentoMessage imbustamentoMsg = (ImbustamentoMessage) openspcoopstate.getMessageLib();
  100.        
  101.         /* PddContext */
  102.         PdDContext pddContext = imbustamentoMsg.getPddContext();
  103.         String idTransazione = PdDContext.getValue(org.openspcoop2.core.constants.Costanti.ID_TRANSAZIONE, pddContext);
  104.         RequestInfo requestInfo = (RequestInfo) pddContext.getObject(org.openspcoop2.core.constants.Costanti.REQUEST_INFO);
  105.        
  106.         /* Protocol Factory */
  107.         IProtocolFactory<?> protocolFactory = null;
  108.         IProtocolVersionManager protocolManager = null;
  109.         ITraduttore traduttore = null;
  110.         try{
  111.             protocolFactory = this.protocolFactoryManager.getProtocolFactoryByName((String) pddContext.getObject(org.openspcoop2.core.constants.Costanti.PROTOCOL_NAME));
  112.             protocolManager = protocolFactory.createProtocolVersionManager(imbustamentoMsg.getRichiestaDelegata().getProfiloGestione());
  113.             traduttore = protocolFactory.createTraduttore();
  114.         }catch(Exception e){
  115.             msgDiag.logErroreGenerico(e, "ProtocolFactory.instanziazione");
  116.             openspcoopstate.releaseResource();
  117.             esito.setEsitoInvocazione(false);
  118.             esito.setStatoInvocazioneErroreNonGestito(e);
  119.             return esito;
  120.         }
  121.        
  122.         msgDiag.setPddContext(pddContext, protocolFactory);
  123.        
  124.         /* ID e tipo di implementazione PdD con cui interoperare */
  125.         String idMessageRequest = openspcoopstate.getIDMessaggioSessione();
  126.         String implementazionePdDDestinatario = imbustamentoMsg.getImplementazionePdDSoggettoDestinatario();
  127.        
  128.         RichiestaDelegata richiestaDelegata = imbustamentoMsg.getRichiestaDelegata();
  129.         if(richiestaDelegata==null) {
  130.             msgDiag.logErroreGenerico("RichiestaDelegata is null", "RichiestaDelegata.checkNull");
  131.             openspcoopstate.releaseResource();
  132.             esito.setEsitoInvocazione(false);
  133.             return esito;
  134.         }
  135.         IDSoggetto identitaPdD = imbustamentoMsg.getRichiestaDelegata().getDominio();
  136.         TipoPdD tipoPdD = TipoPdD.DELEGATA;
  137.         msgDiag.setDominio(identitaPdD);  // imposto anche il dominio nel msgDiag

  138.         // Aggiornamento Informazioni messaggio diagnostico
  139.         msgDiag.setPrefixMsgPersonalizzati(MsgDiagnosticiProperties.MSG_DIAG_IMBUSTAMENTO);
  140.         msgDiag.setIdMessaggioRichiesta(idMessageRequest);
  141.         msgDiag.addKeyword(CostantiPdD.KEY_ID_MESSAGGIO_RICHIESTA, idMessageRequest);
  142.         if(msgDiag.getPorta()==null) {
  143.             if(richiestaDelegata!=null && richiestaDelegata.getIdPortaDelegata()!=null) {
  144.                 msgDiag.updatePorta(tipoPdD, richiestaDelegata.getIdPortaDelegata().getNome(), requestInfo);
  145.             }
  146.         }
  147.         msgDiag.setFruitore(richiestaDelegata.getIdSoggettoFruitore());
  148.         msgDiag.addKeywords(richiestaDelegata.getIdSoggettoFruitore());
  149.         msgDiag.setServizio(richiestaDelegata.getIdServizio());
  150.         msgDiag.addKeywords(richiestaDelegata.getIdServizio());
  151.         msgDiag.setServizioApplicativo(richiestaDelegata.getServizioApplicativo());
  152.         msgDiag.addKeyword(CostantiPdD.KEY_SA_FRUITORE, richiestaDelegata.getServizioApplicativo());
  153.         if(richiestaDelegata.getProfiloCollaborazione()!=null)
  154.             msgDiag.addKeyword(CostantiPdD.KEY_PROFILO_COLLABORAZIONE,traduttore.toString(richiestaDelegata.getProfiloCollaborazione()));
  155.         msgDiag.setIdCorrelazioneApplicativa(richiestaDelegata.getIdCorrelazioneApplicativa());
  156.         msgDiag.addKeyword(CostantiPdD.KEY_ID_CORRELAZIONE_APPLICATIVA, richiestaDelegata.getIdCorrelazioneApplicativa());
  157.         msgDiag.addKeyword(CostantiPdD.KEY_FUNZIONALITA_COLLABORAZIONE, imbustamentoMsg.getInfoServizio().getCollaborazione()+"");
  158.         msgDiag.addKeyword(CostantiPdD.KEY_FUNZIONALITA_CONFERMA_RICEZIONE, imbustamentoMsg.getInfoServizio().getConfermaRicezione()+"");
  159.         msgDiag.addKeyword(CostantiPdD.KEY_FUNZIONALITA_FILTRO_DUPLICATI, Inoltro.SENZA_DUPLICATI.equals(imbustamentoMsg.getInfoServizio().getInoltro()) + "");
  160.    
  161.                
  162.         //  ProprietaErroreApplicativo  
  163.         ProprietaErroreApplicativo proprietaErroreAppl = richiestaDelegata.getFault();
  164.         proprietaErroreAppl.setIdModulo(Imbustamento.ID_MODULO);
  165.        
  166.         // GeneratoreErrore
  167.         RicezioneContenutiApplicativiInternalErrorGenerator generatoreErrore = null;
  168.         try{
  169.             generatoreErrore = new RicezioneContenutiApplicativiInternalErrorGenerator(this.log, this.idModulo, requestInfo);
  170.             generatoreErrore.updateInformazioniCooperazione(richiestaDelegata.getIdSoggettoFruitore(), richiestaDelegata.getIdServizio());
  171.             generatoreErrore.updateInformazioniCooperazione(richiestaDelegata.getServizioApplicativo());
  172.             generatoreErrore.updateProprietaErroreApplicativo(proprietaErroreAppl);
  173.         }catch(Exception e){
  174.             msgDiag.logErroreGenerico(e, "RicezioneContenutiApplicativiGeneratoreErrore.instanziazione");
  175.             openspcoopstate.releaseResource();
  176.             esito.setEsitoInvocazione(false);
  177.             esito.setStatoInvocazioneErroreNonGestito(e);
  178.             return esito;
  179.         }
  180.        

  181.         /* ------------------ Inizializzo stato OpenSPCoop  --------------- */
  182.         msgDiag.mediumDebug("Inizializzo stato per la gestione della richiesta...");
  183.         openspcoopstate.initResource(identitaPdD, Imbustamento.ID_MODULO,idTransazione);
  184.         registroServiziManager = registroServiziManager.refreshState(openspcoopstate.getStatoRichiesta(),openspcoopstate.getStatoRisposta());
  185.         configurazionePdDManager = configurazionePdDManager.refreshState(registroServiziManager);
  186.         msgDiag.updateState(configurazionePdDManager);


  187.         /* ------------------ Inizializzazione Contesto di gestione  --------------- */
  188.         msgDiag.mediumDebug("Inizializzo contesto per la gestione...");
  189.         // EJBUtils (per eventuali errori)
  190.         EJBUtils ejbUtils = null;
  191.         try{
  192.             ejbUtils = new EJBUtils(identitaPdD,tipoPdD,Imbustamento.ID_MODULO,idMessageRequest,
  193.                     idMessageRequest,Costanti.OUTBOX,openspcoopstate,msgDiag,false,
  194.                     imbustamentoMsg.getImplementazionePdDSoggettoMittente(),
  195.                     imbustamentoMsg.getImplementazionePdDSoggettoDestinatario(),
  196.                     imbustamentoMsg.getRichiestaDelegata().getProfiloGestione(),pddContext);
  197.         }catch(Exception e){
  198.             msgDiag.logErroreGenerico(e, "EJBUtils.new");
  199.             openspcoopstate.releaseResource();
  200.             esito.setEsitoInvocazione(false);
  201.             esito.setStatoInvocazioneErroreNonGestito(e);
  202.             return esito;
  203.         }

  204.         // Oneway versione 11
  205.         boolean oneWayVersione11 = imbustamentoMsg.isOneWayVersione11();
  206.         ejbUtils.setOneWayVersione11(oneWayVersione11);

  207.         // Gestori funzionalita'
  208.         RepositoryBuste repositoryBuste = new RepositoryBuste(openspcoopstate.getStatoRichiesta(), true,protocolFactory);
  209.         Riscontri gestoreRiscontri = new Riscontri(openspcoopstate.getStatoRichiesta());
  210.         ProfiloDiCollaborazione profiloCollaborazione = null;
  211.         try{
  212.             profiloCollaborazione = new ProfiloDiCollaborazione(openspcoopstate.getStatoRichiesta(),protocolFactory);
  213.         }catch(Exception e){
  214.             msgDiag.logErroreGenerico(e, "ProfiloDiCollaborazione.new");
  215.             openspcoopstate.releaseResource();
  216.             esito.setEsitoInvocazione(false);
  217.             esito.setStatoInvocazioneErroreNonGestito(e);
  218.             return esito;
  219.         }
  220.         ConsegnaInOrdine ordineConsegna = new ConsegnaInOrdine(openspcoopstate.getStatoRichiesta(),protocolFactory);
  221.         GestoreMessaggi msgRequest = null;
  222.         GestoreMessaggi msgOK = null; // Evenutuale busta OK (rigirata a ID_MODULO o a RICEZIONE_CONTENUTI_APPLICATIVI)

  223.         Servizio infoServizio = imbustamentoMsg.getInfoServizio();
  224.         String riferimentoServizioCorrelato = imbustamentoMsg.getRiferimentoServizioCorrelato();
  225.         boolean isServizioCorrelato = infoServizio.isCorrelato();
  226.         IDServizio idServizio = richiestaDelegata.getIdServizio();
  227.         IDSoggetto soggettoFruitore = richiestaDelegata.getIdSoggettoFruitore();
  228.        

  229.         // Punto di inizio per la transazione.
  230.         PortaDelegata pd = null;
  231.         ServizioApplicativo sa = null;
  232.         try{
  233.            

  234.             /**---- Check Utilizzo Consegna Risposta Asincrona */
  235.             msgDiag.mediumDebug("Check utilizzo consegna risposta asincrona...");
  236.             // Non deve essere utilizzata solo nel caso di richiesta con profilo AsincronoSimmetrico
  237.             if( !(infoServizio.getProfiloDiCollaborazione().equals(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_SIMMETRICO) &&
  238.                     riferimentoServizioCorrelato==null
  239.                     && isServizioCorrelato==false) ){
  240.                 // di default la ricezioneAsincrona viene utilizzata.
  241.                 // Per i casi di :
  242.                 // - profiloOneWay
  243.                 // - profiloSincrono
  244.                 // - profiloAsincronoSimmetrico solo in consegna risposta
  245.                 // - profiloAsincronoAsimmetrico
  246.                 richiestaDelegata.setUtilizzoConsegnaAsincrona(true);
  247.             }


  248.             Utilities.printFreeMemory("Imbustamento - Costruzione busta ...");


  249.             /* ---  Costruzione/Registrazione Busta  ----- */
  250.             msgDiag.mediumDebug("Costruzione busta ...");
  251.             Busta busta = new Busta(protocolFactory.getProtocol());

  252.             // identificatore del servizio richiesto
  253.             busta.setTipoDestinatario(idServizio.getSoggettoErogatore().getTipo());
  254.             busta.setDestinatario(idServizio.getSoggettoErogatore().getNome());
  255.             busta.setIdentificativoPortaDestinatario(idServizio.getSoggettoErogatore().getCodicePorta());
  256.             busta.setIndirizzoDestinatario(imbustamentoMsg.getIndirizzoSoggettoDestinatario());
  257.            
  258.             busta.setVersioneServizio(idServizio.getVersione());
  259.             busta.setServizio(idServizio.getNome());
  260.             busta.setTipoServizio(idServizio.getTipo());
  261.             busta.setAzione(idServizio.getAzione());

  262.             // mittente della richiesta
  263.             busta.setTipoMittente(soggettoFruitore.getTipo());
  264.             busta.setMittente(soggettoFruitore.getNome());
  265.             busta.setIdentificativoPortaMittente(soggettoFruitore.getCodicePorta());
  266.             busta.setIndirizzoMittente(imbustamentoMsg.getIndirizzoSoggettoMittente());
  267.            
  268.             busta.setServizioApplicativoFruitore(richiestaDelegata.getServizioApplicativo());

  269.             // Informazioni protocollo
  270.             msgDiag.highDebug("Costruzione Busta con ID = "+idMessageRequest);
  271.             busta.setID(idMessageRequest);

  272.             Date oraRegistrazione = DateManager.getDate();
  273.             msgDiag.highDebug("Costruzione Busta in data : ["+oraRegistrazione+"]");
  274.             busta.setOraRegistrazione(oraRegistrazione);
  275.             TipoOraRegistrazione tipoOraRegistrazione = this.propertiesReader.getTipoTempoBusta(implementazionePdDDestinatario);
  276.             busta.setTipoOraRegistrazione(tipoOraRegistrazione,protocolFactory.createTraduttore().toString(tipoOraRegistrazione));
  277.             busta.setScadenza(infoServizio.getScadenza());
  278.             long scadenzaBusta = infoServizio.getScadenzaMinuti();
  279.             if(scadenzaBusta<=0){
  280.                 scadenzaBusta = this.propertiesReader.getRepositoryIntervalloScadenzaMessaggi();
  281.             }
  282.            
  283.             switch (protocolManager.getFiltroDuplicati(infoServizio)) {
  284.             case ABILITATA:
  285.                 busta.setInoltro(Inoltro.SENZA_DUPLICATI,protocolFactory.createTraduttore().toString(Inoltro.SENZA_DUPLICATI));
  286.                 break;
  287.             case DISABILITATA:
  288.                 busta.setInoltro(Inoltro.CON_DUPLICATI,protocolFactory.createTraduttore().toString(Inoltro.CON_DUPLICATI));
  289.                 break;
  290.             default:
  291.                 busta.setInoltro(infoServizio.getInoltro(),protocolFactory.createTraduttore().toString(infoServizio.getInoltro()));
  292.                 break;
  293.             }
  294.                
  295.             boolean consegnaAffidabile = false;
  296.             switch (protocolManager.getConsegnaAffidabile(infoServizio)) {
  297.             case ABILITATA:
  298.                 consegnaAffidabile = true;
  299.                 break;
  300.             case DISABILITATA:
  301.                 consegnaAffidabile = false;
  302.                 break;
  303.             default:
  304.                 consegnaAffidabile = this.propertiesReader.isGestioneRiscontri(implementazionePdDDestinatario) && infoServizio.getConfermaRicezione();
  305.                 break;
  306.             }
  307.            
  308.             boolean idCollaborazione = false;
  309.             switch (protocolManager.getCollaborazione(infoServizio)) {
  310.             case ABILITATA:
  311.                 idCollaborazione = true;
  312.                 break;
  313.             case DISABILITATA:
  314.                 idCollaborazione = false;
  315.                 break;
  316.             default:
  317.                 idCollaborazione = this.propertiesReader.isGestioneElementoCollaborazione(implementazionePdDDestinatario) && infoServizio.getCollaborazione();
  318.                 break;
  319.             }
  320.             String idCollaborazioneCapostipite = null;
  321.             if(idCollaborazione) {
  322.                 InitialIdConversationType initial = protocolFactory.createProtocolConfiguration().isGenerateInitialIdConversation(TipoPdD.DELEGATA, FunzionalitaProtocollo.COLLABORAZIONE);
  323.                 if(InitialIdConversationType.ID_TRANSAZIONE.equals(initial)) {
  324.                     idCollaborazioneCapostipite = idTransazione;
  325.                 }
  326.                 else if(InitialIdConversationType.ID_MESSAGGIO.equals(initial)) {
  327.                     idCollaborazioneCapostipite = idMessageRequest;
  328.                 }
  329.             }
  330.            
  331.             boolean idRiferimentoMessaggioRichiesta = false;
  332.             switch (protocolManager.getIdRiferimentoRichiesta(infoServizio)) {
  333.             case ABILITATA:
  334.                 idRiferimentoMessaggioRichiesta = true;
  335.                 break;
  336.             case DISABILITATA:
  337.                 idRiferimentoMessaggioRichiesta = false;
  338.                 break;
  339.             default:
  340.                 idRiferimentoMessaggioRichiesta = this.propertiesReader.isGestioneElementoIdRiferimentoRichiesta(implementazionePdDDestinatario) && infoServizio.getIdRiferimentoRichiesta();
  341.                 break;
  342.             }
  343.            
  344.             boolean consegnaInOrdine = false;
  345.             switch (protocolManager.getConsegnaInOrdine(infoServizio)) {
  346.             case ABILITATA:
  347.                 consegnaInOrdine = true;
  348.                 break;
  349.             case DISABILITATA:
  350.                 consegnaInOrdine = false;
  351.                 break;
  352.             default:
  353.                 consegnaInOrdine = this.propertiesReader.isGestioneConsegnaInOrdine(implementazionePdDDestinatario) && infoServizio.getOrdineConsegna();
  354.                 break;
  355.             }
  356.            
  357.            
  358.            
  359.                        
  360.             /* ----------- ConsegnaAffidabile ------------- */
  361.             if( consegnaAffidabile )
  362.                 busta.setConfermaRicezione(true);
  363.             else
  364.                 busta.setConfermaRicezione(false);

  365.                        

  366.             /* ----------- Lettura PortaDelegata e Servizio Applicativo ------------- */
  367.             pd = configurazionePdDManager.getPortaDelegata(richiestaDelegata.getIdPortaDelegata(), requestInfo);
  368.             try{
  369.                 IDServizioApplicativo idSA = new IDServizioApplicativo();
  370.                 idSA.setNome(richiestaDelegata.getServizioApplicativo());
  371.                 idSA.setIdSoggettoProprietario(richiestaDelegata.getIdSoggettoFruitore());
  372.                 sa = configurazionePdDManager.getServizioApplicativo(idSA, requestInfo);
  373.             }catch(DriverConfigurazioneNotFound e){
  374.                 if(CostantiPdD.SERVIZIO_APPLICATIVO_ANONIMO.equals(richiestaDelegata.getServizioApplicativo())==false)
  375.                     throw e;
  376.             }
  377.            
  378.                    
  379.             // ------------- Controllo funzionalita di protocollo richieste siano compatibili con il protocollo -----------------------------
  380.             try{
  381.                
  382.                 // NOTA: Usare getIntegrationServiceBinding poichè le funzionalità si riferiscono al tipo di integrazione scelta
  383.                
  384.                 IProtocolConfiguration protocolConfiguration = protocolFactory.createProtocolConfiguration();
  385.                 if(protocolConfiguration.isSupportato(requestInfo.getIntegrationServiceBinding(),infoServizio.getProfiloDiCollaborazione())==false){
  386.                     throw new Exception("Profilo di Collaborazione ["+infoServizio.getProfiloDiCollaborazione().getEngineValue()+"]");
  387.                 }
  388.                 if(busta.getInoltro()!=null && Inoltro.SENZA_DUPLICATI.equals(busta.getInoltro())){
  389.                     if(protocolConfiguration.isSupportato(requestInfo.getIntegrationServiceBinding(),FunzionalitaProtocollo.FILTRO_DUPLICATI)==false){
  390.                         throw new Exception(FunzionalitaProtocollo.FILTRO_DUPLICATI.getEngineValue());
  391.                     }
  392.                 }
  393.                 if(consegnaAffidabile){
  394.                     if(protocolConfiguration.isSupportato(requestInfo.getIntegrationServiceBinding(),FunzionalitaProtocollo.CONFERMA_RICEZIONE)==false){
  395.                         throw new Exception(FunzionalitaProtocollo.CONFERMA_RICEZIONE.getEngineValue());
  396.                     }
  397.                 }
  398.                 if(idCollaborazione){
  399.                     if(protocolConfiguration.isSupportato(requestInfo.getIntegrationServiceBinding(),FunzionalitaProtocollo.COLLABORAZIONE)==false){
  400.                         throw new Exception(FunzionalitaProtocollo.COLLABORAZIONE.getEngineValue());
  401.                     }
  402.                 }
  403.                 if(idRiferimentoMessaggioRichiesta){
  404.                     if(protocolConfiguration.isSupportato(requestInfo.getIntegrationServiceBinding(),FunzionalitaProtocollo.RIFERIMENTO_ID_RICHIESTA)==false){
  405.                         throw new Exception(FunzionalitaProtocollo.RIFERIMENTO_ID_RICHIESTA.getEngineValue());
  406.                     }
  407.                 }
  408.                 if(consegnaInOrdine){
  409.                     if(protocolConfiguration.isSupportato(requestInfo.getIntegrationServiceBinding(),FunzionalitaProtocollo.CONSEGNA_IN_ORDINE)==false){
  410.                         throw new Exception(FunzionalitaProtocollo.CONSEGNA_IN_ORDINE.getEngineValue());
  411.                     }
  412.                 }
  413.                 if(infoServizio.getScadenza()!=null){
  414.                     if(protocolConfiguration.isSupportato(requestInfo.getIntegrationServiceBinding(),FunzionalitaProtocollo.SCADENZA)==false){
  415.                         throw new Exception(FunzionalitaProtocollo.SCADENZA.getEngineValue());
  416.                     }
  417.                 }
  418.                 if(configurazionePdDManager.isGestioneManifestAttachments(pd,protocolFactory)){
  419.                     if(protocolConfiguration.isSupportato(requestInfo.getIntegrationServiceBinding(),FunzionalitaProtocollo.MANIFEST_ATTACHMENTS)==false){
  420.                         throw new Exception(FunzionalitaProtocollo.MANIFEST_ATTACHMENTS.getEngineValue());
  421.                     }
  422.                 }          
  423.             }catch(Exception e){    
  424.                 msgDiag.addKeywordErroreProcessamento(e);
  425.                 msgDiag.logPersonalizzato("protocolli.funzionalita.unsupported");
  426.                 OpenSPCoop2Message responseMessageError =
  427.                         generatoreErrore.build(pddContext,IntegrationFunctionError.NOT_SUPPORTED_BY_PROTOCOL,
  428.                                 ErroriIntegrazione.ERRORE_439_FUNZIONALITA_NOT_SUPPORTED_BY_PROTOCOL.
  429.                                 getErrore439_FunzionalitaNotSupportedByProtocol(e.getMessage(), protocolFactory),e,
  430.                                 null);
  431.                 ejbUtils.sendRispostaApplicativaErrore(responseMessageError,richiestaDelegata,pd,sa);
  432.                 openspcoopstate.releaseResource();
  433.                 esito.setEsitoInvocazione(true);
  434.                 esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
  435.                         msgDiag.getMessaggio_replaceKeywords("protocolli.funzionalita.unsupported"));
  436.                 return esito;
  437.             }
  438.            
  439.            
  440.            
  441.            
  442.            
  443.            
  444.            
  445.             /* ------------  Check Consegna in Ordine che sia con profilo OneWay
  446.                              e che rispetti vincoli  ------------- */  
  447.             // Sequenza: deve essere abilitata la consegna affidabile + la collaborazione e infine la consegna in ordine
  448.                        
  449.             if( consegnaInOrdine ){
  450.                 msgDiag.mediumDebug("Check vincoli consegna in ordine...");
  451.                 if ( infoServizio.getProfiloDiCollaborazione().equals(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ONEWAY)==false) {
  452.                     msgDiag.addKeyword(CostantiPdD.KEY_PROFILO_COLLABORAZIONE, traduttore.toString(infoServizio.getProfiloDiCollaborazione()));
  453.                     msgDiag.logPersonalizzato("consegnaInOrdine.profiloNonOneway");
  454.                     OpenSPCoop2Message responseMessageError =
  455.                             generatoreErrore.build(pddContext,IntegrationFunctionError.NOT_SUPPORTED_BY_PROTOCOL,
  456.                                     ErroriIntegrazione.ERRORE_414_CONSEGNA_IN_ORDINE_CON_PROFILO_NO_ONEWAY.getErroreIntegrazione(),null,
  457.                                 null);
  458.                     ejbUtils.sendRispostaApplicativaErrore(responseMessageError,richiestaDelegata,pd,sa);
  459.                     openspcoopstate.releaseResource();
  460.                     esito.setEsitoInvocazione(true);
  461.                     esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
  462.                             msgDiag.getMessaggio_replaceKeywords("consegnaInOrdine.profiloNonOneway"));
  463.                     return esito;
  464.                 }
  465.                 if(this.propertiesReader.isGestioneRiscontri(implementazionePdDDestinatario)==false){
  466.                     msgDiag.logPersonalizzato("consegnaInOrdine.confermaRicezioneNonRichiesta");
  467.                     OpenSPCoop2Message responseMessageError =
  468.                             generatoreErrore.build(pddContext,IntegrationFunctionError.NOT_SUPPORTED_BY_PROTOCOL,
  469.                                     ErroriIntegrazione.ERRORE_415_CONSEGNA_IN_ORDINE_SENZA_VINCOLI_RICHIESTI.getErroreIntegrazione(),null,
  470.                                 null);
  471.                     ejbUtils.sendRispostaApplicativaErrore(responseMessageError,richiestaDelegata,pd,sa);
  472.                     openspcoopstate.releaseResource();
  473.                     esito.setEsitoInvocazione(true);
  474.                     esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
  475.                             msgDiag.getMessaggio_replaceKeywords("consegnaInOrdine.confermaRicezioneNonRichiesta"));
  476.                     return esito;
  477.                 }
  478.                 if(this.propertiesReader.isGestioneElementoCollaborazione(implementazionePdDDestinatario)==false){
  479.                     msgDiag.logPersonalizzato("consegnaInOrdine.idCollaborazioneNonRichiesto");
  480.                     OpenSPCoop2Message responseMessageError =
  481.                             generatoreErrore.build(pddContext,IntegrationFunctionError.NOT_SUPPORTED_BY_PROTOCOL,
  482.                                     ErroriIntegrazione.ERRORE_415_CONSEGNA_IN_ORDINE_SENZA_VINCOLI_RICHIESTI.getErroreIntegrazione(),null,
  483.                                     null);
  484.                     ejbUtils.sendRispostaApplicativaErrore(responseMessageError,richiestaDelegata,pd,sa);
  485.                     openspcoopstate.releaseResource();
  486.                     esito.setEsitoInvocazione(true);
  487.                     esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
  488.                             msgDiag.getMessaggio_replaceKeywords("consegnaInOrdine.idCollaborazioneNonRichiesto"));
  489.                     return esito;
  490.                 }
  491.                 if(infoServizio.getCollaborazione()==false || infoServizio.getConfermaRicezione()==false || Inoltro.SENZA_DUPLICATI.equals(infoServizio.getInoltro())==false){
  492.                     msgDiag.logPersonalizzato("consegnaInOrdine.funzionalitaMancanti");
  493.                     OpenSPCoop2Message responseMessageError =
  494.                             generatoreErrore.build(pddContext,IntegrationFunctionError.NOT_SUPPORTED_BY_PROTOCOL,  
  495.                                     ErroriIntegrazione.ERRORE_415_CONSEGNA_IN_ORDINE_SENZA_VINCOLI_RICHIESTI.getErroreIntegrazione(),null,
  496.                                     null);
  497.                     ejbUtils.sendRispostaApplicativaErrore(responseMessageError,richiestaDelegata,pd,sa);
  498.                     openspcoopstate.releaseResource();
  499.                     esito.setEsitoInvocazione(true);
  500.                     esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
  501.                             msgDiag.getMessaggio_replaceKeywords("consegnaInOrdine.funzionalitaMancanti"));
  502.                     return esito;
  503.                 }
  504.             }
  505.             boolean gestioneConsegnaInOrdineAbilitata = consegnaInOrdine &&
  506.                 this.propertiesReader.isGestioneRiscontri(implementazionePdDDestinatario) &&
  507.                 this.propertiesReader.isGestioneElementoCollaborazione(implementazionePdDDestinatario) &&
  508.                 this.propertiesReader.isGestioneConsegnaInOrdine(implementazionePdDDestinatario);


  509.             /* ----------- Verifica connessione per le funzionalità che la richiedono ------------- */
  510.             if(consegnaAffidabile ||
  511.                     gestioneConsegnaInOrdineAbilitata ||
  512.                     org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_SIMMETRICO.equals(infoServizio.getProfiloDiCollaborazione())  ||
  513.                     org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_ASIMMETRICO.equals(infoServizio.getProfiloDiCollaborazione())
  514.                 ) {
  515.                 if(openspcoopstate.resourceReleased()) {
  516.                     // inizializzo
  517.                     ((OpenSPCoopState)openspcoopstate).setUseConnection(true);
  518.                     openspcoopstate.initResource(identitaPdD, this.idModulo, idTransazione);
  519.                     gestoreRiscontri.updateState(openspcoopstate.getStatoRichiesta());
  520.                     ordineConsegna.updateState(openspcoopstate.getStatoRichiesta());
  521.                     profiloCollaborazione.updateState(openspcoopstate.getStatoRichiesta());
  522.                     repositoryBuste.updateState(openspcoopstate.getStatoRichiesta());
  523.                 }
  524.             }
  525.            
  526.            
  527.            
  528.            
  529.            

  530.            
  531.            
  532.            

  533.             Utilities.printFreeMemory("Imbustamento - Gestione profilo di Collaborazione...");






  534.             /* ------------  Profilo di Collaborazione  ------------- */    
  535.             boolean generazioneMsgOK = false;
  536.             String scenarioCooperazione = null;
  537.             if(infoServizio.getProfiloDiCollaborazione().equals(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ONEWAY)) {  

  538.                 msgDiag.mediumDebug("Gestione profilo di Collaborazione OneWay ...");

  539.                 // MessaggioSingoloOneWay      
  540.                 busta.setProfiloDiCollaborazione(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ONEWAY);
  541.                 scenarioCooperazione = Costanti.SCENARIO_ONEWAY_INVOCAZIONE_SERVIZIO;

  542.                 // Collaborazione
  543.                 if( idCollaborazione ){
  544.                     if(imbustamentoMsg.getIdCollaborazione()!=null)
  545.                         busta.setCollaborazione(imbustamentoMsg.getIdCollaborazione());
  546.                     else
  547.                         busta.setCollaborazione(idCollaborazioneCapostipite);
  548.                 }
  549.                
  550.                 // RiferimentoMessaggio
  551.                 if( idRiferimentoMessaggioRichiesta ){
  552.                     if(imbustamentoMsg.getIdRiferimentoMessaggio()!=null)
  553.                         busta.setRiferimentoMessaggio(imbustamentoMsg.getIdRiferimentoMessaggio());
  554.                 }

  555.                 if(gestioneConsegnaInOrdineAbilitata && infoServizio.getOrdineConsegna()){
  556.                     if(oneWayVersione11 || openspcoopstate instanceof OpenSPCoopStateful){
  557.                         msgDiag.mediumDebug("Gestione profilo di Collaborazione OneWay (consegna in ordine)...");
  558.                         try{
  559.                             ordineConsegna.setNextSequenza_daInviare(busta);
  560.                         }catch(Exception e){
  561.                             msgDiag.logErroreGenerico(e, "ordineConsegna.setNextSequenza_daInviare");
  562.                             openspcoopstate.releaseResource();
  563.                             esito.setEsitoInvocazione(true);
  564.                             esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO, "ordineConsegna.setNextSequenza_daInviare");
  565.                             return esito;
  566.                         }
  567.                     }

  568.                 }

  569.                 // Modalita di trasmissione sincrona/asincrona
  570.                 if(configurazionePdDManager.isModalitaStateless(pd, infoServizio.getProfiloDiCollaborazione())==false){
  571.                     generazioneMsgOK = true;
  572.                 }
  573.                 else{
  574.                     generazioneMsgOK = false;
  575.                 }


  576.             } else if(infoServizio.getProfiloDiCollaborazione().equals(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.SINCRONO)) {  

  577.                 msgDiag.mediumDebug("Gestione profilo di Collaborazione Sincrono ...");

  578.                 // Profilo Sincrono    
  579.                 busta.setProfiloDiCollaborazione(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.SINCRONO);
  580.                 scenarioCooperazione = Costanti.SCENARIO_SINCRONO_INVOCAZIONE_SERVIZIO;

  581.                 try {
  582.                     msgDiag.mediumDebug("Gestione profilo di Collaborazione Sincrono (Registrazione Busta da inviare)...");
  583.                     profiloCollaborazione.registraBustaInviata(idMessageRequest);
  584.                 } catch(ProtocolException e){
  585.                     msgDiag.logErroreGenerico(e, "profiloDiCollaborazione.registraBustaInviata");
  586.                     OpenSPCoop2Message responseMessageError =
  587.                             generatoreErrore.build(pddContext,IntegrationFunctionError.INTERNAL_REQUEST_ERROR,
  588.                                     ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
  589.                                 get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_525_GESTIONE_FUNZIONALITA_PROTOCOLLO),e,
  590.                                 null);
  591.                     ejbUtils.sendRispostaApplicativaErrore(responseMessageError,richiestaDelegata,pd,sa);
  592.                     openspcoopstate.releaseResource();
  593.                     esito.setEsitoInvocazione(true);
  594.                     esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO, "profiloDiCollaborazione.registraBustaInviata");
  595.                     return esito;
  596.                 }

  597.                 //  Collaborazione
  598.                 if( idCollaborazione ){
  599.                     if(imbustamentoMsg.getIdCollaborazione()!=null)
  600.                         busta.setCollaborazione(imbustamentoMsg.getIdCollaborazione());
  601.                     else
  602.                         busta.setCollaborazione(idCollaborazioneCapostipite);
  603.                 }
  604.                
  605.                 // RiferimentoMessaggio
  606.                 if( idRiferimentoMessaggioRichiesta ){
  607.                     if(imbustamentoMsg.getIdRiferimentoMessaggio()!=null)
  608.                         busta.setRiferimentoMessaggio(imbustamentoMsg.getIdRiferimentoMessaggio());
  609.                 }

  610.             }else if(infoServizio.getProfiloDiCollaborazione().equals(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_SIMMETRICO)) {  

  611.                 msgDiag.mediumDebug("Gestione profilo di Collaborazione AsincronoSimmetrico ...");

  612.                 // Profilo Asincrono Simmetrico      
  613.                 busta.setProfiloDiCollaborazione(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_SIMMETRICO);
  614.                 // deve essere generato un msg OK se non e' abilitata la funzionalita' di ricevuta asincrona
  615.                 msgDiag.mediumDebug("Gestione profilo di Collaborazione AsincronoSimmetrico (check ricevuta abilitata)...");
  616.                 richiestaDelegata.setRicevutaAsincrona(configurazionePdDManager.ricevutaAsincronaSimmetricaAbilitata(pd));
  617.                
  618.                 // Modalita di trasmissione stateless/stateful
  619.                 if(configurazionePdDManager.isModalitaStateless(pd, infoServizio.getProfiloDiCollaborazione())==false){
  620.                     generazioneMsgOK = !richiestaDelegata.isRicevutaAsincrona();
  621.                 }
  622.                 else{
  623.                     generazioneMsgOK = false;
  624.                 }

  625.                 //  Richiesta Asincrona
  626.                 if(riferimentoServizioCorrelato==null && isServizioCorrelato==false){

  627.                     msgDiag.mediumDebug("Gestione profilo di Collaborazione AsincronoSimmetrico richiesta...");

  628.                     // check autenticazione richiesta
  629.                     if(CostantiPdD.SERVIZIO_APPLICATIVO_ANONIMO.equals(richiestaDelegata.getServizioApplicativo())){
  630.                         msgDiag.logPersonalizzato("profiloAsincronoSimmetrico.saAnonimo");
  631.                         OpenSPCoop2Message responseMessageError =
  632.                                 generatoreErrore.build(pddContext,IntegrationFunctionError.AUTHENTICATION,
  633.                                         ErroriIntegrazione.ERRORE_410_AUTENTICAZIONE_RICHIESTA.getErroreIntegrazione(),null,
  634.                                     null);
  635.                         ejbUtils.sendRispostaApplicativaErrore(responseMessageError,richiestaDelegata,pd,sa);
  636.                         openspcoopstate.releaseResource();

  637.                         esito.setEsitoInvocazione(true);
  638.                         esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
  639.                                 msgDiag.getMessaggio_replaceKeywords("profiloAsincronoSimmetrico.saAnonimo"));
  640.                         return esito;
  641.                     }

  642.                     // check esistenza consegna risposta asincrona
  643.                     msgDiag.mediumDebug("Gestione profilo di Collaborazione AsincronoSimmetrico richiesta (consegna asincrona)...");
  644.                     boolean existsConsegnaRispostaAsincrona = false;
  645.                     try{
  646.                         existsConsegnaRispostaAsincrona = configurazionePdDManager.existsConsegnaRispostaAsincrona(sa);
  647.                     }catch(Exception e){
  648.                         msgDiag.logErroreGenerico(e, "existsConsegnaRispostaAsincrona("+sa+")");
  649.                         OpenSPCoop2Message responseMessageError =
  650.                                 generatoreErrore.build(pddContext,IntegrationFunctionError.INTERNAL_REQUEST_ERROR,
  651.                                         ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
  652.                                             get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_536_CONFIGURAZIONE_NON_DISPONIBILE),e,null);
  653.                         ejbUtils.sendRispostaApplicativaErrore(responseMessageError,richiestaDelegata,pd,sa);
  654.                         openspcoopstate.releaseResource();  
  655.                         esito.setEsitoInvocazione(true);
  656.                         esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
  657.                                 "existsConsegnaRispostaAsincrona("+sa+")");
  658.                         return esito;
  659.                     }
  660.                     if (existsConsegnaRispostaAsincrona == false){
  661.                         msgDiag.logPersonalizzato("profiloAsincronoSimmetrico.saSenzaRispostaAsincrona");
  662.                         OpenSPCoop2Message responseMessageError =
  663.                                 generatoreErrore.build(pddContext,IntegrationFunctionError.INTERNAL_REQUEST_ERROR,
  664.                                     ErroriIntegrazione.ERRORE_411_RICEZIONE_CONTENUTI_ASINCRONA_RICHIESTA.getErroreIntegrazione(),null,null);
  665.                         ejbUtils.sendRispostaApplicativaErrore(responseMessageError,richiestaDelegata,pd,sa);
  666.                         openspcoopstate.releaseResource();
  667.                         esito.setEsitoInvocazione(true);
  668.                         esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
  669.                                 msgDiag.getMessaggio_replaceKeywords("profiloAsincronoSimmetrico.saSenzaRispostaAsincrona"));
  670.                         return esito;
  671.                     }

  672.                     scenarioCooperazione = Costanti.SCENARIO_ASINCRONO_SIMMETRICO_INVOCAZIONE_SERVIZIO;

  673.                     // impostazione dati servizio correlato
  674.                     if(infoServizio.getServizioCorrelato()==null || infoServizio.getTipoServizioCorrelato()==null){
  675.                         msgDiag.logPersonalizzato("profiloAsincronoSimmetrico.servizioCorrelatoNonEsistente");
  676.                         OpenSPCoop2Message responseMessageError =
  677.                                 generatoreErrore.build(pddContext,IntegrationFunctionError.INTERNAL_REQUEST_ERROR,
  678.                                     ErroriIntegrazione.ERRORE_408_SERVIZIO_CORRELATO_NON_TROVATO.getErroreIntegrazione(),null,null);
  679.                         ejbUtils.sendRispostaApplicativaErrore(responseMessageError,richiestaDelegata,pd,sa);
  680.                         openspcoopstate.releaseResource();
  681.                         esito.setEsitoInvocazione(true);
  682.                         esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
  683.                                 msgDiag.getMessaggio_replaceKeywords("profiloAsincronoSimmetrico.servizioCorrelatoNonEsistente"));
  684.                         return esito;
  685.                     }
  686.                     // PRODUZIONE tipo e nome Servizio Correlato
  687.                     if( protocolManager.isGenerazioneInformazioniServizioCorrelatoAsincronoSimmetrico() &&
  688.                             this.propertiesReader.isGenerazioneAttributiAsincroni(implementazionePdDDestinatario)){
  689.                         busta.setServizioCorrelato(infoServizio.getServizioCorrelato());
  690.                         busta.setTipoServizioCorrelato(infoServizio.getTipoServizioCorrelato());
  691.                     }

  692.                     //  Collaborazione (per gli asincroni devono sempre essere presenti)
  693.                     if( idCollaborazione ){
  694.                         if(imbustamentoMsg.getIdCollaborazione()!=null)
  695.                             busta.setCollaborazione(imbustamentoMsg.getIdCollaborazione());
  696.                         else
  697.                             busta.setCollaborazione(idCollaborazioneCapostipite);
  698.                     }

  699.                     // registrazione richiesta asincrona simmetrica
  700.                     try{
  701.                         msgDiag.mediumDebug("Gestione profilo di Collaborazione AsincronoSimmetrico richiesta (registrazione busta da inviare)...");
  702.                        
  703.                         Integrazione infoIntegrazione = null;
  704.                         if(configurazionePdDManager.isModalitaStateless(pd, infoServizio.getProfiloDiCollaborazione())){
  705.                             infoIntegrazione = new Integrazione();
  706.                             infoIntegrazione.setIdModuloInAttesa(this.idModulo);
  707.                             infoIntegrazione.setNomePorta(richiestaDelegata.getIdPortaDelegata().getNome());
  708.                             infoIntegrazione.setServizioApplicativo(richiestaDelegata.getServizioApplicativo());
  709.                            
  710.                             if(busta.getScadenza()==null){
  711.                                 busta.setScadenza(new Date(DateManager.getTimeMillis()+(scadenzaBusta*60*1000)));
  712.                             }
  713.                             if(openspcoopstate instanceof OpenSPCoopStateless){
  714.                                 ((StatelessMessage)openspcoopstate.getStatoRichiesta()).setBusta(busta);
  715.                             }
  716.                         }
  717.                         profiloCollaborazione.asincronoSimmetrico_registraRichiestaInviata(idMessageRequest,busta.getCollaborazione(),
  718.                                 infoServizio.getTipoServizioCorrelato(),
  719.                                 infoServizio.getServizioCorrelato(),
  720.                                 infoServizio.getVersioneServizioCorrelato(),
  721.                                 richiestaDelegata.isRicevutaAsincrona(),infoIntegrazione,scadenzaBusta);
  722.                     }catch(ProtocolException e){
  723.                         msgDiag.logErroreGenerico(e, "profiloDiCollaborazione.asincronoSimmetrico_registraRichiestaInviata");
  724.                         openspcoopstate.releaseResource();
  725.                         OpenSPCoop2Message responseMessageError =
  726.                                 generatoreErrore.build(pddContext,IntegrationFunctionError.INTERNAL_REQUEST_ERROR,
  727.                                         ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
  728.                                             get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_525_GESTIONE_FUNZIONALITA_PROTOCOLLO),e,null);
  729.                         ejbUtils.sendRispostaApplicativaErrore(responseMessageError,richiestaDelegata,pd,sa);
  730.                         esito.setEsitoInvocazione(true);
  731.                         esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
  732.                                 "profiloDiCollaborazione.asincronoSimmetrico_registraRichiestaInviata");
  733.                         return esito;
  734.                     }

  735.                     // Non deve essere utilizzato la definizione dell'elemento 'ricezioneRispostaAsincrona'
  736.                     // per ritornare la ricevuta o l'ok.
  737.                     // L'elemento 'ricezioneRispostaAsincrona' sara' utilizzato per ritornare la risposta.
  738.                     richiestaDelegata.setUtilizzoConsegnaAsincrona(false);


  739.                 }
  740.                 // Risposta Asincrona
  741.                 else{
  742.                     msgDiag.mediumDebug("Gestione profilo di Collaborazione AsincronoSimmetrico risposta...");
  743.                    
  744.                     scenarioCooperazione = Costanti.SCENARIO_ASINCRONO_SIMMETRICO_CONSEGNA_RISPOSTA;

  745.                     msgDiag.addKeyword(CostantiPdD.KEY_ID_CORRELAZIONE_ASINCRONA, riferimentoServizioCorrelato);
  746.                     msgDiag.logPersonalizzato("profiloAsincronoSimmetrico.risposta.correlazioneRichiesta");
  747.                    
  748.                     if(openspcoopstate instanceof OpenSPCoopStateless){
  749.                        
  750.                         if(busta.getScadenza()==null){
  751.                             busta.setScadenza(new Date(DateManager.getTimeMillis()+(scadenzaBusta*60*1000)));
  752.                         }
  753.                        
  754.                         ((StatelessMessage)openspcoopstate.getStatoRichiesta()).setBusta(busta);
  755.                     }
  756.                    
  757.                     // imposto dati risposta
  758.                     try{
  759.                         msgDiag.mediumDebug("Gestione profilo di Collaborazione AsincronoSimmetrico risposta (lettura busta risposta)...");
  760.                         Busta rispostaAsincrona = profiloCollaborazione.asincronoSimmetrico_getBustaRisposta(riferimentoServizioCorrelato,idMessageRequest,scadenzaBusta);

  761.                         // Check di coerenza
  762.                         msgDiag.mediumDebug("Gestione profilo di Collaborazione AsincronoSimmetrico risposta (check coerenza)...");
  763.                         if( busta.getTipoMittente().equals(rispostaAsincrona.getTipoDestinatario())==false){
  764.                             throw new ProtocolException("Il tipo di mittente della risposta non rispetta quello atteso nella gestione del profilo asincrono simmetrico.");
  765.                         }
  766.                         if( busta.getMittente().equals(rispostaAsincrona.getDestinatario())==false){
  767.                             throw new ProtocolException("Il mittente della risposta non rispetta quello atteso nella gestione del profilo asincrono simmetrico.");
  768.                         }
  769.                         if( busta.getTipoDestinatario().equals(rispostaAsincrona.getTipoMittente())==false){
  770.                             throw new ProtocolException("Il tipo di destinatario della risposta non rispetta quello atteso nella gestione del profilo asincrono simmetrico.");
  771.                         }
  772.                         if( busta.getDestinatario().equals(rispostaAsincrona.getMittente())==false){
  773.                             throw new ProtocolException("Il destinatario della risposta non rispetta quello atteso nella gestione del profilo asincrono simmetrico.");
  774.                         }
  775.                         if( busta.getTipoServizio().equals(rispostaAsincrona.getTipoServizioCorrelato())==false){
  776.                             throw new ProtocolException("Il tipo del servizio correlato invocato non rispetta quello atteso nella gestione del profilo asincrono simmetrico.");
  777.                         }
  778.                         if( busta.getServizio().equals(rispostaAsincrona.getServizioCorrelato())==false){
  779.                             throw new ProtocolException("Il servizio correlato invocato non rispetta quello atteso nella gestione del profilo asincrono simmetrico.");
  780.                         }
  781.                         /* L'azione della risposta puo' essere diversa da quella della richiesta.
  782.                         if( (busta.getAzione()!=null) &&
  783.                             (busta.getAzione().equals(rispostaAsincrona.getAzione())==false)){
  784.                             throw new ProtocolException("L'azione invocata non rispetta quella attesa nella gestione del profilo asincrono simmetrico.");
  785.                         }
  786.                          */

  787.                         if(protocolManager.isCorrelazioneRichiestaPresenteRispostaAsincronaSimmetrica()){
  788.                             busta.setRiferimentoMessaggio(riferimentoServizioCorrelato);
  789.                         }

  790.                     }catch(ProtocolException e){
  791.                         ErroreIntegrazione erroreIntegrazione = null;
  792.                         IntegrationFunctionError integrationFunctionError = null;
  793.                         this.log.error("Busta per correlazione asincrona simmetrica ("+riferimentoServizioCorrelato+") non trovata",e);
  794.                         if(e.getMessage()!=null && (e.getMessage().indexOf("Busta non trovata")!=-1) || (e.getMessage().indexOf("Tipo/Nome servizio correlato non trovato")!=-1)){
  795.                             msgDiag.logPersonalizzato("profiloAsincronoSimmetrico.rispostaNonCorrelataRichiesta");
  796.                             erroreIntegrazione = ErroriIntegrazione.ERRORE_409_RISPOSTA_ASINCRONA_NON_CORRELATA_ALLA_RICHIESTA.getErroreIntegrazione();
  797.                             integrationFunctionError = IntegrationFunctionError.CORRELATION_INFORMATION_NOT_FOUND;
  798.                         }else{
  799.                             msgDiag.logErroreGenerico(e, "profiloDiCollaborazione.asincronoSimmetrico_getBustaRisposta");
  800.                             erroreIntegrazione = ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
  801.                                     get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_525_GESTIONE_FUNZIONALITA_PROTOCOLLO);
  802.                             integrationFunctionError = IntegrationFunctionError.INTERNAL_REQUEST_ERROR;
  803.                         }

  804.                         OpenSPCoop2Message responseMessageError =
  805.                                 generatoreErrore.build(pddContext,integrationFunctionError, erroreIntegrazione,e,null);
  806.                         ejbUtils.sendRispostaApplicativaErrore(responseMessageError,richiestaDelegata,pd,sa);
  807.                         openspcoopstate.releaseResource();
  808.                         esito.setEsitoInvocazione(true);
  809.                         esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
  810.                                 "Busta per correlazione asincrona simmetrica ("+riferimentoServizioCorrelato+") non trovata");
  811.                         return esito;
  812.                     }

  813.                     //  Collaborazione (per gli asincroni devono sempre essere presenti)
  814.                     if( idCollaborazione ){
  815.                         if(imbustamentoMsg.getIdCollaborazione()!=null)
  816.                             busta.setCollaborazione(imbustamentoMsg.getIdCollaborazione());
  817.                         else
  818.                             busta.setCollaborazione(riferimentoServizioCorrelato);
  819.                     }
  820.                    
  821.                 }

  822.             }else if(infoServizio.getProfiloDiCollaborazione().equals(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_ASIMMETRICO)) {  

  823.                 msgDiag.mediumDebug("Gestione profilo di Collaborazione AsincronoAsimmetrico ...");

  824.                 //  Profilo Asincrono Asimmetrico        
  825.                 busta.setProfiloDiCollaborazione(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_ASIMMETRICO);

  826.                 //  Richiesta Asincrona
  827.                 if(riferimentoServizioCorrelato==null && isServizioCorrelato==false){

  828.                     msgDiag.mediumDebug("Gestione profilo di Collaborazione AsincronoAsimmetrico richiesta...");

  829.                     //  deve essere generato un msg OK se non e' abilitata la funzionalita' di ricevuta asincrona
  830.                     msgDiag.mediumDebug("Gestione profilo di Collaborazione AsincronoAsimmetrico richiesta (ricevuta abilitata)...");
  831.                     richiestaDelegata.setRicevutaAsincrona(configurazionePdDManager.ricevutaAsincronaAsimmetricaAbilitata(pd));
  832.                    
  833.                     // Modalita di trasmissione stateless/stateful
  834.                     if(configurazionePdDManager.isModalitaStateless(pd, infoServizio.getProfiloDiCollaborazione())==false){
  835.                         generazioneMsgOK = !richiestaDelegata.isRicevutaAsincrona();
  836.                     }
  837.                     else{
  838.                         generazioneMsgOK = false;
  839.                     }

  840.                     scenarioCooperazione = Costanti.SCENARIO_ASINCRONO_ASIMMETRICO_INVOCAZIONE_SERVIZIO;

  841.                     // Collaborazione (per gli asincroni devono sempre essere presenti)
  842.                     if( idCollaborazione ){
  843.                         if(imbustamentoMsg.getIdCollaborazione()!=null)
  844.                             busta.setCollaborazione(imbustamentoMsg.getIdCollaborazione());
  845.                         else
  846.                             busta.setCollaborazione(idCollaborazioneCapostipite);
  847.                     }

  848.                     // registrazione richiesta asincrona asimmetrica
  849.                     try{
  850.                         msgDiag.mediumDebug("Gestione profilo di Collaborazione AsincronoAsimmetrico richiesta (registrazione busta da inviare)...");
  851.                        
  852.                         if(configurazionePdDManager.isModalitaStateless(pd, infoServizio.getProfiloDiCollaborazione())){
  853.                             if(busta.getScadenza()==null){
  854.                                 busta.setScadenza(new Date(DateManager.getTimeMillis()+(scadenzaBusta*60*1000)));
  855.                             }
  856.                             if(openspcoopstate instanceof OpenSPCoopStateless){
  857.                                 ((StatelessMessage)openspcoopstate.getStatoRichiesta()).setBusta(busta);
  858.                             }
  859.                         }
  860.                        
  861.                         profiloCollaborazione.asincronoAsimmetrico_registraRichiestaInviata(idMessageRequest,busta.getCollaborazione(),richiestaDelegata.isRicevutaAsincrona(),scadenzaBusta);
  862.                     }catch(ProtocolException e){
  863.                         msgDiag.logErroreGenerico(e, "profiloDiCollaborazione.asincronoAsimmetrico_registraRichiestaInviata");
  864.                         OpenSPCoop2Message responseMessageError =
  865.                                 generatoreErrore.build(pddContext,IntegrationFunctionError.INTERNAL_REQUEST_ERROR,
  866.                                         ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
  867.                                     get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_525_GESTIONE_FUNZIONALITA_PROTOCOLLO),e,
  868.                                     null);
  869.                         ejbUtils.sendRispostaApplicativaErrore(responseMessageError,richiestaDelegata,pd,sa);
  870.                         openspcoopstate.releaseResource();
  871.                         esito.setEsitoInvocazione(true);
  872.                         esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
  873.                                 "profiloDiCollaborazione.asincronoAsimmetrico_registraRichiestaInviata");
  874.                         return esito;
  875.                     }


  876.                 }
  877.                 // Risposta Asincrona
  878.                 else{
  879.                     msgDiag.mediumDebug("Gestione profilo di Collaborazione AsincronoAsimmetrico richiestaStato...");

  880.                     scenarioCooperazione = Costanti.SCENARIO_ASINCRONO_ASIMMETRICO_POLLING;

  881.                     msgDiag.addKeyword(CostantiPdD.KEY_ID_CORRELAZIONE_ASINCRONA, riferimentoServizioCorrelato);
  882.                     msgDiag.logPersonalizzato("profiloAsincronoAsimmetrico.richiestaStato.correlazioneRichiesta");
  883.                    
  884.                     // il polling e' sempre con gestione della ricevuta
  885.                     richiestaDelegata.setRicevutaAsincrona(true);

  886.                     if(openspcoopstate instanceof OpenSPCoopStateless){
  887.                        
  888.                         if(busta.getScadenza()==null){
  889.                             busta.setScadenza(new Date(DateManager.getTimeMillis()+(scadenzaBusta*60*1000)));
  890.                         }
  891.                        
  892.                         ((StatelessMessage)openspcoopstate.getStatoRichiesta()).setBusta(busta);
  893.                     }
  894.                    
  895.                     // imposto dati risposta
  896.                     try{
  897.                         msgDiag.mediumDebug("Gestione profilo di Collaborazione AsincronoAsimmetrico richiestaStato (lettura busta)...");
  898.                         Busta richiestaStatoAsincrona = profiloCollaborazione.asincronoAsimmetrico_getBustaRisposta(riferimentoServizioCorrelato,idMessageRequest,scadenzaBusta);

  899.                         // Check di coerenza
  900.                         msgDiag.mediumDebug("Gestione profilo di Collaborazione AsincronoAsimmetrico richiestaStato (check coerenza)...");
  901.                         if( busta.getTipoMittente().equals(richiestaStatoAsincrona.getTipoMittente())==false){
  902.                             throw new ProtocolException("Il tipo di mittente della risposta non rispetta quello atteso nella gestione del profilo asincrono asimmetrico.");
  903.                         }
  904.                         if( busta.getMittente().equals(richiestaStatoAsincrona.getMittente())==false){
  905.                             throw new ProtocolException("Il mittente della risposta non rispetta quello atteso nella gestione del profilo asincrono asimmetrico.");
  906.                         }
  907.                         if( busta.getTipoDestinatario().equals(richiestaStatoAsincrona.getTipoDestinatario())==false){
  908.                             throw new ProtocolException("Il tipo di destinatario della risposta non rispetta quello atteso nella gestione del profilo asincrono asimmetrico.");
  909.                         }
  910.                         if( busta.getDestinatario().equals(richiestaStatoAsincrona.getDestinatario())==false){
  911.                             throw new ProtocolException("Il destinatario della risposta non rispetta quello atteso nella gestione del profilo asincrono asimmetrico.");
  912.                         }
  913.                         if( busta.getTipoServizio().equals(richiestaStatoAsincrona.getTipoServizioCorrelato())==false){
  914.                             throw new ProtocolException("Il tipo del servizio correlato invocato non rispetta quello atteso nella gestione del profilo asincrono asimmetrico.");
  915.                         }
  916.                         if( busta.getServizio().equals(richiestaStatoAsincrona.getServizioCorrelato())==false){
  917.                             throw new ProtocolException("Il servizio correlato invocato non rispetta quello atteso nella gestione del profilo asincrono asimmetrico.");
  918.                         }
  919.                         /* L'azione della richiestaStato puo' essere diversa da quella della richiesta.
  920.                         if( (busta.getAzione()!=null) &&
  921.                             (busta.getAzione().equals(richiestaStatoAsincrona.getAzione())==false)){
  922.                             throw new ProtocolException("L'azione invocata non rispetta quella attesa nella gestione del profilo asincrono asimmetrico.");
  923.                         }
  924.                          */

  925.                         if(protocolManager.isCorrelazioneRichiestaPresenteRichiestaStatoAsincronaAsimmetrica()){
  926.                             busta.setRiferimentoMessaggio(riferimentoServizioCorrelato);
  927.                         }

  928.                     }catch(ProtocolException e){
  929.                         ErroreIntegrazione erroreIntegrazione = null;
  930.                         IntegrationFunctionError integrationFunctionError = null;
  931.                         this.log.error("Busta per correlazione asincrona asimmetrica ("+riferimentoServizioCorrelato+") non trovata",e);
  932.                         if(e.getMessage()!=null && e.getMessage().indexOf("Busta non trovata")!=-1){
  933.                             msgDiag.logPersonalizzato("profiloAsincronoAsimmetrico.richiestaStatoNonCorrelataRichiesta");
  934.                             erroreIntegrazione = ErroriIntegrazione.ERRORE_409_RISPOSTA_ASINCRONA_NON_CORRELATA_ALLA_RICHIESTA.getErroreIntegrazione();
  935.                             integrationFunctionError = IntegrationFunctionError.CORRELATION_INFORMATION_NOT_FOUND;
  936.                         }else{
  937.                             msgDiag.logErroreGenerico(e, "profiloDiCollaborazione.asincronoAsimmetrico_getBustaRisposta");
  938.                             erroreIntegrazione = ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
  939.                                     get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_525_GESTIONE_FUNZIONALITA_PROTOCOLLO);
  940.                             integrationFunctionError = IntegrationFunctionError.INTERNAL_REQUEST_ERROR;
  941.                         }
  942.                         OpenSPCoop2Message responseMessageError =
  943.                                 generatoreErrore.build(pddContext,integrationFunctionError,erroreIntegrazione,e,null);
  944.                         ejbUtils.sendRispostaApplicativaErrore(responseMessageError,richiestaDelegata,pd,sa);
  945.                         openspcoopstate.releaseResource();
  946.                         esito.setEsitoInvocazione(true);
  947.                         esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
  948.                                 "Busta per correlazione asincrona asimmetrica ("+riferimentoServizioCorrelato+") non trovata");
  949.                         return esito;
  950.                     }

  951.                     //  Collaborazione (per gli asincroni devono sempre essere presenti)
  952.                     if( idCollaborazione ){
  953.                         if(imbustamentoMsg.getIdCollaborazione()!=null)
  954.                             busta.setCollaborazione(imbustamentoMsg.getIdCollaborazione());
  955.                         else
  956.                             busta.setCollaborazione(riferimentoServizioCorrelato);
  957.                     }

  958.                 }

  959.             }   else{

  960.                 // Profilo non conosciuto??
  961.                 msgDiag.logErroreGenerico("Profilo di Collaborazione ["+infoServizio.getProfiloDiCollaborazione()+"] non gestito", "gestioneProfiloCollaborazione");
  962.                 OpenSPCoop2Message responseMessageError =
  963.                         generatoreErrore.build(pddContext,IntegrationFunctionError.INTERNAL_REQUEST_ERROR,
  964.                                 ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
  965.                                     get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_525_GESTIONE_FUNZIONALITA_PROTOCOLLO),null,null);
  966.                 ejbUtils.sendRispostaApplicativaErrore(responseMessageError,richiestaDelegata,pd,sa);
  967.                 openspcoopstate.releaseResource();
  968.                 esito.setEsitoInvocazione(true);
  969.                 esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
  970.                         "Profilo di Collaborazione ["+infoServizio.getProfiloDiCollaborazione()+"] non gestito");
  971.                 return esito;
  972.             }

  973.             richiestaDelegata.setScenario(scenarioCooperazione);
  974.             ejbUtils.setScenarioCooperazione(scenarioCooperazione);
  975.             richiestaDelegata.setIdCollaborazione(busta.getCollaborazione());
  976.             richiestaDelegata.setProfiloCollaborazione(busta.getProfiloDiCollaborazione(),busta.getProfiloDiCollaborazioneValue());


  977.             boolean stateless = configurazionePdDManager.isModalitaStateless(pd, infoServizio.getProfiloDiCollaborazione());
  978.                        
  979.             if (!oneWayVersione11 && !stateless) {
  980.                
  981.                 /* ------------  Registro busta nel Repository Buste ------------- */
  982.                 msgDiag.mediumDebug("Aggiornamento busta nel RepositoryBuste...");
  983.                 try{
  984.                     repositoryBuste.aggiornaBustaIntoOutBox(busta,this.propertiesReader.getRepositoryIntervalloScadenzaMessaggi());
  985.                     repositoryBuste.aggiornaInfoIntegrazioneIntoOutBox_Scenario(busta.getID(),scenarioCooperazione);
  986.                 }catch(ProtocolException e){
  987.                     msgDiag.logErroreGenerico(e, "repositoryBuste.aggiornaBusta/InfoIntegrazione_IntoOutBox");
  988.                     OpenSPCoop2Message responseMessageError =
  989.                             generatoreErrore.build(pddContext,IntegrationFunctionError.INTERNAL_REQUEST_ERROR,
  990.                                     ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
  991.                                         get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_525_GESTIONE_FUNZIONALITA_PROTOCOLLO),e, null);
  992.                     ejbUtils.sendRispostaApplicativaErrore(responseMessageError,richiestaDelegata,pd,sa);
  993.                     openspcoopstate.releaseResource();
  994.                     esito.setEsitoInvocazione(true);
  995.                     esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
  996.                             "repositoryBuste.aggiornaBusta/InfoIntegrazione_IntoOutBox");
  997.                     return esito;
  998.                 }

  999.             }




  1000.             /* ------------  Ricezione riscontri per il NAL
  1001.                       (vengono gestiti solo se la busta contiene un profilo oneWay)  ------------- */
  1002.             if( consegnaAffidabile ){
  1003.                 if(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ONEWAY.equals(infoServizio.getProfiloDiCollaborazione())) {

  1004.                     msgDiag.logPersonalizzato("consegnaAffidabile.salvataggioInformazioni");
  1005.                     try{
  1006.                         gestoreRiscontri.registraRiscontroDaRicevere( busta.getID() , DateManager.getDate());
  1007.                     }catch(ProtocolException e){
  1008.                         msgDiag.logErroreGenerico(e, "gestoreRiscontri.registraRiscontroDaRicevere");
  1009.                         OpenSPCoop2Message responseMessageError =
  1010.                                 generatoreErrore.build(pddContext,IntegrationFunctionError.INTERNAL_REQUEST_ERROR,
  1011.                                         ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
  1012.                                             get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_525_GESTIONE_FUNZIONALITA_PROTOCOLLO),e, null);
  1013.                         ejbUtils.sendRispostaApplicativaErrore(responseMessageError,richiestaDelegata,pd,sa);
  1014.                         openspcoopstate.releaseResource();
  1015.                         esito.setEsitoInvocazione(true);
  1016.                         esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
  1017.                                 "gestoreRiscontri.registraRiscontroDaRicevere");
  1018.                         return esito;
  1019.                     }
  1020.                 }else{
  1021.                     msgDiag.logPersonalizzato("consegnaAffidabile.profiloNonOneway");
  1022.                 }
  1023.             }



  1024.             Utilities.printFreeMemory("Imbustamento - Invio messaggio al modulo di InoltroBuste...");



  1025.             /* ------------  Spedizione InoltroBusteMessage al modulo InoltroBuste   ------------- */

  1026.             // Creazione InoltroBusteMessage
  1027.             // (infoBusta da spedire)
  1028.             msgDiag.mediumDebug("Invio messaggio al modulo di InoltroBuste...");
  1029.             InoltroBusteMessage inoltroMSG = new InoltroBusteMessage();
  1030.             inoltroMSG.setRichiestaDelegata(richiestaDelegata);
  1031.             inoltroMSG.setBusta(busta);
  1032.             inoltroMSG.setOneWayVersione11(oneWayVersione11);
  1033.             inoltroMSG.setImplementazionePdDSoggettoMittente(imbustamentoMsg.getImplementazionePdDSoggettoMittente());
  1034.             inoltroMSG.setImplementazionePdDSoggettoDestinatario(imbustamentoMsg.getImplementazionePdDSoggettoDestinatario());
  1035.             inoltroMSG.setPddContext(pddContext);
  1036.            
  1037.             msgRequest = new GestoreMessaggi(openspcoopstate, true, idMessageRequest,Costanti.OUTBOX,msgDiag,pddContext);

  1038.             // send. Se la porta applicativa funziona in modalita' stateful v11 il messaggio JMS viene arricchito con
  1039.             //       un oggetto di tipo OpenSPCoopStateless

  1040.             if ( !stateless  ) {
  1041.                 if ( oneWayVersione11 ) {
  1042.                     OpenSPCoopStateless statelessSerializzabile = ((OpenSPCoopStateless) openspcoopstate).rendiSerializzabile();
  1043.                     inoltroMSG.setOpenspcoopstate(statelessSerializzabile);
  1044.                     msgRequest.setOneWayVersione11(true);
  1045.                 }
  1046.        
  1047.                 try{
  1048.                     ejbUtils.getNodeSender(this.propertiesReader, this.log).send(inoltroMSG, InoltroBuste.ID_MODULO, msgDiag,
  1049.                             identitaPdD,Imbustamento.ID_MODULO, idMessageRequest, msgRequest);
  1050.                 } catch (Exception e) {
  1051.                     this.log.error("Spedizione->InoltroBuste non riuscita",e);
  1052.                     msgDiag.logErroreGenerico(e,"GenericLib.nodeSender.send(InoltroBuste)");
  1053.                     OpenSPCoop2Message responseMessageError =
  1054.                             generatoreErrore.build(pddContext,IntegrationFunctionError.INTERNAL_REQUEST_ERROR,
  1055.                                     ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
  1056.                                         get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_512_SEND),e, null);
  1057.                     ejbUtils.sendRispostaApplicativaErrore(responseMessageError,richiestaDelegata,pd,sa);
  1058.                     openspcoopstate.releaseResource();
  1059.                     esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
  1060.                             "Spedizione->InoltroBuste non riuscita");
  1061.                     esito.setEsitoInvocazione(true);
  1062.                     return esito;
  1063.                 }
  1064.             }


  1065.             Utilities.printFreeMemory("Imbustamento - Gestione Risposta");

  1066.             /* ------------  Gestione Risposta  ------------- */
  1067.             // se il profilo e' oneWay, AsincronoSimmetrico o AsincronoAsimmetricoRichiesta  viene generata una risposta SOAP 'OK'
  1068.             // inizializzo richiesta
  1069.             if(  generazioneMsgOK ) {
  1070.                
  1071.                 pddContext.addObject(org.openspcoop2.core.constants.Costanti.DATA_PRESA_IN_CARICO,
  1072.                         DateUtils.getSimpleDateFormatMs().format(DateManager.getDate()));
  1073.                
  1074.                 msgDiag.mediumDebug("Invio messaggio 'OK' al modulo di RicezioneContenutiApplicativi...");
  1075.                 if(protocolManager.isHttpEmptyResponseOneWay())
  1076.                     msgOK = ejbUtils.sendRispostaApplicativaOK(MessageUtilities.buildEmptyMessage(OpenSPCoop2MessageFactory.getDefaultMessageFactory(),
  1077.                             requestInfo.getIntegrationRequestMessageType(), MessageRole.RESPONSE),richiestaDelegata,pd,sa);
  1078.                 else
  1079.                     msgOK = ejbUtils.sendRispostaApplicativaOK(ejbUtils.buildOpenSPCoopOK(requestInfo.getIntegrationRequestMessageType(), idMessageRequest),richiestaDelegata,pd,sa);
  1080.             }















  1081.             /* ---------- Gestione Transazione Modulo ---------------- */

  1082.             // Aggiorno proprietario Messaggio e Scenario di cooperazione
  1083.             msgDiag.mediumDebug("Aggiorno proprietario messaggio...");
  1084.             msgRequest.aggiornaProprietarioMessaggio(org.openspcoop2.pdd.mdb.InoltroBuste.ID_MODULO);

  1085.             // Commit JDBC

  1086.             msgDiag.mediumDebug("Commit delle operazioni per la gestione della richiesta...");
  1087.             openspcoopstate.commit();

  1088.             // Aggiornamento cache messaggi
  1089.             if(msgRequest!=null)
  1090.                 msgRequest.addMessaggiIntoCache_readFromTable(Imbustamento.ID_MODULO, "richiesta");
  1091.             if(msgOK!=null)
  1092.                 msgOK.addMessaggiIntoCache_readFromTable(Imbustamento.ID_MODULO, "messaggio OK");

  1093.             //  Aggiornamento cache proprietario messaggio
  1094.             if(msgRequest!=null)
  1095.                 msgRequest.addProprietariIntoCache_readFromTable(Imbustamento.ID_MODULO, "richiesta",null,false);
  1096.             if(msgOK!=null)
  1097.                 msgOK.addProprietariIntoCache_readFromTable(Imbustamento.ID_MODULO, "messaggio OK",idMessageRequest,false);


  1098.             // Rilascio connessione al DB
  1099.             msgDiag.mediumDebug("Rilascio connessione al database...");
  1100.             openspcoopstate.releaseResource();

  1101.             msgDiag.mediumDebug("Lavoro Terminato.");
  1102.             esito.setEsitoInvocazione(true);
  1103.             esito.setStatoInvocazione(EsitoLib.OK,null);
  1104.             if (stateless) ((OpenSPCoopState)openspcoopstate).setMessageLib(inoltroMSG);
  1105.             return esito;


  1106.         }catch(Throwable e){
  1107.             this.log.error("ErroreGenerale",e);
  1108.             msgDiag.logErroreGenerico(e, "Generale");
  1109.            
  1110.             OpenSPCoop2Message responseMessageError =
  1111.                     generatoreErrore.build(pddContext,IntegrationFunctionError.INTERNAL_REQUEST_ERROR,
  1112.                             ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.getErroreIntegrazione(),e,null);
  1113.             try{
  1114.                 ejbUtils.sendRispostaApplicativaErrore(responseMessageError,richiestaDelegata,pd,sa);
  1115.                 esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,"ErroreGenerale");
  1116.                 esito.setEsitoInvocazione(true);
  1117.             }catch(Exception er){
  1118.                 msgDiag.logErroreGenerico(er,"ejbUtils.sendErroreGenerale");
  1119.                 ejbUtils.rollbackMessage("Spedizione Errore al Mittente durante una richiesta non riuscita", esito);
  1120.                 esito.setEsitoInvocazione(false);
  1121.                 esito.setStatoInvocazioneErroreNonGestito(e);
  1122.             }    
  1123.             openspcoopstate.releaseResource();
  1124.             return esito;
  1125.         }

  1126.     }
  1127. }