Frage

Ich habe eine andere JCo-bezogene Frage und hoffentlich Hilfe zu finden.

Mit JCo können Sie ganz einfach eine Verbindung aufzubauen, wie es in den Beispielblätter erläutert, die mit der JCo-Bibliothek kam. Leider ist der einzige Weg, um eine Verbindung Gebäude mit einer erstellten Eigenschaftendatei behandelt. Es würde nicht so schlimm sein, wenn es irgendwelche sensiblen Daten in es ist nicht. Aber zumindest steht das Kennwort für den SAP-Benutzer in der Datei, so dass es ein Mangel an Sicherheit auf diese Weise von verbindungs ??Handhabung ist. Das Handbuch von JCo so sagt auch:

„Für dieses Beispiel der Zielkonfiguration in einer Datei gespeichert ist, die durch das Programm aufgerufen wird. In der Praxis Sie dies aus Sicherheitsgründen vermeiden sollte.“

aber kann nicht eine funktionierende Lösung schließlich finden. Es gibt ein palmful Threads zu diesem Thema, wie diese

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

aber keiner von ihnen ist hilfreich. Ich wirklich KANN NICHT Figur aus einer Lösung und keiner finden. Tatsächlich löste ich das Sicherheitsproblem mit dem Löschen die Datei, nachdem die Verbindung Gebäuden, aber dies ist keine befriedigende Lösung. Dort hat einen besseren Weg, um die Parameter für die Verbindung sein, vor allem, wenn es in der Anleitung steht, aber ich habe keinen Kleber, wie.

Wer bereits gearbeitet mit JCo 3.0 und kennt dieses Problem?

War es hilfreich?

Lösung

Ja, das ist möglich. Sie haben eine eigene Implementierung von DestinationDataProvider erstellen und registrieren, es Environment.registerDestinationDataProvider () verwenden. Jedoch Ihre DDP erhält die Verbindungsdaten und Anmeldeinformationen sind bei Ihnen. Werfen Sie einen Blick auf net.sf.rcer.conn.connections.ConnectionManager , gibt es ein funktionierendes Beispiel drin.

Sie müssen

  • Kopieren Sie die private Klasse ab Zeile 66 und passen sie an die eigenen Bedürfnisse (das heißt, holen die Verbindungsdaten von wo immer Sie wollen)
  • führen Sie die Registrierung (Linie 204) irgendwo während der Inbetriebnahme Ihrer Anwendung
  • erhält die Verbindung einig Stringbezeichner verwenden, die zu Ihrem DestinationDataProvider übergeben werden.

Andere Tipps

Es ist ein wenig verwirrend, es wurde mir Dificult, wie dies auch Figur.

Alles, was Sie brauchen, ist ein Objekt vom Typ java.util.Properties die gewünschten Felder zu füllen, aber es ist bis zu ou wie dieses Objekt zu füllen.

I dit es durch eine ValueObject, kann ich diese VO aus einer Datei füllen, Datenbank, Web-Formular ...

    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());

    }

Die JCOProvider Klasse:

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());

        }


    }
}

Viele Grüße

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top