Comprender las especificaciones de servicios web, Parte 7: WS-Business Process Execution Language

Usted tiene un sistema de servicios sólido, pero lo que en verdad quiere es una aplicación que haga uso de ellos para implementar sus procesos de negocios. Este tutorial, el último de una serie de siete partes, explica cómo crear un flujo de proceso para sus servicios utilizando WS-BPEL.

Hernan Silberman, Freelance Writer, Freelance Developer

Hernan Silberman es ingeniero de software, vive en San Francisco y trabaja para un importante estudio de animación ubicado en Silicon Valley. Se especializa en la construcción de aplicaciones distribuidas.



Manas Mandal, Architect, Consultant

Manas Mandal es arquitecto de una empresa de desarrollo de productos con sede en India. Se especializa en desarrollo basado en Java, J2EE, servicios web y BPEL. Tiene más de 10 años de experiencia en servicios de software y desarrollo de productos.



08-08-2011

Antes de comenzar

Este tutorial es para desarrolladores que construyen aplicaciones que utilizan servicios web. Como los servicios web se hacen cada vez más populares, frecuentemente los desarrolladores deben crear programas que coordinen los esfuerzos de múltiples servicios web para manejar un proceso de negocios. Este artículo se concentra en WS-BPEL, el cual es un estándar importante que brinda una solución sólida a este problema y se ha convertido en una elección popular entre los desarrolladores.

A fin de comprender este tutorial, debe tener un conocimiento básico del Protocolo simple de acceso a objetos (SOAP) y las tecnologías relacionadas, como por ejemplo WSDL. Lea los primeros cinco tutoriales de la serie, especialmente la Parte1 y la Parte 2, para obtener una mejor comprensión.

Acerca de esta serie

Esta serie tutorial enseña los conceptos básicos de los servicios web siguiendo las hazañas del periódico ficticio, Daily Moon, mientras el personal utiliza servicios web para crear un sistema de flujo de trabajo para incrementar la productividad en este entorno competitivo.

La Parte 1 empieza simplemente, explicando los conceptos básicos de los servicios web y mostrándole cómo utilizar SOAP, la especificación que subyace en la mayoría de lo que vendrá, y conecta el departamento de clasificados con el Sistema de Gestión de Contenido.

La Parte 2 lleva las cosas un poco más allá, al explicar cómo utilizar Web Services Description Language (WSDL) para definir los mensajes producidos como se espera por el servicio web, lo que le permite al equipo crear servicios y a los clientes que se conectan a ellos con más facilidad.

La Parte 3 encuentra al equipo con una cantidad de servicios implementados y un deseo de ubicarlos con facilidad. En respuesta, Universal Description, Discovery and Integration (UDDI) brinda un registro que permite realizar búsquedas de servicios disponibles a una manera de publicitar sus propios servicios a otros.

En laParte 4,Rudy, editor de Daily Moon, decide que el periódico necesita implementar mejores procedimientos de seguridad para servicios web que acceden a sus sistemas internos.

La Parte 5 muestra los cambios que deben hacer los equipos para acceder a esos servicios recientemente protegidos.

La Parte 6 trata sobre el armado y la verificación de servicios web interoperativos. A los miembros del personal del periódico ya conocen la importancia de alcanzar la mayor cantidad de público posible, entonces deciden a analizar sus servicios web para asegurarse de que a cualquiera que desee utilizarlos le resulte fácil hacerlo.

Esta Parte 7 introduce el Lenguaje de ejecución de procesos de negocios para servicios web (WS-BPEL) y muestra cómo utilizarlo para crear aplicaciones complejas coordinando los esfuerzos de los servicios individuales.

Acerca de este tutorial

En esta Parte 7 de la serie tutorial de servicios web, encontramos al personal del Daily Moon avocado a armar una aplicación que automatice el proceso de recepción de avisos clasificados de parte de los clientes. El Daily Moon Tiene una relación comercial con un banco, y al personal le gustaría tener una aplicación que reciba un aviso clasificado y automáticamente deposite el pago en el banco. Por suerte, el banco con el que trabaja el personal tiene un servicio web que se puede utilizar para hacer dicho depósito. El personal investiga este problema y decide intentar utilizar WS-BPEL para unir su servicio web de avisos clasificados con el servicio web del banco. Con estos dos servicios, el personal puede darle forma al modelo del proceso de negocios que tiene en mente y armar una aplicación para manejarlo.

Este tutorial le enseña a armar aplicaciones complejas que coordinan los esfuerzos de servicio web existentes. Podrá componer servicios web de esta manera, puede armar rápidamente aplicaciones de tremenda utilidad. Los servicios web están diseñados para ser fáciles de encontrar y utilizar, es natural querer enlazar servicios web para armar nuevas aplicaciones potentes.

Requisitos previos

El código utilizado en este tutorial no es específico para ningún lenguaje o entorno de programación. Los ejemplos brindados son los mismos utilizados durante toda esta serie tutorial. Para seguir los ejemplos debe tener el siguiente software instalado:

Java 2 Standard Edition versión 1.4.2 o superior— Todas estas herramientas están basadas en Java, al igual que los servicios y clientes que armará en este tutorial.

Apache Axis2 versión 1.0— Axis2 es un kit de herramientas SOAP de funciones completas que brindan implementaciones de varias API de servicio web que incluyen SOAP y WSDL. Un kit de herramientas como Axis2 es invaluable cuando se trata del desarrollo de servicios web. Existen kits de herramientas de alcance similar para otros lenguajes y entornos de programación. El proyecto Axis en Apache tiene una larga historia y se originó con un esfuerzo de IBM llamado SOAP4J.

