Servicios EGL y servicios Web

Un servicio es un conjunto de operaciones que pueden ser invocadas por un cliente, que es un componente de aplicación que reside en la misma o en otra plataforma. Un servicio desarrollado en EGL puede desplegarse de una de las formas siguientes, o ambas:
Durante el desarrollo, el servicio es un componente que incluye código de implementación. A continuación se ofrece un ejemplo sencillo:
  Service echoString
    function returnString 
      (inputString string in) 
      returns (string)

      return (inputString);
    end
  end
El componente de servicio es similar a un componente de biblioteca:
Las bibliotecas y los servicios difieren en los siguientes aspectos:

En lugar de utilizar un componente de servicio directamente en el código, se crea una variable que se basa en dicho componente. El componente de servicio incluye la lógica del servicio de tiempo de ejecución, pero no los detalles necesarios para el acceso. Sin embargo,. durante la ejecución la variable se enlaza (hace referencia) a un servicio que se ejecuta en una ubicación determinada. El enlace incluye detalles relativos al protocolo utilizado para acceder al servicio.

La información de enlace se especifica en una variable declarada en una biblioteca de enlace de servicio, que es un tipo de biblioteca EGL. La variable es global con respecto a la unidad de ejecución, como sucede con cualquier variable a la que se accede directamente desde una biblioteca EGL. En la mayoría de los casos, el enlace inicial de esa variable suministra todas las funciones específicas del servicio necesarias para cualquier cliente en la unidad de ejecución.

El valor de la propiedad de biblioteca runtimeBind determina si el enlace inicial de una variable con un servicio se basa en una decisión tomada durante el desarrollo o durante el despliegue:
Para usos avanzados, EGL ofrece estas posibilidades:

Para suministrar acceso a un servicio Web no EGL, debe utilizar una interfaz EGL. Una interfaz también proporciona una segunda forma de acceder a un servicio desarrollado en EGL. Para obtener una introducción a este tema, consulte la sección Interfaces EGL.

Procesos de tiempo de ejecución

Los clientes EGL acceden a un servicio por medio de un proxy generado que contiene descripciones de función equivalentes a las del servicio. Son posibles las siguientes configuraciones:
  • Un cliente EGL accede a un servicio EGL por conexión directa, en cuyo caso el cliente y el servicio se encuentran en la misma unidad de ejecución.
  • Un cliente EGL accede a un servicio EGL por medio de TCP/IP, en cuyo caso el entorno de ejecución de EGL se utiliza tanto en el lado del cliente como en el del servicio de la interacción.
  • Un cliente EGL accede a un servicio Web, en cuyo caso se utiliza una descripción WSDL (Web Service Description Language) en ambos lados de la transmisión:
    1. El proxy generado invoca un apéndice JAX-RPC Java que se ha creado cuando EGL ha generado la biblioteca de enlace de servicio.
    2. El apéndice utiliza la información de la definición WSDL para enviar al servicio un mensaje SOAP (Simple Oject Access Protocol) basado en XML. Dicho mensaje incluye una correlación válida entre un tipo de datos generado por EGL y el tipo de datos sometidos al servicio o recibidos desde él.
      Nota: En la mayoría de los casos, las transformaciones por omisión son suficientes, pero puede alterar temporalmente un valor por omisión estableciendo la propiedad @xsd para un campo determinado, como se describe en la sección dedicada a @xsd.
    3. El apéndice recibe el mensaje SOAP devuelto, que consiste en datos de gestión del servicio Web o en una excepción de tipo ServiceInvocationException. Para conocer detalles sobre esta última, consulte la sección Excepciones del sistema EGL.
    4. El apéndice utiliza la información de la definición WSDL, en este caso para convertir los tipos de datos SOAP a los tipos de datos Java esperados por el proxy.
    5. El apéndice devuelve los datos y el control al proxy.
    6. El proxy devuelve el control al cliente.
