Avalados por :

Cómo usar cadenas de conexión complejas en SAP JCO.Client para acceder a servidores SAP

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 34 Vistas
0
Cargando...

Hola a todos,

Dentro de los paisajes de sap, se puede usar una cadena de conexión para iniciar sesión en los sistemas sap. El SAP Javagui utiliza dicho término para especificar la forma de acceder a los sistemas sap.

Un ejemplo de término para una cadena de conexión que conecta a un servidor de aplicaciones detrás de 2 saprouters es:

/H/gate.acme.com/S/3299/P/secret/H/gate.sap.com/S/3298/H/iwdf8997.sap.com/S/3200

<--


1er router -
><-- 2do router -


><------ servidor de aplicaciones -


>

El segundo término se puede usar para conectarse a un servidor de mensajes y especificar un grupo de inicio de sesión (balanceo de carga):

/H/gate.acme.com/S/3299/P/secret/H/gate.sap.com/S/3298/M/alrmain.wdf.sap-ag.de/S/4253/G/SPACE

<--


1er router -
><-- 2do router -


><----


servidor de mensajes -


><- grupo de inicio de sesión->

Ahora mi pregunta:

¿Es posible usar cadenas de conexión complejas (con router y grupos de inicio de sesión) con JCO.Client (método createclient)?

He intentado el método createclient con el parámetro URL y obtuve una Excepción "no protocolo".

¡Gracias por la ayuda!

Joerg

Pedro Pascal
Se unió el 07/03/2018
Pinterest
Telegram
Linkedin
Whatsapp

4 Respuestas

0
Cargando...

Hola Rudy,

Sí - Balanceo de carga. Pero no el balanceo de carga basado en el cliente que utiliza JCo-ClientPools u una tecnología similar.

Los sistemas SAP pueden utilizar más de un servidor de aplicaciones para procesar cargas de trabajo pesadas. Dentro del sistema SAP, puedes definir Grupos de inicio de sesión (Transacción SMLG) para agrupar los servidores disponibles según un grupo virtual (por ejemplo, VENTAS y SERVICIO). El grupo SPACE está predefinido y utiliza todos los servidores de aplicaciones disponibles en un grupo.

El mecanismo de inicio de sesión del lado del cliente (SAPGui, JCO) activa el servidor de mensajes de todo el sistema (1 servidor de mensajes por instancia SAP: mshost). Este servidor de mensajes dirige la solicitud de inicio de sesión a un servidor de aplicaciones disponible para el grupo dado con un mecanismo de balanceo de carga (balanceo de carga del lado del servidor con cálculo de rendimiento).

Para este mecanismo de inicio de sesión del lado del cliente, debes utilizar el método createclient implementando los parámetros mshost, r3name, grupo.

Mi problema es que el servidor de mensajes puede estar ubicado detrás de uno o más saprouters. Entonces, una conexión directa al servidor de mensajes no está disponible. El saprouter es comparable a un cortafuegos con funcionalidad de reenvío.

Detrás de las interfaces de usuario para definir conexiones sap (por ejemplo, JavaGUI - Opciones avanzadas) encontrarás la cadena de conexión sap típica para describir la ruta hacia el servidor de mensajes: /H/router1/S/routerport1/H/router2/S/routerport2/M/messageserver/G/grupo de inicio de sesión.

Mi solución alternativa proporcionada en este hilo funciona para el 90%.

Gracias.

Joerg

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

¡Ah, así que estás buscando equilibrar la carga! En ese caso, creo que lo que quieres hacer es utilizar el agrupamiento de conexiones. Echa un vistazo a la API JCO.addClientPool(...). Un ejemplo de cómo usarlo está disponible en el archivo zip de SAP JCO, en la carpeta de demostración. El nombre del programa es Example2.java.

Hay varias formas de crear un grupo de clientes, y deberías revisar todas para ver cuál se adapta mejor a tus necesidades. Te incluiré un ejemplo:

public static void addClientPool(java.lang.String key,

int max_connections,

java.lang.String client,

java.lang.String user,

java.lang.String passwd,

java.lang.String lang,

java.lang.String mshost,

java.lang.String r3name,

java.lang.String group)

Crea una instancia de un grupo de clientes para un sistema SAP remoto (con equilibrio de carga).

Nota: Dependiendo de la versión del sistema SAP, se admiten inicios de sesión con Single-Sign-On (SSO) o certificados X509.

Para SSO, especifica que el usuario sea $MYSAPSSO2$ y pasa el ticket codificado en base64 como parámetro passwd.