Apache Geronimo u otro servidor de aplicación — Esta serie tutorial utiliza el servidor Apache Geronimo J2EE (que es la base del servidor IBM WebSphere® Community Edition). Puede utilizar otros servidores de aplicación, pero Geronimo es simple, liviano y gratuito, así que es una buena elección para instalar y ejecutar rápidamente.

BPWS4J versión 2.1— IBM brinda un tiempo de ejecución BPEL, lo que le permite ejecutar procesos que se redactan utilizando WS-BPEL. BPWS4J está disponible por un período de prueba de 90 días.


Generalidades

Este tutorial comienza con un panorama general de los procesos de negocios y la evolución de la tecnología que se ha convertido en un factor importante en su ejecución.

Comprender el negocio de la informática en la actualidad

La mayoría de las aplicaciones comerciales existen para automatizar o simplificar procesos que en el pasado se realizaban utilizando tinta, papel y personas. En el pasado los contadores que realizaban los cálculos a mano, registraban los resultados en un libro utilizando lapicera y papel, y hacían constantes viajes al banco. Los corredores realizaban una cantidad de tareas tediosas similares todos los días, al igual que los bancarios, los actuarios, los arquitectos y los ingenieros. Las computadoras siguen teniendo un impacto tremendo en los negocios. La maduración y la adopción de los servicios web por parte de muchas empresas es la culminación de décadas de avance tecnológico. Muchas organizaciones fundamentalmente importantes, como los bancos, les brindan a sus socios servicios web que pueden utilizar para combinar sus negocios de manera más cercana y efectiva que antes.

Los beneficios de esta cooperación cercana entre las organizaciones son evidentes cada vez que uno compra por Internet. Es claro que el futuro de la informática comercial se encuentra en la colectividad. Los negocios que se hacen disponibles a sus socios tienen mayores probabilidades de tener éxito como componentes importantes en los procesos de negocios de sus socios. Esta noción no es nueva en los negocios, pero la evolución de las capacidades de software la ha posibilitado a una medida imaginable sólo recientemente, y con la inmediatez que hace que el pasado parezca realmente tedioso.

Abordar la tecnología disruptiva

Es difícil seguir el ritmo de los avances en informática. El mundo del software parece cambiar diariamente. Los desarrolladores de software deben saber bastante para redactar servicios web modernos, en su mayoría debido a que las tecnologías subyacentes cambian tan rápidamente. Internet es la tecnología disruptiva más reciente que desafía todo tipo de negocios.

El ritmo rápido al cual avanza a la tecnología ayuda a destacar el sentido común de los servicios web modernos, que se definen utilizando XML del lenguaje neutral y se concentran en los mensajes sin suponer o indicar mucho más. Este enfoque aísla a las aplicaciones del cambio constante de Internet que los desarrolladores de software han aprendido a esperar.

Los desarrolladores de servicios web pueden esconder las implementaciones detrás de descripciones de servicios web y modificarlas según sea necesario. Los consumidores de servicios web dependen de las descripciones de servicios web para aislarlas de cambios en las implementaciones de servicios. En la mayoría de los casos, usted no tuene idea (ni necesita saber) cómo se construye un servicio web que utiliza.

A medida que los servicios web se hacen cada vez más comunes, finalmente se encontrará armando servicios y utilizando servicios en la misma aplicación. Una tienda online es un ejemplo genial de este escenario ahora común. Si está armando un servicio web como el servicio de clasificados del Daily Moon, recibe información de un individuo que espera comprar un aviso clasificado. Con esta solicitud del aviso llega la información de pago, que usted transmite al servicio web de su banco para que se procese. Es común en la actualidad armar servicios al componer otros servicios útiles.

Sería genial tener alguna manera de describir aplicaciones que utilicen servicios web existentes para manejar procesos de negocios importantes. Sería incluso mejor si este método de describir servicios fuera de lenguaje neutral y extendiera a estas aplicaciones los mismos beneficios que brindan los servicios web a sus consumidores e implementadores.

Este tutorial presenta el Lenguaje de ejecución de procesos de negocios para servicios web (WS-BPEL), que brinda dicha facilidad de lenguaje neutral para armar servicios web nuevos al componer servicios web existentes.

La historia hasta ahora

Esta serie sigue al personal del periódico ficticio Daily Moon mientras pasa muchas de sus operaciones diarias a un sistema basado en servicios web. En la Parte 1, el Departamento de Clasificados aprendió sobre SOAP interactuando con el Sistema de Gestión de Contenidos, y en la Parte 2, crearon su propio servicio, y lo definieron utilizando Web Services Description Language (WSDL). Luego en la Parte 3, aprendieron cómo interactuar con un registro UDDI, y también cómo encontrar información dentro de uno, lo que en última instancia los condujo a crear uno para la empresa a fin de permitir a otras organizaciones interactuar con Daily Moon. Debido a que Rudy insistió en que sus colegas Gene y Francis brindarán una manera de prevenir el acceso no autorizado a sus sistemas en la Parte 4, Gene y Francis tuvieron que implementar WS-Security para sus servicios web. En la Parte 5, Rudy se dio cuenta de que debía definir las políticas de los servicios web para hacer cumplir que los clientes que accedieran a los servicios web de Daily Moon lo hicieran de la manera indicada, garantizando la seguridad que se construyó en la Parte 4 de esta serie. En la Parte 6, Phil se asegura de que el documento WSDL y el servicio web de clasificados que describe sean interoperativos con otros servicios web.

Ahora, siguiendo la historia del personal de Daily Moon, este tutorial describe el intento del personal de armar un servicio web que automatice por completo el proceso de compara un aviso clasificado para su inclusión en el periódico. El tutorial le presenta WS-BPEL y el importante concepto del modelado de procesos de negocios.


Generalidades de interoperabilidad