Cuando un servicio Web generado por EGL se está utilizando, se producen los siguientes eventos en el lado del servicio de la transmisión:
  • En respuesta a su invocación, el código de tiempo de ejecución de los servicios Web utiliza la definición WSDL del lado del servicio para crear datos que el servicio pueda utilizar.
    Nota: EGL genera una definición WSDL con el servicio Web y utiliza (en la mayoría de los casos) una transformación por omisión de campos generados por EGL a elementos WSDL. Puede alterar temporalmente un valor por omisión estableciendo la propiedad @xsd para un campo determinado, como se describe en la sección dedicada a @xsd. En este caso, la finalidad de definir la propiedad es establecer un conjunto de normas de validación que limiten el tipo de datos que se suministrarán al servicio durante la ejecución.
  • El código de tiempo de ejecución del servicio Web somete los datos al servicio Web y actúa del siguiente modo cuando el servicio Web devuelve datos:
    1. Utiliza la definición WSDL del lado del servicio para crear un mensaje SOAP basado en XML
    2. Devuelve dicho mensaje al cliente

Enlaces de servicio durante la ejecución

Considere el caso de dos servicios que suministran operaciones idénticas pero se encuentran en servidores diferentes. Puede organizar que el cliente seleccione uno u otro servicio en respuesta a un condición de tiempo de ejecución como, por ejemplo, un valor obtenido de una base de datos. Puede obtener esta flexibilidad de las siguientes maneras:
  • Utilizando una función ServiceLib que establezca ubicaciones, como se indica en ServiceLib; o bien
  • Utilizando varias variables, siguiendo estos pasos:
    1. Cree variables en una biblioteca de enlaces de servicio, que estén basadas en el mismo componente de servicio y que estén enlazadas a ubicaciones diferentes del entorno de ejecución.
    2. Declare una variable de cliente basada también en el componente de servicio.
    3. Asigne a la variable de cliente una u otra de las variables globales, dependiendo de las condiciones del tiempo de ejecución. Puede colocar la sentencia de asignación en la cláusula OnException de un bloque try, a fin de que la cláusula se invoque en respuesta a una invocación de servicio fallida; específicamente, en respuesta a una excepción de tipo ServiceInvocationException.
    4. Utilice la variable de cliente para acceder al servicio.

    Para conocer detalles sobre ServiceInvocationException, consulte la sección Excepciones del sistema EGL.

El uso de varias variables se basa en las siguientes normas:
  • La variable del lado izquierdo de la sentencia de asignación recibe un enlace en los siguientes casos:
    • Sólo hay una variable en el lado derecho. Esa variable representa un servicio o interfaz que se ha declarado en una biblioteca de enlaces de servicio o que ha recibido un enlace en una sentencia anterior.
    • Sólo hay una función en el lado derecho. Esa función devuelve una interfaz o servicio enlazados.
  • Un parámetro de función recibe un enlace si el argumento relacionado tiene un enlace.

Opciones del descriptor de construcción

Al generar un servicio EGL, la opción serviceRuntime del descriptor de construcción se encuentra entre las utilizadas, pero el valor por omisión es suficiente.

Al generar un servicio Web, entre las utilizadas se encuentran las siguientes opciones del descriptor de construcción:
  • J2EELevel
  • serverType
  • serviceRuntime
  • WebServiceEncodingStyle
Al generar una biblioteca de enlaces de servicio que haga referencia a un servicio Web o a una interfaz enlazada a un servicio Web, entre las utilizadas se encuentran las siguientes opciones del descriptor de construcción:
  • J2EELevel
  • serverType
  • serviceRuntime

Despliegue

El despliegue de un servicio EGL es equivalente al despliegue de una aplicación Java no J2EE. Encontrará los detalles en la sección Desplegar aplicaciones Java fuera de J2EE.

El despliegue de un servicio Web es equivalente al despliegue de una aplicación Web. Para obtener detalles, consulte la sección Configurar el entorno de ejecución J2EE para código generado por EGL.

Comentarios
(C) Copyright IBM Corporation 2000, 2005. Reservados todos los derechos.