Para X509, especifica que el usuario sea $X509CERT$ y pasa el certificado codificado en base64 como parámetro passwd.

Parámetros:

key - nombre del grupo

max_connections - número máximo de conexiones permitidas para el grupo.

Importante: Consulta también las notas OSS 314530 y 316877 sobre cómo configurar el número de conexiones externas en el sistema SAP y/o en la puerta de enlace SAP.

client - cliente de inicio de sesión SAP

user - usuario de inicio de sesión SAP

passwd - contraseña de inicio de sesión SAP

lang - idioma de inicio de sesión SAP

mshost - nombre del servidor de mensajes

r3name - nombre del sistema SAP

group - nombre del grupo de servidores de aplicaciones

Lanza:

JCO.Exception - se lanza si ya existe un grupo con el nombre especificado

¡Buena suerte!

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Hola Rudy,

Gracias por tu respuesta.

Los métodos JCo no admiten createclient con equilibrio de carga (servidor de mensajes y grupo de inicio de sesión) combinado con uno o más saprouter. Revisa tu código --> (sin equilibrio de carga).

No encontrarás una solución (documentada oficialmente) para este problema.

Pero he encontrado un método alternativo para este problema:

private static JCO.Client getClient(String user, String password,

String client, String connection, String system, String language) {

String mMsHost = "";

String mSID = "";

String mGroup = "";

try {

// Modo de equilibrio de carga

int mPosM = connection.indexOf("/M");

if (mPosM >= 0) {

// Servidor de mensajes encontrado

// establecer SID

mSID = system;

// obtener Grupo

int mPosG = connection.indexOf("/G");

if (mPosG < 0) {

System.out

.println("Falta el Grupo de inicio de sesión. Establécelo en ESPACIO");

mGroup = "ESPACIO";

} else {

mMsHost = connection.substring(0, mPosG);

mGroup = connection.substring(mPosG + 3);

}

// preparar mshost

mMsHost = mMsHost.replaceFirst("/M", "/H");

System.out.println("Usando MSHOST SID GRUPO: " + mMsHost + " "

+ mSID + " " + mGroup);

// crear cliente

return JCO.createClient(client, // cliente SAP

user, // usuario

password, // contraseña

language, // idioma

mMsHost, // host de mensajes

mSID, // SID

mGroup); // Grupo

} else {

// inicio de sesión simple en el Servidor de Aplicaciones

return JCO.createClient(client, // cliente SAP

user, // usuario

password, // contraseña

language, // idioma

connection, // nombre de host

system); // número de sistema

}

} catch (Exception e) {

System.err.println("Se produjo un error al conectar con el Sistema SAP:\n"

+ e.getMessage());

return null;

}

}

por Joerg

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

> Ahora mi pregunta:

>

> ¿Es posible usar cadenas de conexión complejas

> (con enrutador y grupos de inicio de sesión) con JCO.Client

> (método createClient)?

>

Dado que no entiendo en absoluto por qué estás intentando hacer lo que estás haciendo, simplemente responderé la pregunta anterior. No. Solo como referencia, aquí está una de las especificaciones de API para createClient. La que tiene el máximo de parámetros:

public static JCO.Client createClient(java.lang.String client,

java.lang.String user,

java.lang.String passwd,

java.lang.String lang,

java.lang.String ashost,

java.lang.String sysnr,

java.lang.String gwhost,

java.lang.String gwserv)Crea una instancia de una conexión de cliente a un sistema SAP remoto (sin equilibrio de carga)

Parámetros:

client - Cliente de inicio de sesión de SAP

user - Usuario de inicio de sesión de SAP

passwd - Contraseña de inicio de sesión de SAP

lang - Idioma de inicio de sesión de SAP

ashost - Nombre del host del servidor de aplicaciones

sysnr - Número de sistema SAP

gwhost - Nombre del host del gateway de SAP

gwserv - Número de servicio del gateway de SAP

Devuelve: el cliente recién creado

Tienes la flexibilidad de usar todos estos o un subconjunto de estos, así como especificarlos en un objeto Property o un array de cadenas.

Rudy

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019

contacto@primeinstitute.com

(+51) 1641 9379
(+57) 1489 6964

© 2024 Copyright. Todos los derechos reservados.

Desarrollado por Prime Institute

¡Hola! Soy Diana, asesora académica de Prime Institute, indícame en que curso estas interesado, saludos!
Hola ¿Puedo ayudarte?