Show TOC

Anwendungsbeispiele des Destination-Service-APILocate this document in the navigation structure

Importe

Die folgenden Pakete enthalten die Klassen, die für die Verwendung des Destination-Service-API benötigt werden.

  • com.sap.security.core.server.destinations.api.DestinationService;
  • com.sap.security.core.server.destinations.api.Destination;
  • com.sap.security.core.server.destinations.api.DestinationException;
  • com.sap.security.core.server.destinations.api.HTTPDestination;
  • com.sap.security.core.server.destinations.api.RFCDestination;
    Hinweis

    Damit Sie diese Klassen importieren und Ihre Quellen zusammenstellen können, müssen Sie diese Bibliotheken zuerst in Ihr Projekt einbinden. Wählen Sie Zusätzliche Bibliotheken… im Kontextmenü Ihres Projekts und fügen Sie die Elemente security.class und tc/sec/destinations/interface hinzu.

HTTP(S)-Destinationen

Die folgenden Beispiele zeigen verschiedene Möglichkeiten, wie Sie den Destination-Service zum Einrichten von HTTP(S)-Verbindungen verwenden können. Das erste Beispiel zeigt, wie Sie eine Verbindung mithilfe einer bestehenden Destination herstellen können. Das zweite Beispiel zeigt, wie die Sie eine Verbindung mithilfe von Standardauthentifizierung anlegen können.

HTTP-Verbindung mithilfe einer bestehenden Destination herstellen

Das folgende Beispiel zeigt, wie Sie eine Verbindung zur HTTP-Destination dst-1 herstellen. Die URL und Benutzerberechtigungsinformationen wurden im Destination-Service abgelegt und im SAP NetWeaver Administrator gepflegt. Die für die Verbindung verwendete Authentifizierungsmethode hängt von den Einstellungen in der Destination (ohne, Standardauthentifizierung, X.509-Client-Zertifikate oder SAP-Anmeldetickets) ab. Wenn die in der Destination gesicherte URL HTTP verwendet, wird SSL mit Server-Authentifizierung zur Sicherung der Verbindung verwendet.

Code-Beispiel für das Herstellen einer HTTP-Verbindung mithilfe einer bestehenden Destination

import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;
import com.sap.security.core.server.destinations.api.DestinationException;
import com.sap.security.core.server.destinations.api.DestinationService;
import com.sap.security.core.server.destinations.api.HTTPDestination;

    Context ctx = new InitialContext();
    DestinationService dstService = (DestinationService) 
    ctx.lookup(DestinationService.JNDI_KEY);
    
    if (dstService == null)
        throw new NamingException("Destination Service not available");
    
    Destination destination = dstService.getDestination("HTTP","dst-1");
    //for HTTP destination: cast
    HTTPDestination httpDestination = (HTTPDestination) destination;
    //obtain a HTTPUrlConnection from the destinationHttpURLConnection
    httpConnection = httpDestination.getURLConnection();

Neue HTTP-Destination anlegen

Das folgende Beispiel zeigt, wie Sie eine neue Destination dst-2 anlegen und ablegen können. Alle Daten werden im Bereich des sicheren Speichers auf dem AS Java abgelegt. Die Daten werden verschlüsselt, vorausgesetzt das SAP Java Cryptographic Toolkit wurde installiert.

Die Verwaltung der angelegten Destination ist mithilfe des SAP NetWeaver Administrator möglich.

Code-Beispiel für das Anlegen einer neuen HTTP-Destination

import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;
import com.sap.security.core.server.destinations.api.DestinationException;
import com.sap.security.core.server.destinations.api.DestinationService;
import com.sap.security.core.server.destinations.api.HTTPDestination;

    Context ctx = new InitialContext();
    DestinationService dstService = (DestinationService)
    ctx.lookup(DestinationService.JNDI_KEY);
    if (dstService == null)
        throw new NamingException("Destination Service not available");
    
    //Note: this only created the destination
    //it needs to be stored using dstService.storeDestination
    
    HTTPDestination destination = (HTTPDestination)
    dstService.createDestination("HTTP");
    destination.setUrl(url);
    destination.setName(name);
    destination.setUsernamePassword("testuser", "abc123");
    dstService.storeDestination("HTTP", destination);

 

RFC-Destinationen

SAP JCo 3.0 verwenden

Wenn Sie SAP JCo 3.0 oder höher verwenden, müssen Sie den Destination Service nicht explizit aufrufen. Richten Sie wie in der Entwicklerdokumentation für SAP JCo 3.0 beschrieben die Verbindung ein.

SAP JCo 2.x verwenden

Die folgenden Beispiele zeigen verschiedene Möglichkeiten, wie Sie den Destination-Service bei der Verwendung von SAP JCo 2.x zum Einrichten von RFC-Verbindungen verwenden können. Das erste Beispiel zeigt, wie Sie eine Verbindung mithilfe einer bestehenden Destination herstellen können. Das zweite Beispiel zeigt, wie Sie eine Verbindung mithilfe einer Benutzer-ID und einem Kennwort anlegen können, die in einer RFC-Destination abgelegt wird.

