Domanda

Ho un'altra domanda JCo-correlata e, auspicabilmente, trovare aiuto.

Con JCo si può facilmente costruire una connessione, come è spiegato nei fogli di esempio che è venuto con il JCo-biblioteca. Purtroppo, l'unico modo per costruire una connessione viene gestita con un file di proprietà creati. Si avrebbe't essere così male, se ci non't tutti i dati sensibili in esso. Ma almeno, la password per l'utente di SAP si trova nel file, quindi è una mancanza di sicurezza in questo modo di collegamento-handling. Il manuale di JCo dice anche:

"Per questo esempio la configurazione di destinazione è memorizzato in un file che viene chiamato dal programma. In pratica si dovrebbe evitare questo per motivi di sicurezza".

ma couldnt trovare una soluzione di lavoro, dopo tutto. Ci sono palmful le discussioni su questo tema, come questo

http://forums.sdn.sap.com/thread.jspa ? messageId = 7303957

, ma nessuno di loro sono utili. Ho davvero CAN NOT capire una soluzione e nemmeno trovare uno. In realtà ho risolto il problema della sicurezza, con l'eliminazione del file dopo la costruzione del collegamento, ma questa non è una soluzione soddisfacente. Ci deve essere un modo migliore di ottenere il parametro per la connessione, soprattutto quando si trova nel manuale, ma non ho la colla come.

Chiunque già lavorato con JCo 3.0 e conosce questo problema?

È stato utile?

Soluzione

Sì, è possibile. È necessario creare una propria implementazione di DestinationDataProvider e registrarlo tramite Environment.registerDestinationDataProvider (). Tuttavia, il vostro DDP ottiene i dati di connessione e le credenziali dipende da voi. Date un'occhiata a net.sf.rcer.conn.connections.ConnectionManager , c'è un esempio di lavoro in là.

È necessario

  • copiare la classe privata a partire dal linea 66 e adattarlo alle proprie esigenze (che è, recuperare i dati di connessione da ovunque si desidera)
  • eseguire la registrazione (linea 204) da qualche parte durante l'avvio dell'applicazione
  • ottenere la connessione utilizzando alcuni identificatore di stringa che verrà passato al DestinationDataProvider.

Altri suggerimenti

E 'un po' di confusione, è stato dificile per me come per capire anche questo.

Tutto ciò che serve è un oggetto di tipo java.util.Properties per riempire i campi desiderati, ma è fino a ou come riempire questo oggetto.

I dit attraverso una ValueObject, posso riempire questo VO da un file, database, web form ...

    JCOProvider jcoProvider = null;
    SAPVO sap = new SAPVO(); // Value Object
    Properties properties = new Properties();

    if(jcoProvider == null) {


        // Get SAP config from DB
        try {
            sap = SAPDAO.getSAPConfig(); // DAO object that gets conn data from DB
        } catch (Exception ex) {
            throw new ConexionSAPException(ex.getMessage());
        }

         // Create new conn
        jcoProvider = new JCOProvider();

    }

    properties.setProperty(DestinationDataProvider.JCO_ASHOST,        sap.getJCO_ASHOST());
    properties.setProperty(DestinationDataProvider.JCO_SYSNR,         sap.getJCO_SYSNR());
    properties.setProperty(DestinationDataProvider.JCO_CLIENT,        sap.getJCO_CLIENT());
    properties.setProperty(DestinationDataProvider.JCO_USER,          sap.getJCO_USER());
    properties.setProperty(DestinationDataProvider.JCO_PASSWD,        sap.getJCO_PASSWD());
    properties.setProperty(DestinationDataProvider.JCO_LANG,          sap.getJCO_LANG());
//    properties.setProperty(DestinationDataProvider.JCO_TRACE,         "10");

    try {

        jcoProvider.changePropertiesForABAP_AS(properties);

    } catch (Exception e) {

        throw new ConexionSAPException(e.getMessage());

    }

La classe JCOProvider:

import com.sap.conn.jco.ext.DestinationDataEventListener;
import com.sap.conn.jco.ext.DestinationDataProvider;
import com.sap.conn.jco.ext.Environment;
import es.grupotec.ejb.util.ConexionSAPException;
import java.util.Properties;

public class JCOProvider implements DestinationDataProvider {

    private String SAP_SERVER = "SAPSERVER";
    private DestinationDataEventListener eventListener;
    private Properties ABAP_AS_properties;

    public JCOProvider() {
    }

    @Override
    public Properties getDestinationProperties(String name) {

        if (name.equals(SAP_SERVER) && ABAP_AS_properties != null) {
            return ABAP_AS_properties;
        } else {
            return null;
        }
//        if(ABAP_AS_properties!=null) return ABAP_AS_properties;
//        else throw new RuntimeException("Destination " + name + " is not available");

    }

    @Override
    public boolean supportsEvents() {
        return true;
    }

    @Override
    public void setDestinationDataEventListener(DestinationDataEventListener eventListener) {
        this.eventListener = eventListener;
    }

    public void changePropertiesForABAP_AS(Properties properties) throws ConexionSAPException {

        try {

            if (!Environment.isDestinationDataProviderRegistered()) {

                if (ABAP_AS_properties == null) {
                    ABAP_AS_properties = properties;
                }
                Environment.registerDestinationDataProvider(this);

            }

            if (properties == null) {

                if (eventListener != null) {
                    eventListener.deleted(SAP_SERVER);
                }
                ABAP_AS_properties = null;

            } else {

                ABAP_AS_properties = properties;
                if (eventListener != null) {
                    eventListener.updated(SAP_SERVER);
                }

            }

        } catch (Exception ex) {

            throw new ConexionSAPException(ex.getMessage());

        }


    }
}

Saluti

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top