Antes de entrar en los detalles de WS-BPEL, este artículo lo guía para que piense en términos de procesos de negocios. Luego este artículo introduce WS-BPEL y trata del su enfoque de componer servicios web para armar aplicaciones nuevas. Verá como WS-BPEL lo hace utilizando los estándares de servicios web sobre los que ha aprendido durante el transcurso de esta serie tutorial utilizando un ejemplo del periódico ficticio Daily Moon.

Comprender el objetivo

Cada vez que trabaja está ejecutando un proceso. Ya sea que esté ordenando su colección de DVD, plantando un árbol nuevo o enviando un paquete, puede describir el proceso que atraviesa identificando los actores, sus acciones y los artefactos que utiliza en el proceso.

En el mundo de los negocios, comprender un proceso es importante por muchas razones. La primera y más obvia es que comprender el proceso de negocios conduce a comprensiones que pueden mejorar estos procesos, y potencialmente ahorrar tiempo y dinero. Los analistas comerciales están constantemente analizando procesos de negocio, buscando eficiencias nuevas y ahorro de costos. Otra razón importante para comprender los procesos de negocios es que estos procesos a menudo son activos intelectuales importantes. Muchas compañías tienen éxito debido a su know-how superior en vez de sus activos físicos o productos. Es importante que estas organizaciones cataloguen sus procesos para que puedan entenderlos, mejorarlos y protegerlos.

Vale la pena aprender un poco más sobre los procesos de negocios y cómo se modelan, como se muestra en las siguientes secciones.

Comprender la historia

Pensar en términos de procesos de negocios no es una idea nueva. Los negocios siempre han tenido que tratar con la logística y pensar en cómo hacen las cosas que hacen para perdurar y ser más eficientes. Los negocios de hoy concentran gran parte de su atención en cómo describir los procesos que utilizan, cómo diseñan nuevos procesos de negocio, cómo ejecutan cada proceso y cómo recopilan información sobre procesos de negocios para revisarlos luego.

El software ha tenido un impacto enorme en la perspectiva de los negocios impulsada por el proceso. La mayoría del software comercial existe para automatizar procesos que se realizaban manualmente. El software ha avanzado desde las primeras hojas de cálculo y procesadores de texto a complejo software de gestión de relaciones con el cliente y arquitecturas orientadas al servicio. A medida que ha avanzado la tecnología del software, más y más procesos de negocios han quedado elegibles para la automatización completa.

A medida que los servicios web se han adoptado más ampliamente, ha sido posible pensar en automatizar servicios de negocios que cubren múltiples servicios web. Por ejemplo, una compañía podría tener un sistema de procesamiento de pedidos automatizado, un sistema de facturación, y un sistema de ejecución, los cuales todos brindan interfaces de servicios web. Con esos servicios web implementados, se puede construir una aplicación para automatizar las interacciones entre ellos; por ejemplo, para aceptar y ejecutar un pedido de un cliente. Los servicios web han sido una tecnología importante para integrar aplicaciones empresariales de esta manera.

Este mismo enfoque se puede utilizar para armar aplicaciones que dependan de aplicaciones que posean y operan distintas organizaciones. En la actualidad, los servicios web brindan una plataforma genial para la última generación de aplicaciones de procesos de negocios en múltiples empresas.

Explorar la gestión de procesos de negocios

En la actualidad, la gestión de procesos de negocios es la disciplina para diseñar, implantar y monitorear procesos de negocios utilizando diversas tecnologías estándar. No es novedad que la gestión de procesos de negocios actual esté muy relacionada con los servicios web y la familia de tecnologías abordadas en esta serie tutorial.

Uno de los mayores avances en el área de la gestión de procesos de negocios fue la invención de maneras estándar de describir procesos de negocios. Inicialmente, si una organización armaba software para ejecutar procesos de negocio, lo hacía utilizando Java u otro lenguaje de programación. Ahora hay técnicas estándar para describir procesos de negocios. También hay entornos de tiempo de ejecución que ejecutan procesos de negocios desde estas descripciones estandarizadas.

Las siguientes secciones describen las actividades principales involucradas en la gestión de procesos de negocios y algunas de las herramientas que harán que el enfoque de describir y ejecutar lógica comercial importante valga la pena.

Descubrir y diseñar procesos

Como profesional de software, seguramente ha estado en alguna reunión donde un experto hizo su mejor esfuerzo para describir la manera en que debería funcionar una aplicación. Generalmente, dibuja diagramas en un pizarrón que identifican todos los actores, las acciones y los artefactos importantes involucrados en un proceso de negocios. Estos gráficos se refinan a medida que los desarrolladores hacen preguntas y se describen los escenarios imaginados.

El diseño del proceso de negocios es un proceso iterativo, así que es importante tener alguna manera de anotar un proceso y almacenarlo para que se pueda volver a invocar más tarde para refinarlo. Los requisitos de negocios cambian con el tiempo, así que es importante tener un repositorio de procesos de negocios y herramientas estándar para visualizarlos y modificarlos. Estas herramientas existen. WS-BPEL es una herramienta importante para codificar procesos de negocios para poder visualizarlos, actualizarlos y ejecutarlos.

Ejecutando el proceso

Una vez que se definen los procesos de negocio, es posible armar sistemas de software que los ejecuten. Los procesos de negocios redactados en WS-BPEL se convierten en scripts que se alimentan en una aplicación de gestión de proceso de negocios y se ejecutan. Son ventajas enormes para este enfoque, la mayor de las cuales es la simpleza con la cual puede crear y actualizar procesos de negocios. Puede ver que WS-BPEL es un lenguaje de scripting para armar aplicaciones desde servicios web existentes. Las mismas descripciones de servicio son scripts ejecutables que describen un flujo de proceso que puede ejecutar un entorno de tiempo de ejecución WS-BPEL.

Monitoreo

