Anda di halaman 1dari 6

Cómo utilizar el soporte de Soft-State para servicios OData.

Actualizaciones

17.03.2015 se agregó información de que la administración de sesiones de seguridad


debe activarse

Introducción:

El modo denominado "estado suave" permite que el tiempo de ejecución de SAP


NetWeaver Gateway procese varias solicitudes en una sesión de servidor de
aplicaciones ABAP, similar al comportamiento con estado. La única diferencia es el
comportamiento del servidor de aplicaciones después de que se agote el tiempo de la
sesión: en lugar de interrumpir el procesamiento de la solicitud con una excepción de
tiempo de espera, el servidor crea una nueva sesión y procesa la solicitud como de
costumbre. Para el consumidor, el cambio de las sesiones del servidor de aplicaciones
es transparente y no se pierden datos en la sesión del cliente.

La sesión mantenida por el marco de trabajo de ICF da como resultado una sesión
mantenida en el sistema back-end a través de RFC donde la clase del proveedor de
datos puede almacenar datos en caché en las variables miembro. La Caché del
proveedor de datos se resalta en verde en la siguiente figura.

El modo de estado suave debe usarse para aplicaciones creadas en la funcionalidad


heredada en el backend, especialmente cuando la funcionalidad incluye la carga /
almacenamiento en caché iniciales de grandes cantidades de datos para una sola
solicitud. Un ejemplo típico sería un cálculo de precio.

Al utilizar el estado suave, los recursos / funcionalidad que se han cargado durante la
carga inicial se pueden reutilizar para las solicitudes posteriores del servicio. Por lo tanto,
el principal beneficio del estado suave es una optimización de rendimiento considerable
de un servicio OData.
Prerrequisitos

Ha creado un servicio OData de muestra usando el Service Builder como se describe


en mi documento de SCN Cómo desarrollar un servicio de puerta de enlace usando una
implementación basada en código.

Importante:

Para poder utilizar el estado suave, es obligatorio que se haya activado la Administración
de sesión de seguridad HTTP en AS ABAP. La administración de la sesión de seguridad
se puede administrar mediante la transacción SICF_SESSIONS como se describe en la
Ayuda en línea de SAP:

Activación de HTTP Security Session Management en AS ABAP - Autenticación de


usuario e inicio de sesión único - Biblioteca SAP

Incluso si no se está activando la gestión de sesiones de seguridad, actualmente el


servicio se muestra como activo para el estado suave pero no funciona como se supone.

Descripción general: pasos de implementación para activar Softstate para su


servicio

1. Redefinir el método DEFINIR de la llamada de extensión del proveedor modelo

2. Cree un atributo de instancia MV_IS_SOFTSTATE para la clase DPC_EXT que


almacena el estado si el estado suave está activado

3. Redefinir el método
/IWBEP/IF_MGW_SOST_SRV_RUNTIME~OPERATION_START para
establecer esta variable

Pasos de implementación en la clase de proveedor modelo

1. Iniciar el mantenimiento del proveedor de modelo


ZCL_ZGW_PRODUCT_MPC_EXT clases de ampliación

2. Redefinir el método DEFINE de la clase MPC_EXT


method DEFINE.
super->define().
model->set_soft_state_enabled(abap_true).
endmethod.

Pasos de implementación en la clase de proveedor de datos

1. Comience a mantener la clase del proveedor de datos


ZCL_ZGW_PRODUCT_DPC_EXT

2. Haga clic en la pestaña Atributos e inserte un nuevo atributo con la siguiente


configuración
Attribute: MV_IS_SOFTSTATE
Level: Instance Attribute
Visibility: Private
Typing: Type
Associated Type: ABAP_BOOL
Description: TRUE if we are running in softstate mode
3. Haga clic en la pestaña Métodos y vuelva a definir el método
/IWBEP/IF_MGW_SOST_SRV_RUNTIME~OPERATION_START. Ingrese la
siguiente línea de código mv_is_softstate = abap_true.
method /IWBEP/IF_MGW_SOST_SRV_RUNTIME~OPERATION_START.
mv_is_softstate = abap_true.
endmethod.

4. Ahora haga clic en la pestaña Métodos y redefina el método


/IWBEP/IF_MGW_SOST_SRV_RUNTIME~OPERATION_END sin introducir
ningún código. Tenga en cuenta: Sin activar ambos métodos obtendrías una
excepción.

5. Ahora defina un segundo atributo (estático) GV_COUNT de tipo I para demostrar


el uso del estado suave. Haga clic en la pestaña Atributos e inserte un nuevo
atributo con la siguiente configuración:
Attribute: GV_COUNT
Level: Static Attribute
Visibility: Protected
Typing: Type
Associated Type: I
Description: Store counter

6. Activa tus cambios.

7. Navegue de nuevo a Service Builder y expanda la carpeta Service Maintenance.


Expanda la carpeta Mantener. Haga clic derecho en la entrada de su sistema
Gateway Hub para iniciar la transacción /IWFND/MAINT_SERVICE con filtrado
para el nombre de su servicio.

8. Confirme la advertencia de ser redirigido al sistema Hub.

9. Notará que el servicio ZGW_PRODUCT_SRV se muestra como no compatible


con Soft-State. Si hace clic en el botón de estado suave (1) recibirá un mensaje
de error.

10. Confirme el mensaje de error.

11. Haga clic en Cargar metadatos y confirme el mensaje de éxito.


