WS-BPEL… versión 2.0 casi lista!
Oasis acaba de aprobar la especificación de WS-BPEL 2.0 hace unos días. Ahora solo queda la publicación definitiva y tendremos un estándar nuevo que debe unificar las formas en que se construyen y modelan los procesos de negocio en los distintos fabricantes.
WS-BPEL (también conocido como BPEL4WS o simplemente BPEL) es un lenguaje de composición de Servicios Web Orientado a Procesos. Se basa en los WSDL (Web Service Definition Language) y de hecho un proceso WS-BPEL puede ser expuesto a través de su propio WSDL y por tanto ser invocado como cualquier otro Servicio Web (permitiendo la reutilización de los mismos).
Nació como combinación de WSFL (Web Service Flow Language de IBM, orientado a grafos y basado en el control de los links entre tareas) y XLANG (Web Services for Business Process Design de Microsoft, basado en un control de flujos con secuencias, condiciones, bucles, etc…) y ha evolucionado adquiriendo lo mejor de cada uno e intentando evitar las malas prácticas de los mismos (debido a que el paradigma de utilización de ambos es distinto y a veces de lugar a situaciones de construcción sobrelapadas).
WS-BPEL define un conjunto de tareas básicas para la Composición de Servicios Web:
- Tareas de Invocación (Invoke): Invocación de operaciones one-way o request-response en un servicio web.
- Tareas de Recepción (Receive): Permite el bloqueo de un proceso a la espera de llegada de un mensaje.
- Tareas de Respuesta (Response): Permite enviar un mensaje en respuesta a un mensaje recibido previamente.
- Tareas de Espera (Wait): Permite la espera durante un tiempo del proceso.
- Tareas de Asignación (Assign): Permite copiar datos de un lugar a otro.
- Tareas de Lanzamiento (Throw): Permite indicar que ha ocurrido un error.
- Tareas de Finalización (End): Permite finalizar la orquestación de la instancia en curso.
Además, las tareas estructuradas son utilizadas para combinar las primitivas en otras más complejas:
- Tareas secuenciales (sequence): Define un orden secuencial de tareas.
- Tareas de decisión (switch): Permite seleccionar un camino en particular en base a una condición.
- Tareas de elección: Permite bloquear y esperar la llegada de un mensaje o establecer un tiempo límite de espera (timeout). Cuando uno de los eventos ocurre, se ejecutan las tareas designadas.
- Tarea repetitiva (While): Permite repetir un grupo de tareas mientras se cumpla una determinada condición.
- Tareas paralelas: Permite paralelizar la ejecución de cierto grupo de tareas.
WS-BPEL trata todos los estados como una colección de tipos de mensajes WSDL. Esa colección de mensajes que constituyen un estado es lo que se llama contenedor. Los mensajes de un contenedor pueden ser los enviados o recibidos con clientes o servicios externos; incluso los utilizados internamente por el proceso para computación temporal de los mismos. Asimismo, la comunicación se define a través de los PortType de los WSDL.
WS-BPEL sostiene la idea de un contenedor para cada tarea en el flujo definido, cada uno de los cuales tiene una definición de esquema. Así, un mensaje se corresponde a un contenedor, que básicamente es un servicio web con información adicional sobre como procesarlo, posibles pre-condiciones y post-condiciones.
De modo gráfico, un proceso definido en WS-BPEL tendría la siguiente forma:
Todos los accesos a datos y manejos de los mismos en WS-BPEL es definido utilizando estándares como XPath y XSLT, además de basarse en los contratos de servicios establecidos por medio de los WSDL.
Durante la ejecución de un proceso se pueden establecer más de una conversación con servicios externos, por lo que es necesario establecer mecanismos a nivel de aplicación para corresponder los mensajes y conversaciones con las instancias de procesos que sean objetos de los mismos. Para ello, WS-BPEL ofrece lo que se conoce como “Correlation Sets” o Grupos de Correlaciones. Estos son conjuntos de propiedades, que juntos sirven para definir una conversación a nivel de aplicación dentro de una instancia de proceso. Básicamente son identificadores únicos de instancias de proceso, que permite saber en todo momento que instancia corresponde a qué mensaje recibido o enviado a través del mismo.
WS-BPEL puede ser utilizado tanto para orquestación de servicios (llamadas a procesos ejecutables; entendiendo como tal las llamadas a servicios y la especificación de como se llevan a cabo) como para coreografía de servicios(llamadas a procesos abstractos; entendiendo como tal los mensajes públicos a intercambiar entre dos o más partes).
Por lo general, la implementación de WS-BPEL varia según el fabricante y de hecho algunos lo interpretan como un Script XML que puede ser ejecutado con un motor específico; mientras que otros lo interpretan como un lenguaje de intercambio. La última especificación, la 2.0 incluye nuevas características como inicialización de variables, transformación XSLT de variables, acceso XPath a datos de variables, etc… No obstante, la especificación 1.1 es la más estable y en uso todavía por la mayoría de los fabricantes, ya que la 2.0 ha sido recientemente aprobada el 31/01/2007 por OASIS y todavía está siendo preparada para su publicación definitiva.

Entonces, ¿hasta qué punto BPEL es un estándar? Se supone que es una especificación apoyada por los grandes (IBM, BEA, …), pero ¿realmente se respeta la especificación y las distintas implementaciones interoperan correctamente o pasa lo de siempre?
Y perdón por mi ignorancia, pero no estoy seguro de entender qué diferencias hay entre orquestación y coreografía de servicios. Por lo que he leído en una entrevista de Javahispano a Miguel Valdés - un desarrollador de JONAS -,este indicaba que la orquestación de servicios se basa en un modelo centralizado, hay un director que define las interaciones, el flujo de los procesos. Entonces, según entiendo, coreografía de procesos supone que los procesos o servicios saben por sí mismos con quién se tienen que comunicar, están acoplados entre ellos, mientras que la orquestación de procesos permite tener servicios intependientes y trasladar a parte la lógica de la interacción. ¿Es así?
Como tal se supone que con la nueva especificación, la 2.0, BPEL será un estándar (de ahí el apoyo de las grandes empresas). Con la versión 1.1 basicamente se trataba de una serie de reglas o modelos que desgraciadamente no todos seguían y cada uno lo hacía a su manera. Esperemos que con esta nueva versión se consiga una unificación total para el modelado de procesos y así dejaremos de ver situaciones de “no-compatibilidad” de procesos BPEL entre “suites” de distintos fabricantes.
Respecto a las diferencias entre orquestación y coreografía (esta última solo a partir de la versión 2.0) se podría ver de la siguiente manera:
La coreografía se basa en un modelo de un solo participante, mientras que la orquestación engloba a todos los participantes y las interacciones asociadas (como una vista global del sistema). Es decir, en la orquestación hablaríamos de una “orquesta” conductora del comportamiento entre todos los participantes (tal como ha sido siempre la definición de procesos). En cambio, en la coreografía hablaríamos de un control distribuido donde cada participante responde según eventos externos.
[...] Yo mismo me he planteado serías dudas sobre el ámbito de cada palabra (e incluso ya esbozamos algo sobre el tema en algún momento) y con este post quiero por un lado aclarar ideas y dar pie a un posible debate sobre cuando debe [...]