Una vez que los procesos de negocios se codifican en scripts utilizando lenguaje estándar y se ejecutan en una aplicación de gestión de proceso de negocio, son increíblemente fáciles de monitorear. Este monitoreo puede brindar una gran cantidad de información sobre cada instancia de proceso de negocios que ejecutó la aplicación. Por ejemplo, puede preguntar a la aplicación de gestión de proceso sobre el estado de los procesos actuales sobre los que está trabajando y los procesos que ha completado. Puede utilizar la información que recopila la aplicación de proceso de negocios para responder fácilmente muchas preguntas del negocio que podrían resultarle difíciles de encontrar de otra manera.


Introducción a WS-BPEL

Hace tiempo que la idea de un lenguaje formal y estándar para describir procesos de negocios es atractiva. Hasta hace poco, había muchos estándares que competían entre sí y apuntaban a hacer solo esto, que incluían el Web Services Flow Language (WSFL) de IBM, XLANG de Microsoft y muchos otros. Finalmente se creó WS-BPEL, que combinó los mejores puntos de WSFL y XLANG. Surgió como el estándar más popular de esta categoría.

Generalidades

WS-BPEL depende de varias tecnologías estándar que probablemente usted ya conoce, que incluyen:

  • WSDL
  • XML schema
  • Xpath
  • Web Services Addressing

WSDL es el más importante de estos estándares porque WS-BPEL describe los procesos de negocios como conversaciones entre los servicios web como se describen en WSDL. Además, los procesos WS-BPEL son servicios web que describe WSDL.

Aprender el lenguaje

WS-BPEL es un lenguaje de programación XML. En WS-BPEL, un proceso de negocios se describe en un documento XML que es el entorno de ejecución que ejecuta el proceso de negocios. Un proceso en WS-BPEL se divide en una serie de pasos llamado actividades. La lista de actividades soportada se indica a continuación.

  • invoke -- Invoca una operación en un servicio web existente
  • receive -- Espera un mensaje de una entidad externa
  • reply -- Genera un mensaje para responder a una entidad externa
  • wait-- Espera un período de tiempo especificado
  • assign -- Copia un valor de una fuente a un destino
  • throw -- Genera un error
  • terminate -- Elimina incondicionalmente el proceso actual
  • empty -- Ofrece un marcador de posición, que es un no-op

Las actividades básicas se pueden combinar para describir algoritmos de procesos de negocios utilizando un conjunto adicional de palabras clave del lenguaje. Estas palabras clave brindan el carácter estructural del lenguaje WS-BPEL y se enumeran a continuación.

  • sequence -- Define una secuencia de acciones ordenada
  • switch -- Ofrece una instrucción de selección que funciona como case en Java y C++
  • while -- Define un bucle while
  • pick -- Ofrece una instrucción de selección que funciona como if
  • flow -- Incluye una selección de pasos que se debe ejecutar en paralelo

Con este pequeño conjunto de palabras clave, puede imaginar cómo se expresan los procesos de negocios en WS-BPEL. Puede ver que esta sintaxis concisa es bastante potente y fácil de utilizar.


El modelo de composición de procesos

Como ya se mencionó, a menudo los procesos de negocios pueden ser descritos por los actores, las acciones y los artefactos que involucran. Un servicio web puede ser un actor en un proceso de negocios. a menudo, múltiples servicios web actúan juntos para cumplir un proceso de negocios individual.

Definir procesos como servicio

Cuando define un proceso de negocios utilizando WS-BPEL y lo ingresa en un entorno de tiempo de ejecución WS-BPEL, su proceso de negocios se expone como servicio web completo con su propio documento WSDL y la implementación lista para ser ejecutada basada en su proyecto. Su definición de proceso probablemente prescribe una o más conversaciones con otros servicios web y, efectivamente, WS-BPEL le permite crear un nuevo servicio web componiendo diversos servicios asociados que tenía a su disposición. Este es un enfoque potente para armar aplicaciones, especialmente cuando considera que el servicio web WS-BPEL resultante podría utilizarse como componente por otro proceso de negocios.

Comenzar con inglés básico

Como ejemplo, vea el Daily Moon. Recuerde que el periódico intenta armar un servicio completamente automatizado para manejar la creación de avisos clasificados de sus lectores. El personal del Daily Moon ya ha armado su propio servicio web para crear avisos clasificados. Ahora los miembros el personal tienen el WSDL de su banco que describe el servicio web que pueden utilizar para depositar pagos para cada aviso clasificado que crean sus usuarios. Comienzan describiendo sus procesos en inglés básico.

  • Una aplicación de usuario final llama al Daily Moon con información sobre crear un aviso clasificado y sobre su pago.
  • La información de pago proporcionada se envía al banco para que se procese.

    • Si el banco aprueba el pago, se llama al servicio de aviso clasificado para procesar el aviso clasificado solicitado. Una vez que se ha creado el aviso clasificado, se envía un mensaje de éxito al llamador.
    • Si el banco niega el pago, no hay procesamiento adicional. Se envía un mensaje al llamador informándolo de que el pago ha fallado.

Utilizar WSDL

Comience armando un WSDL que describa el punto final que expondrá finalmente y al que llamarán los usuarios finales para invocar su proceso de negocios. Para crear este WSDL, comience definiendo los distintos tipos de mensajes que utilizará para el proceso de clasificados de Daily Moon. Para el ejemplo, defina:

  1. Un mensaje a utilizar para comunicarse con el servicio de clasificados (classifiedMessage)
  2. Un mensaje a utilizar para comunicarse con el servicio del banco (bankMessage)
  3. Un mensaje para que el usuario inicie el proceso de negocios (classifiedInfoMessage)
  4. Un mensaje para utilizar en caso de que se encuentre un error durante el procesamiento de su proceso de negocios.

El Listado 1 muestra la definición WSDL que incluye estos mensajes.