RFC-Verbindung mithilfe einer bestehenden Destination herstellen

Das folgende Beispiel zeigt, wie Sie eine Verbindung zur RFC-Destination dst-2 herstellen. Die Verbindungsdaten und Benutzerberechtigungsinformationen wurden gepflegt und in der Destination abgelegt.

Beim Herstellen einer Verbindung können Sie entweder eine direkte Verbindung verwenden oder einen Verbindungspool nutzen. Weitere Informationen finden Sie in den entsprechenden Abschnitten des Code-Beispiels.

Code-Beispiel für das Herstellen einer RFC-Verbindung mithilfe einer bestehenden Destination

import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;
import com.sap.mw.jco.JCO;
import com.sap.mw.jco.JCO.Exception;
import com.sap.security.core.server.destinations.api.DestinationException;
import com.sap.security.core.server.destinations.api.DestinationService;
import com.sap.security.core.server.destinations.api.RFCDestination;

    DestinationService dstService = (DestinationService) 
    ctx.lookup(DestinationService.JNDI_KEY);
    
    if (dstService == null)
        throw new NamingException("Destination Service not available");
    

    RFCDestination dst =
        (RFCDestination) dstService.getDestination("RFC", "dst-2");
    int maxPoolSize = dst.getMaxPoolSize();
    long maxWaitTime = dst.getMaxWaitTime();
    Properties jcoProperties = dst.getJCoProperties();

/**
* Code example for establishing a direct connection
*/
    JCO.Client client = JCO.createClient(jcoProperties);
    client.connect();
    client.ping();
    client.disconnect();

/**
* Code example for establishing a pooled connection
*/
    JCO.addClientPool("myPool", maxPoolSize, jcoProperties);
    JCO.getClientPoolManager().getPool("myPool").setMaxWaitTime(maxWaitTime);

    JCO.Client pooledClient = null;

//Check for a pool connection. If no pool connection exists, then an error //occurs. 
    try {
        pooledClient = JCO.getClient("myPool");
        pooledClient.ping();
    } catch (JCO.Exception exc) {
        if (exc.getGroup() == Exception.JCO_ERROR_RESOURCE) {
            //Error: no connection available from pool
            //Insert code to handle error.
        }

//Release pooled connection
    } finally {
        if (pooledClient != null) {
            JCO.releaseClient(pooledClient);
        }
    }

Neue RFC-Destination anlegen

Das folgende Beispiel zeigt, wie Sie eine neue RFC-Destination dst-2 anlegen und ablegen können. Die Daten der Destination werden zuerst in den JCo-Eigenschaften festgelegt und anschließend in die RFC-Destination geschrieben. Die Destination verwendet Lastverteilung sowie Benutzer-ID und Kennwort für die Authentifizierung. Die nachträgliche Verwaltung der angelegten Destination ist mithilfe des SAP NetWeaver Administrator möglich.

Code-Beispiel für das Anlegen einer neuen RFC-Destination

import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;
import com.sap.mw.jco.JCO;
import com.sap.mw.jco.JCO.Exception;
import com.sap.security.core.server.destinations.api.DestinationException;
import com.sap.security.core.server.destinations.api.DestinationService;
import com.sap.security.core.server.destinations.api.RFCDestination;

    DestinationService dstService = (DestinationService)
    ctx.lookup(DestinationService.JNDI_KEY);
    if (dstService == null)
        throw new NamingException("Destination Service not available");
    
    //Note: this only created the destination
    //it needs to be stored using dstService.storeDestination
    
    RFCDestination destination = (RFCDestination)
        dstService.createDestination("RFC");
    Properties jcoPropeties = new Properties();
    jcoPropeties.setProperty("jco.client.client", "000");
    jcoPropeties.setProperty("jco.client.user", "MY_USER");
    jcoPropeties.setProperty("jco.client.passwd", "SAPSAP");
    jcoPropeties.setProperty("jco.client.lang", "EN");
    jcoPropeties.setProperty("jco.client.r3name", "ABC");
    jcoPropeties.setProperty("jco.client.group", "PUBLIC");
    jcoPropeties.setProperty("jco.client.mshost", "myhost");
    jcoPropeties.setProperty("jco.client.type", "3");
    jcoPropeties.setProperty("jco.destination.peak_limit", "20");
    jcoPropeties.setProperty("jco.destination.pool_capacity", "10");
    rfcDestination.setJcoProperties(RFCDestination.AUTHENTICATION_MODE_CONFIGURED_USER, RFCDestination.CONNECTION_MODE_LOAD_BALANCING, jcoPropeties);
    dst.setName("dst-2");
    dstService.storeDestination("RFC", dst);