12. El servicio ahora se muestra de manera tal que admite el estado suave pero el
estado suave aún no está activado.

Insinuación:
Si el servicio no se muestra como inactivo, intente borrar el caché de metadatos
en Gateway Hub y en el sistema back-end de Gateway. Para hacerlo
1. Inicie la transacción /IWBEP/CACHE_CLEANUP en el backend y active la
casilla de verificación Limpiar caché para todos los modelos.
2. Inicie la transacción /IWFND/CACHE_CLEANUP en el concentrador y
ejecútelo con la casilla de verificación Limpiar caché para todos los modelos

13. Cambiar el tiempo de espera de la sesión

14. En la parte inferior izquierda de la pantalla, haga clic en Nodo ICF -> Configurar
(SICF)

15. Haga doble clic en la entrada de su servicio en el árbol SICF.

16. En el menú, seleccione Servicio -> Cambiar (1) e ingrese un Tiempo de espera
de sesión mayor que cero, por ejemplo, 10 segundos. Guarde sus cambios (2) y
vuelva al Servicio Pantalla de mantenimiento

17. Dado que el servicio ahora debería aparecer con Softstate-Status Inactive, ahora
puede activar el estado de softstate presionando el botón de estado de softstate.

18. Confirme la advertencia antes de activar el estado suave para su servicio y


confirme la información de que SoftState ahora se ha activado.

19. Uso de softstate en la clase de extensión del proveedor de datos

20. Abra ZCL_ZGW_PRODUCT_DPC_EXT en SE24

21. Cambie la implementación del método PRODUCTSET_GET_ENTITYSET para


habilitar un contador personalizado cuando se llama a $ count para el conjunto
de entidades ProductSet con la codificación que se muestra a la derecha.

La codificación primero verifica si se solicitó / $ count y se implementó una


implementación personalizada para recuperar $ count.

Si el estado suave no está habilitado, el número de productos se recuperará


contando las entradas de la tabla en SNWD_PD.

Si el estado suave está habilitado, el código verifica si la variable miembro


GV_COUNT es inicial.

Si es inicial, significa que si la cuenta / $ se llama por primera vez en esta sesión,
tenemos que recuperar el número de entradas de la base de datos.

Solo si se llama a / $ count por segunda vez cuando se habilita el estado suave,
no se leerán datos de la base de datos y / $ count se llenará con el valor
almacenado en la variable GV_COUNT, que luego se incrementa en 1 para
mostrarle que Estado realmente está trabajando.
Si se excede el tiempo configurado como un tiempo de espera de sesión, el
conteo comienza nuevamente a partir del número de productos que es igual al
número de entradas de la tabla en la tabla SNWD_PD.

method PRODUCTSET_GET_ENTITYSET.

DATA lv_count_requested TYPE abap_bool.


lv_count_requested = io_tech_request_context->has_count( ).
IF lv_count_requested EQ abap_true.
IF mv_is_softstate = abap_false.
SELECT COUNT( * ) INTO gv_count FROMSNWD_PD.
ELSE.
if gv_count is INITIAL.
SELECT COUNT( * ) INTO gv_count FROMSNWD_PD.
ELSE.
gv_count = gv_count + 1.
ENDIF.
ENDIF.
es_response_context–count = gv_count.
ELSE.

CALL FUNCTION ‘BAPI_EPM_PRODUCT_GET_LIST’


* EXPORTING
* MAX_ROWS =
TABLES
HEADERDATA = et_entityset
* SELPARAMPRODUCTID =
* SELPARAMSUPPLIERNAMES =
* SELPARAMCATEGORIES =
* RETURN =
.
ENDIF.

ENDMETHOD.
22. Activa tus cambios.

Prueba el servicio en el navegador.

Llame a su servicio a través del navegador.


http://<server>:<port>/sap/opu/odata/sap/ZGW_PRODUCT_SRV/ProductSet/$count

Cuando actualice la URL, notará que el contador comenzará a contar el número de


llamadas.

Espera 20 segundos ...

Cuando espera un período más largo que el configurado como tiempo de espera de
sesión en SICF, el contador comienza de nuevo con 1.

Tenga en cuenta:
Si ha configurado una pequeña ventana de tiempo (por ejemplo, 10 segundos)
probablemente tendrá que esperar más tiempo ya que hay una latencia adicional. Si es
demasiado impaciente y hace clic en actualizar para acelerar, el tiempo de espera
comienza nuevamente desde cero.
Comparación de tiempos de respuesta.

El comportamiento cuando se usa el estado suave o no se puede verificar bien usando


la traza de rendimiento. Esto se puede iniciar utilizando la transacción / IWFND /
TRACES.

Inicie un seguimiento del rendimiento utilizando / IWFND / TRACES.

Realice varias solicitudes con $ count teniendo habilitado el estado suave

Podemos ver que la solicitud inicial toma 16 milisegundos en el backend (sobrecarga


del marco de GW + tiempo de respuesta del proveedor de datos de la aplicación).

Para cada solicitud posterior, el tiempo de respuesta del proveedor de datos de la


aplicación es cero y la sobrecarga del marco de trabajo de GW se reduce a 5 mil
segundos.

Desactive el estado suave y vuelva a realizar varias solicitudes con $count


El resultado ahora es que las solicitudes posteriores tienen el mismo tiempo de
respuesta.

El tiempo de respuesta es el mismo que obtuvimos para la primera solicitud inicial


cuando se habilitó el estado suave.

Anda mungkin juga menyukai