Listado 1. WSDL con definiciones de mensaje para el proceso de negocios de DailyMoon
<definitions 
targetNamespace="http://tempuri.org/services/classifieddefinitions"
             xmlns:tns="http://tempuri.org/services/classifieddefinitions"
             xmlns:xsd="http://www.w3.org/2001/XMLSchema"
             xmlns="http://schemas.xmlsoap.org/wsdl/">

<message name="classifiedMessage">
  <part name="classifiedName" type="xsd:string"/>
   <part name="amount" type="xsd:int"/>
</message>

<message name="bankMessage">

    <part name="userName" type="xsd:string"/>
    <part name="amount" type="xsd:int"/>
</message>

<message name="classifiedInfoMessage">
    <part name="classifiedName" type="xsd:string"/>
    <part name="userName" type="xsd:string"/>

    <part name="amount" type="xsd:int"/>
</message>

<message name="classifiedErrorMessage">
    <part name="errorCode" type="xsd:int"/>
</message>

</definitions>

A continuación, importe este conjunto de definiciones de mensaje WSDL a otro documento WSDL, junto a las definiciones para los servicios de clasificados y bancario. EL WSDL resultante se muestra en el Listado 2.

Listado 2. WSDL principal que importa las definiciones de mensaje para los servicios web de clasificados y bancario
<definitions 
      targetNamespace="http://tempuri.org/services/wsdl/classified-approval"
      xmlns="http://schemas.xmlsoap.org/wsdl/"
      xmlns:plnk="http://schemas.xmlsoap.org/ws/2003/05/partner-link/"      
      xmlns:xsd="http://www.w3.org/2001/XMLSchema"
      xmlns:lns="http://tempuri.org/services/wsdl/classified-approval"
      xmlns:asns="http://tempuri.org/services/classifiedservice"
      xmlns:apns="http://tempuri.org/services/bankservice"
      xmlns:loandef="http://tempuri.org/services/classifieddefinitions">

  <import namespace="http://tempuri.org/services/classifiedservice" 
location="http://localhost:8080/myservices/service/classifiedservice.wsdl"/>
  <import namespace="http://tempuri.org/services/bankservice" 
location="http://localhost:8080/myservices/service/bankservice.wsdl"/>
  <import namespace="http://tempuri.org/services/classifieddefinitions" 
location="http://localhost:8080/myservices/service/classifieddefinitions.wsdl"
/>
  
  <plnk:partnerLinkType name="bankLinkType">

    <plnk:role name="bank">
      <plnk:portType name="apns:bankPT"/>
    </plnk:role>
  </plnk:partnerLinkType>

  <plnk:partnerLinkType name="classifiedLinkType">
    <plnk:role name="classified">

      <plnk:portType name="asns:classifiedPT"/>
    </plnk:role>
  </plnk:partnerLinkType>

  <!-- The service name and the TNS represent my service ID QName -->
  <service name="bookClassifiedServiceBP"/>

</definitions>

En WS-BPEL, todo servicio web involucrado en un proceso se denomina servicio web socio. En el Listado 2 puede ver las definiciones WSDL para identificar a dos socios: banco y clasificados, y cómo enlazarlos a sus respectivos tipos de puerto como se define en sus documentos WSDL. Lo último en el Listado 2 es idear un nombre de servicio para nuestro proceso de negocios.

Definir el BPEL

Ahora que ha implementado el WSDL, pasemos a la definición BPEL. El proceso de negocios que está implementado describe la coordinación de dos servicios web existentes. No hay nada mucho más complicado que llamar a cada uno de los servicios involucrados en una orden particular y transmitir los mensajes que producen. Ahora, utilice su lenguaje de programación favorito para implementar este flujo de lógica. Tras llegar hasta aquí en esta serie tutorial, sabe lo fácil que sería redactar esto como programa Java.

WS-BPEL brinda una opción atractiva para implementar sus algoritmos de proceso de negocios. WS-BPEL desempeña el papel de un lenguaje de scripting para coordinar una serie de llamadas de servicio web. Con un poco de esfuerzo, puede redactar no solo el script de las llamadas de servicio web adecuadas, sino que puede exponer el script resultante como servicio web. Además, como lenguaje XML, WS-BPEL las definiciones de procesos son fáciles de modificar, mucho más concisas y más fáciles de seguir que el lenguaje de código de programación que necesitaría para hacer lo mismo.

Estructurar el documento

Una definición de proceso BPEL se define dentro de un elemento <process>. Comience agregando este elemento a su archivo, como se indica en el Listado 3.

Listado 3. El elemento principal de una descripción BPEL
<process name="bookClassifiedProcess">
<!-- Definition goes here -->
</process>

Hay tres secciones principales dentro del elemento de proceso.

Crear la primera sección de la definición BPEL

La primera sección enumera los socios que desempeñan un papel en el proceso de negocios. Por ejemplo, para DailyMoon son éstos:

  • El servicio web de avisos clasificados
  • El servicio web del banco
  • El usuario final que inicia el proceso de negocio

El Listado 4 muestra las declaraciones de socios relevantes para el proceso de negocios de Daily Moon. Se han omitido las definiciones de espacio de nombres a los fines de la legibilidad.

Listado 4. Descripción de proceso con enlaces a socios
<partnerLinks>
  <partnerLink name="customer" 
           partnerLinkType="lns:bankLinkType"
           myRole="bank"/>
  <partnerLink name="bank" 
           partnerLinkType="lns:bankLinkType"
           partnerRole="bank"/>
  <partnerLink name="classified" 
           partnerLinkType="lns:bookLinkType"
           partnerRole="classified"/>
</partnerLinks>

El primer socio corresponde al cliente que inicia este proceso de negocios. El segundo socio es el servicio web del banco. El tercer socio es el servicio web de clasificados.

Crear la segunda sección de la definición BPEL

