ImbustamentoRisposte.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 org.slf4j.Logger;
  22. import org.openspcoop2.core.constants.TipoPdD;
  23. import org.openspcoop2.core.id.IDServizio;
  24. import org.openspcoop2.core.id.IDSoggetto;
  25. import org.openspcoop2.core.registry.driver.IDServizioFactory;
  26. import org.openspcoop2.message.OpenSPCoop2Message;
  27. import org.openspcoop2.message.exception.ParseException;
  28. import org.openspcoop2.pdd.config.ConfigurazionePdDManager;
  29. import org.openspcoop2.pdd.config.RichiestaApplicativa;
  30. import org.openspcoop2.pdd.config.RichiestaDelegata;
  31. import org.openspcoop2.pdd.core.CostantiPdD;
  32. import org.openspcoop2.pdd.core.EJBUtils;
  33. import org.openspcoop2.pdd.core.GestoreMessaggi;
  34. import org.openspcoop2.pdd.core.PdDContext;
  35. import org.openspcoop2.pdd.core.state.IOpenSPCoopState;
  36. import org.openspcoop2.pdd.core.state.OpenSPCoopStateException;
  37. import org.openspcoop2.pdd.core.state.OpenSPCoopStateless;
  38. import org.openspcoop2.pdd.logger.MsgDiagnosticiProperties;
  39. import org.openspcoop2.pdd.logger.MsgDiagnostico;
  40. import org.openspcoop2.pdd.services.DirectVMProtocolInfo;
  41. import org.openspcoop2.pdd.services.error.RicezioneBusteExternalErrorGenerator;
  42. import org.openspcoop2.protocol.engine.constants.Costanti;
  43. import org.openspcoop2.protocol.engine.driver.ProfiloDiCollaborazione;
  44. import org.openspcoop2.protocol.engine.driver.RepositoryBuste;
  45. import org.openspcoop2.protocol.registry.RegistroServiziManager;
  46. import org.openspcoop2.protocol.sdk.Busta;
  47. import org.openspcoop2.protocol.sdk.IProtocolFactory;
  48. import org.openspcoop2.protocol.sdk.config.IProtocolVersionManager;
  49. import org.openspcoop2.protocol.sdk.constants.CodiceErroreIntegrazione;
  50. import org.openspcoop2.protocol.sdk.constants.ErroriIntegrazione;
  51. import org.openspcoop2.protocol.sdk.constants.Inoltro;
  52. import org.openspcoop2.protocol.sdk.constants.TipoOraRegistrazione;
  53. import org.openspcoop2.protocol.sdk.state.IState;
  54. import org.openspcoop2.protocol.sdk.state.RequestInfo;

  55. /**
  56.  * Contiene la libreria ImbustamentoRisposte
  57.  *
  58.  * @author Poli Andrea (apoli@link.it)
  59.  * @author Tronci Fabio (tronci@link.it)
  60.  * @author $Author$
  61.  * @version $Rev$, $Date$
  62.  */
  63. public class ImbustamentoRisposte extends GenericLib {

  64.     public static final String ID_MODULO = "ImbustamentoRisposte";

  65.     public ImbustamentoRisposte(Logger log) throws GenericLibException {
  66.         super(ImbustamentoRisposte.ID_MODULO, log);
  67.         inizializza();
  68.     }

  69.     @Override
  70.     public EsitoLib _onMessage(IOpenSPCoopState openspcoopstate,
  71.             RegistroServiziManager registroServiziManager,ConfigurazionePdDManager configurazionePdDManager,
  72.             MsgDiagnostico msgDiag) throws OpenSPCoopStateException {
  73.         EsitoLib esito = new EsitoLib();
  74.         ImbustamentoRisposteMessage imbustamentoRisposteMsg = (ImbustamentoRisposteMessage) openspcoopstate.getMessageLib();
  75.        
  76.         /* Regupero eventuali errori di parsing. */
  77.         ParseException parseException = null;
  78.         if(openspcoopstate instanceof OpenSPCoopStateless) {
  79.             OpenSPCoop2Message msgRisposta = ((OpenSPCoopStateless) openspcoopstate).getRispostaMsg();
  80.             if(msgRisposta!=null){
  81.                 parseException = msgRisposta.getParseException();
  82.             }
  83.         }
  84.        
  85.         /* PddContext */
  86.         PdDContext pddContext = imbustamentoRisposteMsg.getPddContext();
  87.         String idTransazione = PdDContext.getValue(org.openspcoop2.core.constants.Costanti.ID_TRANSAZIONE, pddContext);
  88.         RequestInfo requestInfo = (RequestInfo) pddContext.getObject(org.openspcoop2.core.constants.Costanti.REQUEST_INFO);
  89.                
  90.         /* Protocol Factory */
  91.         IProtocolFactory<?> protocolFactory = null;
  92.         try{
  93.             protocolFactory = this.protocolFactoryManager.getProtocolFactoryByName((String) pddContext.getObject(org.openspcoop2.core.constants.Costanti.PROTOCOL_NAME));
  94.         }catch(Exception e){
  95.             msgDiag.logErroreGenerico(e, "ProtocolFactory.instanziazione");
  96.             openspcoopstate.releaseResource();
  97.             esito.setEsitoInvocazione(false);
  98.             esito.setStatoInvocazioneErroreNonGestito(e);
  99.             return esito;
  100.         }
  101.         msgDiag.setPddContext(pddContext, protocolFactory);
  102.        
  103.         /* ID e tipo di implementazione PdD con cui interoperare */
  104.         String idMessageRequest = openspcoopstate.getIDMessaggioSessione();
  105.         String implementazionePdDMittente = imbustamentoRisposteMsg.getImplementazionePdDSoggettoMittente();
  106.        
  107.         //  Busta che ha causato l'invocazione di servizio (utile per costruire eventuali messaggi Errore)
  108.         Busta bustaRichiesta = imbustamentoRisposteMsg.getBusta();
  109.         //  Identificatore Porta Applicativa
  110.         RichiestaApplicativa richiestaApplicativa = imbustamentoRisposteMsg.getRichiestaApplicativa();
  111.         //  Identificatore Porta Delegata
  112.         RichiestaDelegata richiestaDelegata = imbustamentoRisposteMsg.getRichiestaDelegata();
  113.        
  114.         TipoPdD tipoPdD = TipoPdD.APPLICATIVA;
  115.         if(msgDiag.getPorta()==null) {
  116.             if(richiestaApplicativa!=null && richiestaApplicativa.getIdPortaApplicativa()!=null) {
  117.                 msgDiag.updatePorta(tipoPdD, richiestaApplicativa.getIdPortaApplicativa().getNome(), requestInfo);
  118.             }
  119.             else if(richiestaDelegata!=null && richiestaDelegata.getIdPortaDelegata()!=null) {
  120.                 msgDiag.updatePorta(TipoPdD.DELEGATA, richiestaDelegata.getIdPortaDelegata().getNome(), requestInfo);
  121.             }
  122.         }
  123.        
  124.         // ID della risposta
  125.         String idMessageResponse = imbustamentoRisposteMsg.getIDMessageResponse(); // ID associato a questa risposta
  126.         // Altri parametri:
  127.         String idModuloInAttesa = null;
  128.         IDSoggetto identitaPdD = null;
  129.         String scenarioCooperazione = null;
  130.         IDSoggetto soggettoFruitore = null;
  131.         IDServizio idServizio = null;
  132.         String servizioApplicativo = null;
  133.         String profiloGestione = null;
  134.         String servizioApplicativoFruitore = null;
  135.         String servizioApplicativoErogatore = null;
  136.         String idCorrelazioneApplicativa = null;
  137.         String idCorrelazioneApplicativaRisposta = null;
  138.         IDSoggetto soggettoErogatoreServizioHeaderIntegrazione = null;
  139.        
  140.         if(richiestaApplicativa!=null){
  141.             identitaPdD = richiestaApplicativa.getDominio();
  142.             idModuloInAttesa = richiestaApplicativa.getIdModuloInAttesa();
  143.             scenarioCooperazione = richiestaApplicativa.getScenario();
  144.             soggettoFruitore = richiestaApplicativa.getSoggettoFruitore();
  145.             idServizio = richiestaApplicativa.getIDServizio();
  146.             servizioApplicativo = richiestaApplicativa.getServizioApplicativo();
  147.             soggettoErogatoreServizioHeaderIntegrazione = idServizio.getSoggettoErogatore();
  148.             profiloGestione = richiestaApplicativa.getProfiloGestione();
  149.             servizioApplicativoFruitore = richiestaApplicativa.getIdentitaServizioApplicativoFruitore();
  150.             servizioApplicativoErogatore = richiestaApplicativa.getServizioApplicativo();
  151.             idCorrelazioneApplicativa = richiestaApplicativa.getIdCorrelazioneApplicativa();
  152.             idCorrelazioneApplicativaRisposta = richiestaApplicativa.getIdCorrelazioneApplicativaRisposta();
  153.         }else{
  154.             identitaPdD = richiestaDelegata.getDominio();
  155.             idModuloInAttesa = richiestaDelegata.getIdModuloInAttesa();
  156.             scenarioCooperazione = richiestaDelegata.getScenario();
  157.             soggettoFruitore = richiestaDelegata.getIdSoggettoFruitore();
  158.             idServizio = richiestaDelegata.getIdServizio();
  159.             servizioApplicativo = richiestaDelegata.getServizioApplicativo();
  160.             soggettoErogatoreServizioHeaderIntegrazione = idServizio.getSoggettoErogatore();
  161.             profiloGestione = richiestaDelegata.getProfiloGestione();
  162.             servizioApplicativoFruitore = richiestaDelegata.getServizioApplicativo();
  163.             idCorrelazioneApplicativa = richiestaDelegata.getIdCorrelazioneApplicativa();
  164.             idCorrelazioneApplicativaRisposta = richiestaDelegata.getIdCorrelazioneApplicativaRisposta();
  165.         }
  166.        
  167.         IDServizio servizioHeaderIntegrazione = null;
  168.         if(bustaRichiesta!=null){
  169.             try{
  170.                 servizioHeaderIntegrazione = IDServizioFactory.getInstance().getIDServizioFromValues(bustaRichiesta.getTipoServizio(), bustaRichiesta.getServizio(),
  171.                         soggettoErogatoreServizioHeaderIntegrazione, bustaRichiesta.getVersioneServizio());
  172.                 // Per ricambiare il servizio in correlato per AsincronoAsimmetrico, richiestaStato
  173.                 servizioHeaderIntegrazione.setAzione(bustaRichiesta.getAzione());
  174.             }catch(Exception e){
  175.                 msgDiag.logErroreGenerico(e, "IDServizioFactory.getIDServizioFromValues");
  176.                 openspcoopstate.releaseResource();
  177.                 esito.setEsitoInvocazione(false);
  178.                 esito.setStatoInvocazioneErroreNonGestito(e);
  179.                 return esito;
  180.             }
  181.         }
  182.        
  183.         msgDiag.mediumDebug("Profilo di gestione ["+ImbustamentoRisposte.ID_MODULO+"] della busta: "+profiloGestione);
  184.         msgDiag.setDominio(identitaPdD);  // imposto anche il dominio nel msgDiag


  185.         //           Aggiornamento Informazioni
  186.         msgDiag.setIdMessaggioRichiesta(idMessageRequest);
  187.         msgDiag.setIdMessaggioRisposta(idMessageResponse);
  188.         msgDiag.setFruitore(soggettoFruitore);
  189.         if(servizioHeaderIntegrazione!=null){
  190.             msgDiag.setServizio(servizioHeaderIntegrazione);
  191.         }else{
  192.             msgDiag.setServizio(idServizio);
  193.         }
  194.         msgDiag.setServizioApplicativo(servizioApplicativo);
  195.         msgDiag.setIdCorrelazioneApplicativa(idCorrelazioneApplicativa);
  196.         msgDiag.setIdCorrelazioneRisposta(idCorrelazioneApplicativaRisposta);
  197.         msgDiag.setPrefixMsgPersonalizzati(MsgDiagnosticiProperties.MSG_DIAG_IMBUSTAMENTO_RISPOSTE);
  198.         msgDiag.addKeywords(bustaRichiesta, true);
  199.         msgDiag.addKeyword(CostantiPdD.KEY_ID_MESSAGGIO_RICHIESTA, idMessageRequest);
  200.         msgDiag.addKeyword(CostantiPdD.KEY_ID_MESSAGGIO_RISPOSTA, idMessageResponse);
  201.         msgDiag.addKeyword(CostantiPdD.KEY_SA_EROGATORE, servizioApplicativo);
  202.         if(servizioApplicativoFruitore!=null){
  203.             msgDiag.addKeyword(CostantiPdD.KEY_SA_FRUITORE, servizioApplicativoFruitore);
  204.         }
  205.         msgDiag.addKeyword(CostantiPdD.KEY_ID_CORRELAZIONE_APPLICATIVA, idCorrelazioneApplicativa);
  206.        
  207.        


  208.         /* ------------------ Inizializzo stato OpenSPCoop  --------------- */
  209.         msgDiag.mediumDebug("Inizializzo stato per la gestione della richiesta...");
  210.         openspcoopstate.initResource(identitaPdD, ImbustamentoRisposte.ID_MODULO,idTransazione);
  211.         registroServiziManager = registroServiziManager.refreshState(openspcoopstate.getStatoRichiesta(),openspcoopstate.getStatoRisposta());
  212.         configurazionePdDManager = configurazionePdDManager.refreshState(registroServiziManager);
  213.         msgDiag.updateState(configurazionePdDManager);




  214.         /* ------------------ Inizializzazione Contesto di gestione della Richiesta --------------- */
  215.         msgDiag.mediumDebug("Inizializzo contesto per la gestione...");
  216.         // EJBUtils (per eventuali errori)
  217.         EJBUtils ejbUtils = null;
  218.         try{
  219.             ejbUtils = new EJBUtils(identitaPdD,tipoPdD,ImbustamentoRisposte.ID_MODULO,idMessageRequest,
  220.                     idMessageResponse,Costanti.OUTBOX, openspcoopstate ,msgDiag,false,
  221.                     imbustamentoRisposteMsg.getImplementazionePdDSoggettoMittente(),
  222.                     imbustamentoRisposteMsg.getImplementazionePdDSoggettoDestinatario(),
  223.                     profiloGestione,pddContext);
  224.             ejbUtils.setSpedizioneMsgIngresso(imbustamentoRisposteMsg.getSpedizioneMsgIngresso());
  225.             ejbUtils.setRicezioneMsgRisposta(imbustamentoRisposteMsg.getRicezioneMsgRisposta());
  226.             ejbUtils.setServizioApplicativoErogatore(servizioApplicativo);
  227.         }catch(Exception e){
  228.             msgDiag.logErroreGenerico(e, "EJBUtils.new");
  229.             openspcoopstate.releaseResource();
  230.             esito.setEsitoInvocazione(false);
  231.             esito.setStatoInvocazioneErroreNonGestito(e);
  232.             return esito;
  233.         }
  234.        
  235.         try{
  236.             RicezioneBusteExternalErrorGenerator generatoreErrorePA = new RicezioneBusteExternalErrorGenerator(this.log, this.idModulo, requestInfo,openspcoopstate.getStatoRichiesta());
  237.             generatoreErrorePA.updateInformazioniCooperazione(soggettoFruitore, idServizio);
  238.             generatoreErrorePA.updateInformazioniCooperazione(servizioApplicativoFruitore);
  239.             generatoreErrorePA.updateTipoPdD(TipoPdD.APPLICATIVA);
  240.             ejbUtils.setGeneratoreErrorePortaApplicativa(generatoreErrorePA);
  241.         }catch(Exception e){
  242.             msgDiag.logErroreGenerico(e, "RicezioneBusteExternalErrorGenerator.instanziazione");
  243.             openspcoopstate.releaseResource();
  244.             esito.setEsitoInvocazione(false);
  245.             esito.setStatoInvocazioneErroreNonGestito(e);
  246.             return esito;
  247.         }
  248.        
  249.         // Oneway versione 11
  250.         boolean oneWayVersione11 = imbustamentoRisposteMsg.isOneWayVersione11();
  251.         ejbUtils.setOneWayVersione11(oneWayVersione11);

  252.         // Gestori funzionalita'
  253.         IState statoRichiesta = openspcoopstate.getStatoRichiesta();
  254.         ProfiloDiCollaborazione profiloCollaborazione = null;
  255.         try{
  256.             profiloCollaborazione = new ProfiloDiCollaborazione(statoRichiesta,protocolFactory);
  257.         }catch(Exception e){
  258.             msgDiag.logErroreGenerico(e, "ProfiloDiCollaborazione.new");
  259.             openspcoopstate.releaseResource();
  260.             esito.setEsitoInvocazione(false);
  261.             esito.setStatoInvocazioneErroreNonGestito(e);
  262.             return esito;
  263.         }
  264.         RepositoryBuste repositoryBuste = new RepositoryBuste(statoRichiesta, true, protocolFactory);

  265.         // Gestore Messaggi
  266.         GestoreMessaggi msgResponse = null; // Risposta inviata

  267.         //  Modalita' gestione risposta (Sincrona/Fault/Ricevute...)
  268.         // Per i profili diversi dal sincrono e' possibile impostare dove far ritornare l'errore
  269.         boolean newConnectionForResponse = false;
  270.         if( (org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.SINCRONO.equals(bustaRichiesta.getProfiloDiCollaborazione())==false) &&
  271.                 (imbustamentoRisposteMsg.isStateless()==false) ) {
  272.             newConnectionForResponse = configurazionePdDManager.newConnectionForResponse();
  273.         }
  274.         ejbUtils.setReplyOnNewConnection(newConnectionForResponse);
  275.        
  276.        
  277.         // Gestione indirizzo telematico
  278.         boolean gestioneIndirizzoTelematico = false;
  279.         if(imbustamentoRisposteMsg.isStateless()==false){
  280.             gestioneIndirizzoTelematico = configurazionePdDManager.isUtilizzoIndirizzoTelematico();
  281.         }
  282.         ejbUtils.setUtilizzoIndirizzoTelematico(gestioneIndirizzoTelematico);



  283.         // Punto di inizio per la transazione.
  284.         try {

  285.             IProtocolVersionManager protocolManager = protocolFactory.createProtocolVersionManager(profiloGestione);

  286.             Busta bustaRisposta = null;
  287.             TipoOraRegistrazione tipoTempo = this.propertiesReader.getTipoTempoBusta(implementazionePdDMittente);
  288.             boolean asincronoStateless = false;
  289.            
  290.             /* ------------   Risposta Profilo Sincrono  ------------- */
  291.             if(Costanti.SCENARIO_SINCRONO_INVOCAZIONE_SERVIZIO.equals(scenarioCooperazione)){              
  292.                 try{
  293.                     msgDiag.mediumDebug("Generazione busta per il profilo di Collaborazione Sincrono...");
  294.                     bustaRisposta = profiloCollaborazione.sincrono_generaBustaRisposta(idMessageRequest,tipoTempo);
  295.                 }catch(Exception e){
  296.                     msgDiag.logErroreGenerico(e, "profiloCollaborazione.sincrono_generaBustaRisposta");
  297.                     ejbUtils.sendAsRispostaBustaErroreProcessamento(idModuloInAttesa,bustaRichiesta,
  298.                             ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
  299.                                 get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_525_GESTIONE_FUNZIONALITA_PROTOCOLLO),
  300.                             idCorrelazioneApplicativa,idCorrelazioneApplicativaRisposta,servizioApplicativoFruitore,e,
  301.                             parseException);
  302.                     openspcoopstate.releaseResource();
  303.                     esito.setEsitoInvocazione(true);
  304.                     esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
  305.                             "profiloCollaborazione.sincrono_generaBustaRisposta");
  306.                     return esito;
  307.                 }
  308.             }
  309.             /* ------------   Invocazione Asincrono Simmetrico ------------- */
  310.             else if(Costanti.SCENARIO_ASINCRONO_SIMMETRICO_INVOCAZIONE_SERVIZIO.equals(scenarioCooperazione) ){
  311.                 try{
  312.                     msgDiag.mediumDebug("Generazione busta per il profilo di Collaborazione Asincrono Simmetrico (richiesta)...");
  313.                     bustaRisposta = profiloCollaborazione.asincronoSimmetrico_getBustaRicevuta(idMessageRequest,idMessageRequest,true,tipoTempo);
  314.                     asincronoStateless = imbustamentoRisposteMsg.isStateless();
  315.                 }catch(Exception e){
  316.                     msgDiag.logErroreGenerico(e, "profiloCollaborazione.asincronoSimmetrico_getBustaRicevuta(Richiesta)");
  317.                     ejbUtils.sendAsRispostaBustaErroreProcessamento(idModuloInAttesa,bustaRichiesta,
  318.                             ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
  319.                                 get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_525_GESTIONE_FUNZIONALITA_PROTOCOLLO),
  320.                             idCorrelazioneApplicativa,idCorrelazioneApplicativaRisposta,servizioApplicativoFruitore,e,
  321.                             parseException);
  322.                     openspcoopstate.releaseResource();
  323.                     esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
  324.                             "profiloCollaborazione.asincronoSimmetrico_getBustaRicevuta(Richiesta)");
  325.                     esito.setEsitoInvocazione(true); return esito;
  326.                 }
  327.             }
  328.             /* ------------  Risposta Asincrono Simmetrico ------------- */
  329.             else if(Costanti.SCENARIO_ASINCRONO_SIMMETRICO_CONSEGNA_RISPOSTA.equals(scenarioCooperazione) ){
  330.                 try{
  331.                     msgDiag.mediumDebug("Generazione busta per il profilo di Collaborazione Asincrono Simmetrico (risposta)...");
  332.                     bustaRisposta = profiloCollaborazione.asincronoSimmetrico_getBustaRicevuta(protocolManager.getIdCorrelazioneAsincrona(bustaRichiesta),idMessageRequest,false,tipoTempo);
  333.                     if(bustaRisposta!=null){
  334.                         bustaRisposta.setRiferimentoMsgBustaRichiedenteServizio(bustaRichiesta.getRiferimentoMessaggio());
  335.                         // La ricevuta deve avere l'azione della risposta
  336.                         bustaRisposta.setAzione(bustaRichiesta.getAzione());
  337.                     }
  338.                     asincronoStateless = imbustamentoRisposteMsg.isStateless();
  339.                 }catch(Exception e){
  340.                     msgDiag.logErroreGenerico(e, "profiloCollaborazione.asincronoSimmetrico_getBustaRicevuta(Risposta)");
  341.                     ejbUtils.sendAsRispostaBustaErroreProcessamento(idModuloInAttesa,bustaRichiesta,
  342.                             ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
  343.                                 get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_525_GESTIONE_FUNZIONALITA_PROTOCOLLO),
  344.                             idCorrelazioneApplicativa,idCorrelazioneApplicativaRisposta,servizioApplicativoFruitore,e,
  345.                             parseException);
  346.                     openspcoopstate.releaseResource();
  347.                     esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
  348.                             "profiloCollaborazione.asincronoSimmetrico_getBustaRicevuta(Risposta)");
  349.                     esito.setEsitoInvocazione(true); return esito;
  350.                 }
  351.             }
  352.             /* ------------   Invocazione Asincrono Asimmetrico ------------- */
  353.             else if(Costanti.SCENARIO_ASINCRONO_ASIMMETRICO_INVOCAZIONE_SERVIZIO.equals(scenarioCooperazione) ){
  354.                 try{
  355.                     boolean generazionAttributiAsincroni = protocolManager.isGenerazioneInformazioniServizioCorrelatoAsincronoAsimmetrico() &&
  356.                         this.propertiesReader.isGenerazioneAttributiAsincroni(implementazionePdDMittente);
  357.                     msgDiag.mediumDebug("Generazione busta per il profilo di Collaborazione Asincrono Asimmetrico (richiesta)...");
  358.                     bustaRisposta = profiloCollaborazione.asincronoAsimmetrico_getBustaRicevuta(idMessageRequest,idMessageRequest,true,generazionAttributiAsincroni,tipoTempo);
  359.                     asincronoStateless = imbustamentoRisposteMsg.isStateless();
  360.                 }catch(Exception e){
  361.                     msgDiag.logErroreGenerico(e, "profiloCollaborazione.asincronoAsimmetrico_getBustaRicevuta(Richiesta)");
  362.                     ejbUtils.sendAsRispostaBustaErroreProcessamento(idModuloInAttesa,bustaRichiesta,
  363.                             ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
  364.                                 get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_525_GESTIONE_FUNZIONALITA_PROTOCOLLO),
  365.                             idCorrelazioneApplicativa,idCorrelazioneApplicativaRisposta,servizioApplicativoFruitore,e,
  366.                             parseException);
  367.                     openspcoopstate.releaseResource();
  368.                     esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
  369.                             "profiloCollaborazione.asincronoAsimmetrico_getBustaRicevuta(Richiesta)");
  370.                     esito.setEsitoInvocazione(true); return esito;
  371.                 }
  372.             }
  373.             /* ------------  Risposta Asincrono Asimmetrico ------------- */
  374.             else if(Costanti.SCENARIO_ASINCRONO_ASIMMETRICO_POLLING.equals(scenarioCooperazione) ){
  375.                 try{
  376.                     msgDiag.mediumDebug("Generazione busta per il profilo di Collaborazione Asincrono Asimmetrico (richiestaStato)...");
  377.                     boolean generazionAttributiAsincroni = protocolManager.isGenerazioneInformazioniServizioCorrelatoAsincronoAsimmetrico() &&
  378.                         this.propertiesReader.isGenerazioneAttributiAsincroni(implementazionePdDMittente);
  379.                     bustaRisposta = profiloCollaborazione.asincronoAsimmetrico_getBustaRicevuta(protocolManager.getIdCorrelazioneAsincrona(bustaRichiesta),idMessageRequest,false,generazionAttributiAsincroni,tipoTempo);
  380.                     if(bustaRisposta!=null){
  381.                         bustaRisposta.setRiferimentoMsgBustaRichiedenteServizio(bustaRichiesta.getRiferimentoMessaggio());
  382.                         // La ricevuta deve avere l'azione della richiesta-stato
  383.                         bustaRisposta.setAzione(bustaRichiesta.getAzione());
  384.                     }
  385.                     asincronoStateless = imbustamentoRisposteMsg.isStateless();
  386.                 }catch(Exception e){
  387.                     msgDiag.logErroreGenerico(e, "profiloCollaborazione.asincronoAsimmetrico_getBustaRicevuta(Risposta)");
  388.                     ejbUtils.sendAsRispostaBustaErroreProcessamento(idModuloInAttesa,bustaRichiesta,
  389.                             ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
  390.                                 get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_525_GESTIONE_FUNZIONALITA_PROTOCOLLO),
  391.                             idCorrelazioneApplicativa,idCorrelazioneApplicativaRisposta,servizioApplicativoFruitore,e,
  392.                             parseException);
  393.                     openspcoopstate.releaseResource();
  394.                     esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
  395.                             "profiloCollaborazione.asincronoAsimmetrico_getBustaRicevuta(Risposta)");
  396.                     esito.setEsitoInvocazione(true); return esito;
  397.                 }
  398.             }

  399.             /* ------ Check Busta di Risposta ------- */
  400.             msgDiag.mediumDebug("Check busta...");
  401.             if(bustaRisposta==null){
  402.                 throw new Exception("Busta di risposta ["+scenarioCooperazione+"] non generata.");
  403.             }

  404.             switch (protocolManager.getConsegnaAffidabile(bustaRisposta)) {
  405.             case ABILITATA:
  406.                 bustaRisposta.setConfermaRicezione(true);
  407.                 break;
  408.             case DISABILITATA:
  409.                 bustaRisposta.setConfermaRicezione(false);
  410.                 break;
  411.             default:
  412.                 // valore della busta di risposta
  413.                 break;
  414.             }
  415.            
  416.             switch (protocolManager.getFiltroDuplicati(bustaRisposta)) {
  417.             case ABILITATA:
  418.                 bustaRisposta.setInoltro(Inoltro.SENZA_DUPLICATI,protocolFactory.createTraduttore().toString(Inoltro.SENZA_DUPLICATI));
  419.                 break;
  420.             case DISABILITATA:
  421.                 bustaRisposta.setInoltro(Inoltro.CON_DUPLICATI,protocolFactory.createTraduttore().toString(Inoltro.CON_DUPLICATI));
  422.                 break;
  423.             default:
  424.                 // valore della busta di risposta
  425.             }
  426.            

  427.             /* -------------- Aggiungo ID Risposta ------------------- */
  428.             bustaRisposta.setID(idMessageResponse);
  429.             msgDiag.addKeywords(bustaRisposta, false);
  430.            
  431.            
  432.             /* -------------- Aggiungo SA Applicativo Erogatore ------------------- */
  433.             bustaRisposta.setServizioApplicativoErogatore(servizioApplicativoErogatore);            


  434.             /* -------------- Imposto eventuali informazioni DirectVM ------------------- */
  435.             DirectVMProtocolInfo.setInfoFromContext(pddContext, bustaRisposta);
  436.            
  437.            
  438.             /* ------------  Spedizione Risposta   ------------- */
  439.             msgDiag.mediumDebug("Spedizione busta di risposta al modulo in uscita (RicezioneBuste/InoltroRisposte)...");
  440.             msgResponse =
  441.                 ejbUtils.sendBustaRisposta(idModuloInAttesa,bustaRisposta,profiloGestione,
  442.                         idCorrelazioneApplicativa,idCorrelazioneApplicativaRisposta,servizioApplicativoFruitore);

  443.             // elimino utilizzo PdD della richiesta
  444.             msgDiag.mediumDebug("Elimino utilizzo busta dalla PdD...");
  445.             repositoryBuste.eliminaUtilizzoPdDFromInBox(idMessageRequest,asincronoStateless);


  446.             // Commit JDBC
  447.             openspcoopstate.commit();

  448.             // Aggiornamento cache messaggio
  449.             if(msgResponse!=null)
  450.                 msgResponse.addMessaggiIntoCache_readFromTable(ImbustamentoRisposte.ID_MODULO, "risposta");

  451.             // Aggiornamento cache proprietario messaggio
  452.             if(msgResponse!=null)
  453.                 msgResponse.addProprietariIntoCache_readFromTable(ImbustamentoRisposte.ID_MODULO, "risposta",idMessageRequest,false);

  454.             // Rilascio connessione
  455.             msgDiag.mediumDebug("Rilascio connessione al database...");
  456.             openspcoopstate.releaseResource();

  457.             msgDiag.mediumDebug("Lavoro Terminato.");
  458.             esito.setStatoInvocazione(EsitoLib.OK, null);
  459.             esito.setEsitoInvocazione(true); return esito;



  460.         }catch(Throwable e){    
  461.             this.log.error("ErroreGenerale",e);
  462.             msgDiag.logErroreGenerico(e, "Generale");
  463.            
  464.             try{
  465.                 ejbUtils.sendAsRispostaBustaErroreProcessamento(idModuloInAttesa,bustaRichiesta,
  466.                         ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.getErroreIntegrazione(),
  467.                         idCorrelazioneApplicativa,idCorrelazioneApplicativaRisposta,servizioApplicativoFruitore,e,
  468.                         parseException);
  469.                 esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,"ErroreGenerale");
  470.                 esito.setEsitoInvocazione(true);
  471.             }catch(Exception er){
  472.                 msgDiag.logErroreGenerico(er,"ejbUtils.sendErroreGenerale(profiloConRisposta)");
  473.                 ejbUtils.rollbackMessage("Spedizione Errore al Mittente durante una richiesta con gestione della risposta non riuscita", esito);
  474.                 esito.setStatoInvocazioneErroreNonGestito(er);
  475.                 esito.setEsitoInvocazione(false);
  476.             }
  477.             openspcoopstate.releaseResource();
  478.             return esito;
  479.         }

  480.     }
  481. }