La segunda sección importante de la definición BPEL crea algunos marcadores de posiciones para los mensajes que se generan y transmiten entre los socios durante la ejecución del proceso de negocios. Por ejemplo, para Daily Moon los mensajes son:

  • El mensaje original que inicia el proceso de negocio, que se denomina mensaje request.
  • El mensaje que se enviará al servicio del banco para que procese el pago, que se denomina bankMessage.
  • El mensaje con el que responde el servicio del banco, que se denomina bankapprovalInfo.
  • El mensaje a enviar (potencialmente) al servicio clasificado, que se denomina classifiedMessage.
  • El mensaje con el que responde el servicio de clasificados, que se denomina mensaje approvalInfo.
  • El mensaje de error si se encuentra un error durante la ejecución del proceso de negocio, que se denomina error.

El Listado 5 muestra las definiciones variables en la descripción BPEL. En cada caso, indique un nombre simbólico y un tipo de mensaje WSDL.

Listado 5. Definiciones variables para colocar a mensajes involucrados en el proceso de negocio
<variables>
  <variable name="request" 
messageType="classifieddef:classifiedInfoMessage"/>
  <variable name="classifiedMessage" 
messageType="classifieddef:classifiedMessage"/>
  <variable name="bankMessage" messageType="classifieddef:bankMessage"/>
  <variable name="approvalInfo" messageType="apns:approvalMessage"/>
  <variable name="bankapprovalInfo" messageType="asns:approvalMessage"/>

  <variable name="error" 
messageType="classifieddef:classifiedErrorMessage"/>
</variables>

Crear la tercera sección de la definición BPEL

La tercera sección importante en la definición BPEL describe el algoritmo de proceso de negocios. Este algoritmo se expresa utilizando las actividades y los componentes estructurales del lenguaje BPEL que ya se han presentado.

Traducir el algoritmo del proceso de negocios es simple. Realizará una secuencia de pasos en un orden específico, así que comience con un elemento de secuencia como se indica en el Listado 6. La mayoría De los procesos de negocios se modelan como secuencias.

Listado 6. Procesos de negocios modelados como secuencias de actividades
<sequence>
<!-- Do something interesting -->
 </sequence>

La primera actividad conforme a su algoritmo es aceptar o recibir una solicitud del cliente. Utilice un elemento <receive> para expresarlo, como se muestra en el Listado 7.

Listado 7. Secuencia que muestra la recepción de un mensaje de un cliente
<sequence>

  <receive name="receive1"
        partnerLink="customer" 
        portType="asns:bankPT" 
        operation="depositToBank"
        variable="request"
        createInstance="yes">
  </receive>

<!-- Do something interesting -->
 </sequence>

Las partes importantes de esta acción de recepción establecen de qué socio recibe y en qué variable almacenar el mensaje recibido. Fundamentalmente, esta instrucción dice “espera que depositToBank sea invocado en el tipo de puerto BankPT, y, cuando ocurra, almacenar el mensaje en la variable request”.

Lo siguiente que debe hacer es copiar información del mensaje de solicitud a algunos de los otros mensajes que utilizará. El Listado 8 muestra una serie de actividades de asignación que lo hacen.

Listado 8. Actividades de asignación que copian estado de un mensaje a otro
<assign name="assignclassified">
   <copy>
      <from variable="request" part="classifiedName"/>
      <to variable="classifiedMessage" part="classifiedName"/>
   </copy>   
   <copy>

      <from variable="request" part="amount"/>
      <to variable="classifiedMessage" part="amount"/>
   </copy>
</assign>

<assign name="assignbank">
   <copy>

      <from variable="request" part="userName"/>
      <to variable="bankMessage" part="userName"/>
   </copy>

   <copy>
      <from variable="request" part="amount"/>
      <to variable="bankMessage" part="amount"/>

   </copy>
</assign>

Las acciones de asignación anteriores preparan el classifiedMessage y bankMessage al copiar sobre el classifiedName, amount y userName de la solicitud inicial.

Ahora está listo para invocar el servicio web del banco para que procese el pago del cliente El Listado 9 muestra la definición de una actividad de invocación al servicio web del banco.

Listado 9. Una actividad de invocación que prescribe una llamada al servicio web del banco
<invoke name="invokeBank"
        partnerLink="bank" 
        portType="asns:bankPT" 
        operation="depositToBank"
        inputVariable="bankMessage"  
        outputVariable="bankapprovalInfo">
</invoke>

Esto es fácil de seguir. Simplemente envía bankMessage a bankPT e invoca la operación depositToBank, almacenando la respuesta en bankapprovalInfo.

El siguiente paso depende del resultado de la acción invokeBank anterior. Utilizamos un switch para manejar la lógica condicional y una función BPEL especial llamada getVariableData para verificar el estado del mensaje de aprobación del banco. El Listado 10 muestra la instrucción de switch que cubre los posibles resultados.

Listado 10. Una instrucción switch para manejar el éxito o el fallo de la operación bancaria
<switch>
  <case condition="bpws:getVariableData('bankapprovalInfo','accept')=1">
    <invoke name="invokeClassified"
            partnerLink="classified" 
            portType="apns:classifiedPT" 
            operation="bookClassified"
            inputVariable="classifiedMessage"  
            outputVariable="approvalInfo">
    </invoke>
  </case>
  <otherwise>

    <assign name="assignMessage">
      <copy>
        <from expression="'Bank payment failed'"/>
        <to variable="approvalInfo" part="accept"/>
      </copy>
    </assign>

  </otherwise>
</switch>

Observe que la instrucción switch en el Listado 1o fija una cadena de error en el mensaje approvalInfo si el proceso del banco no tuvo éxito.

Lo único que queda es responder al cliente. Eso es bastante fácil, como se muestra en el Listado 11. Poder responder al cliente es una de las razones por las cuales el cliente se enumera como socio.

Listado 11. Actividad de respuesta, enviando una respuesta al cliente al completar el proceso de negocios
<reply name="reply"
       partnerLink="customer"
       portType="asns:bankPT"
       operation="depositToBank"
       variable="approvalInfo">
</reply>

El único elemento adicional es un controlador de fallo, lo que demuestra cómo puede reaccionar BPEL cuando una llamada a servicio web produce un fallo. El Listado 12 muestra la definición de un controlador de fallo para controlar fallos que arroja el servicio de clasificados. Si se encuentra dicho fallo, el controlador responde al cliente de inmediato con un mensaje de error.

Listado 12. Definición de un controlador de fallo, prescribir la terminación de la ejecución de un proceso por un fallo
<faultHandlers>
  <catch faultName="classifiedFault" 
         faultVariable="error">
    <reply partnerLink="customer"
           portType="apns:bankPT" 
           operation="depositToBank"
           variable="error" 
           faultName="invalidRequest"/>
  </catch>
</faultHandlers>

El Listado 13 muestra el archivo BPEL completo que implementa el proceso de negocios para Daily Moon para que reciba automáticamente un aviso clasificado y le cobre a un cliente por utilizar su servicio web de clasificados interno y su servicio web proporcionado por el banco.

Listado 13. La definición de proceso de negocios BPEL completa
<process name="bookClassifiedProcess"
         targetNamespace="http://tempuri.org/classifiedProcess"
         suppressJoinFailure="yes"
         xmlns="http://schemas.xmlsoap.org/ws/2003/03/business-process/"
         xmlns:lns="http://tempuri.org/services/wsdl/classified-approval"
         xmlns:classifieddef="http://tempuri.org/services/classifieddefinitions" 
         xmlns:asns="http://tempuri.org/services/bankservice"
         xmlns:apns="http://tempuri.org/services/classifiedservice">

  <variables>
    <variable name="request" 
messageType="classifieddef:classifiedInfoMessage"/>
    <variable name="classifiedMessage" 
messageType="classifieddef:classifiedMessage"/>
    <variable name="bankMessage" messageType="classifieddef:bankMessage"/>

    <variable name="approvalInfo" messageType="apns:approvalMessage"/>
    <variable name="bankapprovalInfo" messageType="asns:approvalMessage"/>
    <variable name="error" 
messageType="classifieddef:classifiedErrorMessage"/>
  </variables>

  <partnerLinks>
    <partnerLink name="customer" 
                 partnerLinkType="lns:bankLinkType"
                 myRole="bank"/>

    <partnerLink name="bank" 
                 partnerLinkType="lns:bankLinkType"
                 partnerRole="bank"/>
    <partnerLink name="classified" 
                 partnerLinkType="lns:bookLinkType"
                 partnerRole="classified"/>
  </partnerLinks>

  <faultHandlers>
    <catch faultName="classifiedFault" 
           faultVariable="error">
      <reply partnerLink="customer"
             portType="apns:bankPT" 
             operation="depositToBank"
             variable="error" 
             faultName="invalidRequest"/>

    </catch>
  </faultHandlers>

<sequence>
  <receive name="receive1" partnerLink="customer" 
           portType="asns:bankPT" 
           operation="depositToBank" variable="request"
           createInstance="yes">
  </receive>

  <assign name="assignclassified">

    <copy>
      <from variable="request" part="classifiedName"/>
      <to variable="classifiedMessage" part="classifiedName"/>
    </copy>   
    <copy>
      <from variable="request" part="amount"/>

      <to variable="classifiedMessage" part="amount"/>
    </copy>
  </assign>
  <assign name="assignbank">
    <copy>
      <from variable="request" part="userName"/>

      <to variable="bankMessage" part="userName"/>
    </copy>
    <copy>
      <from variable="request" part="amount"/>
      <to variable="bankMessage" part="amount"/>
    </copy>

  </assign>

  <invoke name="invokeBank" partnerLink="bank" 
          portType="asns:bankPT" 
          operation="depositToBank"
          inputVariable="bankMessage"  
          outputVariable="bankapprovalInfo">
  </invoke>

  <switch>
    <case condition="bpws:getVariableData('bankapprovalInfo','accept')=1">

      <invoke name="invokeClassified"
              partnerLink="classified" 
              portType="apns:classifiedPT" 
              operation="bookClassified"
              inputVariable="classifiedMessage"  
              outputVariable="approvalInfo">
      </invoke>
    </case>
  <otherwise>
    <assign name="assignMessage">
      <copy>

        <from expression="'Bank payment failed'"/>
        <to variable="approvalInfo" part="accept"/>
      </copy>
    </assign>
  </otherwise>
</switch>

<reply name="reply"
       partnerLink="customer"
       portType="asns:bankPT" 
       operation="depositToBank"
       variable="approvalInfo">
</reply>

</sequence>
</process>

Unir todo

Hay muchas aplicaciones diferentes involucradas en la ejecución de un proceso de negocios WS-BPEL típico. Para ver un ejemplo del WS-BPEL del Daily Moon en acción, por ejemplo, ejecute lo siguiente:

  • El servicio web de avisos clasificados
  • El servicio web del banco
  • Un entorno de tiempo de ejecución WS-BPEL que ejecute el proceso WS-BPEL

Preparación

  1. Ejecute ambos servicios web y su entorno de tiempo de ejecución BPEL en el mismo servidor J2EE.
  2. Descargue Geronimo e instálelo. El ejemplo utiliza el servidor Geronimo de Apache, que está disponible gratuitamente y es simple de configurar.
  3. Descargue el IBM Business Process Execution Language for Web Services Java Run Time (o BPWS4J). BPWS4J es una plataforma con todas las funciones para ejecutar los procesos de negocios descritos en BPEL. Descargue la versión 2.1 del motor bpws4j.
  4. Copie bpws4j.war de la distribución BPWS4J y arrástrelo al directorio de implantación en su servidor Geronimo. Geronimo nota esta aplicación Web nueva y la implanta automáticamente. Ahora debe poder ver la consola de administración BPWS4J, como se muestra en la Figura 1 utilizando la URL http://localhost:8080/bpws4j/admin.
Figura 1. Consola de administración BPWS4J
Consola de administración BPWS4J

Como muestran los botones grandes, esta aplicación administrativa se puede utilizar para implantar, enumerar y eliminar procesos de negocios WS-BPEL del entorno de tiempo de ejecución BPWS4J.

Antes de implantar su proceso de negocio, implante sus dos servicios web: el servicio web de clasificados y el servicio web del banco. Este tutorial incluye un paquete de códigos que incluye ambos servicios web agrupados en un único archivo llamado myservices.war. Haga una copia de este paquete, y arrástrela al directorio de implantación de Geronimo. Geronimo nota este nuevo paquete e implanta ambos servicios web.

Implantar un proceso de negocio

Los detalles de la implantación de un proceso de negocios difieren de un entorno WS-BPEL a otro, pero todos deberían ser bastante simples. Implantar un proceso de negocios en BPWS4J requiere un par de clics con el mouse.

  1. Haga clic en el botón Deploy en la aplicación Web administrativa BPWS4J. Se le piden los documentos WSDL y BPEL que creó que definen un punto final para su proceso de negocios y para el proceso de negocios mismo, respectivamente. Esto se muestra en la Figura 2.
    Figura 2. Brindar los archivos de proceso WSDL y BPEL
    Brindar los archivos de proceso WSDL y BPEL
  2. Navegue hasta los archivos bookclassified.wsdl y bookclassified.bpel, y seleccione Continue Deployment. Se le pide los WSDL para cada servicio de socio involucrado en el proceso de negocio, los cuales, por supuesto, son sus servicios de clasificados y banco. Esto se muestra en la Figura 3.
    Figura 3. Brindar los WSDL para todos los servicios web de los socios
    Brindar los WSDL para todos los servicios web de los socios
  3. Encuentre los WSDL, y seleccione Start Service the Process. BPWS4J intenta comenzar a atender a su proceso de negocios. La Figura 4 muestra el inicio exitoso del proceso de negocios de Daily Moon.
Figura 4. Inicio del proceso de negocios
Inicio del proceso de negocios

Llamar al proceso de negocios

El paso siguiente es probar su servicio web llamándolo. Por supuesto, esto significa hacer una simple llamada SOAP al servicio descrito en el WSDL que creó para su servicio. Este artículo incluye un programa Java para hacer esta llamada y un simple script de lote que puede usar para probarlo. Para hacer fácil esta prueba, su servicio bancario acepta cualquier pago superior a 30 y rechaza cualquier otra cosa. Ejecute el proceso de negocios una vez con un valor de 40, y espere que tenga éxito. Ejecútelo una vez con un valor de 20 y espere que falle. Los resultados se muestran en el Listado 14.

Listado 14. Llamar a su proceso de negocios
C:\bpel\client>testcustomer.cmd http://localhost:8080/bpws4j/axisengine 
classifiedName userName 40
success
C:\bpel\client>testcustomer.cmd http://localhost:8080/bpws4j/axisengine 
classifiedName userName 20
Bank payment failed

Resumen

Este tutorial le ha presentado WS-BPEL y los conceptos que funcionan en la gestión de proceso de negocios. En un mundo lleno de servicios web, tiene sentido tener tecnología estándar para redactar scripts de las interacciones entre ellos, para componerlos en servicios web aún más potentes que den soporte a procesos de negocios importantes.

WS-BPEL es un ejemplo de lo que es posible con tecnologías estándar como las presentadas en esta serie tutorial. Estos estándares dan a los desarrolladores de aplicaciones un conjunto de herramientas potentes para integrar aplicaciones de un negocio empresarial y armar la generación de aplicaciones más nuevas que cubren múltiples empresas.


Descargar

DescripciónNombretamaño
Part 7 BPEL source codewsbpelcode.zip1874KB

Recursos

Aprender

Obtener los productos y tecnologías

Comentar

Comentarios

developerWorks: Ingrese

Los campos obligatorios están marcados con un asterisco (*).


¿Necesita un IBM ID?
¿Olvidó su IBM ID?


¿Olvidó su Password?
Cambie su Password

Al hacer clic en Enviar, usted está de acuerdo con los términos y condiciones de developerWorks.

 


La primera vez que inicie sesión en developerWorks, se creará un perfil para usted. La información en su propio perfil (nombre, país/región y nombre de la empresa) se muestra al público y acompañará a cualquier contenido que publique, a menos que opte por la opción de ocultar el nombre de su empresa. Puede actualizar su cuenta de IBM en cualquier momento.

Toda la información enviada es segura.

Elija su nombre para mostrar



La primera vez que inicia sesión en developerWorks se crea un perfil para usted, teniendo que elegir un nombre para mostrar en el mismo. Este nombre acompañará el contenido que usted publique en developerWorks.

Por favor elija un nombre de 3 - 31 caracteres. Su nombre de usuario debe ser único en la comunidad developerWorks y debe ser distinto a su dirección de email por motivos de privacidad.

Los campos obligatorios están marcados con un asterisco (*).

(Por favor elija un nombre de 3 - 31 caracteres.)

Al hacer clic en Enviar, usted está de acuerdo con los términos y condiciones de developerWorks.

 


Toda la información enviada es segura.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=90
Zone=SOA y servicios web
ArticleID=660832
ArticleTitle=Comprender las especificaciones de servicios web, Parte 7: WS-Business Process Execution Language
publish-date=08082011