Articulo Prueba

Anuncio
BPEL
1. INTRODUCCION
Conceptos que se deben considerar para describir los procesos de negocio Los procesos de negocio que dependen del comportamiento de los datos. Por ejemplo,
una cadena de proceso de oferta depende de los datos tales como el número de
elementos que figuran en una orden, el valor total del pedido o la entrega del pedido. Para
definir la intensión del negocio se requiere el uso de condicionales y tiempos de espera.
 La capacidad de especificar las condiciones excepcionales y sus consecuencias, incluidas en
las secuencias de recuperación, es igual de importante para los procesos de negocio como
la capacidad para definir el comportamiento cuando todo va bien.
 Las interacciones de larga duración incluyen unidades múltiples, a menudo son unidades
de trabajo anidadas, cada uno con sus propios datos y requisitos. Para conocer el éxito o el
fracaso de estos procesos de negocio es necesario conocer los resultados de cada uno de
los procesos intervinientes.
Los conceptos básicos de WS-BPEL se pueden aplicar de dos maneras, Abstracto o
ejecutable
Un proceso abstracto, es un proceso parcialmente especificado que no está destinado a ser
ejecutado y que debe ser declara como abstracto. Se pueden ocultar algunos de los detalles
concretos del funcionamiento. Un proceso ejecutable es un proceso totalmente especificado.
Además de las funciones disponibles en los procesos ejecutables, los procesos abstractos
proporcionan 2 mecanismos para ocultar detalles de funcionamiento. (1) Uso explicito de tokens
ocultos y (2) La omisión.
Un proceso abstracto cumple una función descriptiva, con varios casos de uso. Un caso de uso
podría describir los comportamientos de algunos o todos los servicios ofrecidos por un proceso
ejecutable. Otro caso de uso podría definir una plantilla de procesos que incorporan las mejores
prácticas de un dominio específico. Esta plantilla captura la lógica del proceso que es compatible
con una representación de diseño, mientras que excluye los detalles de ejecución que serán
completados cuando se realice un mapeo del proceso ejecutable.
Independientemente del caso de uso y su propósito específico todos los procesos abstractos
comparten una base sintáctica común. Tienen diferentes requisitos según el nivel de opacidad y
restricciones en cada parte del proceso de definición según sea omitido u oculto.
Una base especifica común de las características que definen la sintaxis universal de los procesos
abstractos. Teniendo en cuenta esta base común un perfil de uso provee las especificaciones
necesarias y la semántica basada en WS-BPEL ejecutable para un uso partículas de un proceso
abstracto.
En importante recalcar que es posible utilizar WS-BPEL para definir un proceso ejecutable de
negocio. Mientras que un WS-BPEL Proceso abstracto no es requerido para definirlo
completamente, el lenguaje define un formato portátil para la definición del proceso que depende
exclusivamente de los servicios web y los datos xml.
La continuidad del modelo básico conceptual entre los procesos abstractos y los ejecutables in
WS-BPEL permite la exportación y la importación de los aspectos públicos contenidos en los
procesos abstractos como un proceso o una plantilla de roles mientras se mantiene la intensión y
la estructura del comportamiento observable. Esta es una característica clave para el uso de WSBPEL desde el punto de vista de liberar el potencial de los servicios web, ya que permite el
desarrollo de herramientas y tecnologías que aumentas en gran medida el nivel de automatización
y de ese modo reducir los costos en el establecimiento de procesos automatizados de negocio.
WS-BPEL define un modelo y una gramática para describir el comportamiento de un proceso de
negocio basado en las interacciones entre el proceso y sus socios. La interacción con cada socio
ocurren a través de las interfaces de los servicios web, y la estructura de la relación a nivel de
interface es encapsulada en lo que es llamado un partnerLink. El proceso WS-BPEL define cómo
las interacciones de múltiples servicios con estos socios se coordinan para lograr un objetivo de
negocio, así como el estado y la lógica necesaria para esta coordinación. WS-BPEL también
introduce mecanismos sistemáticos para tratar las excepciones de negocio y las fallas de
transformación. Por otra parte, WS-BPEL introduce un mecanismo para definir cómo las
actividades individuales o compuestas dentro de una unidad de trabajo han de ser compensadas
en caso de que se produzca excepciones o un cambio de socio solicitante.
Un proceso WS-BPEL es una definición reutilizable que se puede implementar de diferentes
maneras y en distintos escenarios, mientras que mantiene un comportamiento uniforma a nivel
de aplicación en todos ellos.
2. CONVENCIONES DE NOTACION




MUST: Esta palabra o los términos REQUIRED o SMALL significan que la definición es un
requerimiento absoluto de la especificación
MUST NO: Esta frase o la frase SMALL NOT significa que la definición es una prohibición
absoluta de la especificación
SHOULD: Esta palabra o el adjetivo RECOMMENDED significa que no pueden existir
razones validas en determinadas circunstancias para ignorar un item en particular. Las
consecuencias deben ser comprendidas y analizadas cuidadosamente antes de elegir un
camino diferente
SHOULD NOT: Esta frase o la frase NOT RECOMMENDED significa que pueden existir
razones validas en determinadas circunstancias cuando el comportamiento en particular
es aceptable o incluso útil, pero llena de consecuencias que deben ser entendidas.

MAY: Esta palabra o el adjetivo OPTIONAL significan que un ítem es verdaderamente
opcional. Un vendor o proveedor puede incluir el ítem porque un determinado mercado
lo requiere o porque cree que mejora un producto, mientras que otro proveedor puede
decidir no utilizarlo
Esta especificación usa una sintaxis informal que describe la gramática XML de los fragmentos XML
que siguen:






La sintaxis en presentada como una instancia XML, pero los valores indican los tipos de
datos en lugar de los valores.
La gramática en negrilla no se ha introducido anteriormente en el documento, o es de
interés particular de un ejemplo.
<--description--> es un marcador de posición para elementos de otro namespace (como ##
otras XSD)
Los caracteres que se añaden a otros elementos o atributos de la siguiente manera:
o ?0ó1
o * 0 ó mas
o + 1 ó mas
o “[“ and “]” son usados para indicar que contienen ítem que deben ser tratados
como un grupo con respecto a ?, * ó +
Los elementos y atributos que son separados por “|” y agrupados por (and) son
alternativas sintácticas
El XML namespaces prefixes es usado para indicar el namespace del elemento que será
definido.
Los ejemplos que comienzan con <?xml contienen suficiente información para cumplir con esta
especificación, otros ejemplos son fragmentos y requieren información adicional .
Ningún ejemplo o fragmento explicativo en este documento es totalmente especificado a menos
que se indique lo contrario.
Los esquemas XSD se proporcionan como una definición de las gramáticas.
Esta especificación usa un numero de namespace que se enumeran a continuación. La elección de
cualquiera es arbitraria, no normativa y no semánticamente significante:
 xsi - http://www.w3.org/2001/XMLSchema-instance
 xsd - http://www.w3.org/2001/XMLSchema
 wsdl - http://schemas.xmlsoap.org/wsdl/
 vprop - http://docs.oasis-open.org/wsbpel/2.0/varprop
 sref - http://docs.oasis-open.org/wsbpel/2.0/serviceref
 plnk - http://docs.oasis-open.org/wsbpel/2.0/plnktype
 bpel - http://docs.oasis-open.org/wsbpel/2.0/process/executable
 abstract - http://docs.oasis-open.org/wsbpel/2.0/process/abstract
3. RELACIONES CON OTRAS ESPECIFICACIONES
WSDL tiene la mayor influencia en el lenguaje WS-BPEL. El modelo de procesos WS-BPEL es la capa
superior del modelo de servicio definido por el WSDL 1.1. En el núcleo del modelo de proceso WSBPEL está la noción de “peer to peer” que es la interacción entre los servicios descritos en el
WSDL, tanto proceso como los socios (partners) se exponen como los servicios WSDL. Un proceso
de negocio define la forma de coordinar la interacción entre una instancia del proceso y sus
partners. En este sentido, una definición de procesos WS-BPEL proporciona y/o utiliza un o más
servicios WSDL y proporciona la descripción del comportamiento y las interacciones de una
instancia del proceso en relación con sus partners y recursos a través de interfaces del servicio
web. Es decir WS-BPEL se utiliza para describir el intercambio de mensajes seguido de los procesos
de negocio de un rol un la interacción.
La definición de los procesos WS-BPEL sigue el modelo WSDL de separación entre el contenido del
mensaje abstracto que se utiliza en el proceso de negocio y la información de la implementación
(tipos de mensaje, tipos de puerto versus binding e información de enlace). En particular un
proceso WS-BPEL representa a todos los socios y las interacciones con los socios en términos de la
interface WSDL abstracta (tipos de puertos y operaciones), no se hace referencia a los servicios
reales utilizados por una instancia del proceso.
La parte abstracta del WSDL no define las limitaciones impuestas por los patrones de
comunicación soportados por binding en concreto. Por lo tanto un WS-BPEL puede definir el
comportamiento relativo para un servicio socio que no es soportado por todos los posibles bindig,
y puede suceder que algunos bindigs no son validos para una definición de proceso WSDL.
Es importante tener en cuenta que es factible que la compatibilidad entre los WSDL y el WS-BPEL
no sea total, al menos para estos casos



Fallo de nombres con restricción
Sobrecarga de nombres de operación en los tipos de puerto WSDL
Tipos de puertos que contienen solicitud-respuesta o las operaciones de notificación.
4. ANALIS ESTATICO DE UN PROCESO DE NEGOCIO
WS-BPEL tomo como un principio general que las implementaciones DEBEN realizar un análisis
estático para detectar y rechazar las definiciones de proceso que fallen en este análisis.
Una implementación WS-BPEL puede realizar la comprobación de análisis estático extra más allá
del análisis básico estático requerido.
5. DEFINIR UN PROCESO DE NEGOCIO
Ejemplo inicial
Se describirá un ejemplo sencillo de un proceso WS-BPEL para el manejo de una orden de compra.
El objetivo realizar una introducción a las estructuras más básicas y algunos conceptos
fundamentales del lenguaje.
Las líneas punteadas representan la secuencia.
Las líneas continuas representan relaciones de control que se utilizan para la sincronización a
través de actividades concurrentes
Esta notación no pretende ser una notación grafica definitiva se utiliza de una manera informal
para una mejor comprensión.
Cuando se recibe una orden de compra de un cliente, el proceso se inicia al mismo tiempo por 3
caminos: El cálculo del precio final de la orden, selección de un cargador, y la programación de la
producción y el envió de la orden. Si bien algunos de los procesos se ejecutan al mismo tiempo,
hay dependencias de control y datos entre los 3 caminos. En particular, el precio de envío es
necesario para finalizar el cálculo del precio y la fecha de envío es necesaria para el programa de
cumplimiento total. Cual las 3 rutas simultaneas se han completado, se realiza el procesamiento
de la factura y está se puede enviar al cliente.
El tipo de puerto ofrecido por el servicio web a sus consumidores (clientes) se muestra en el
siguiente documento WSDL. Otras definiciones que son requeridas en el proceso de negocios se
incluyen en el mismo documento WSDL para simplificar los tipos de puertos para los servicios web
que proporcionan el cálculo de los precios, selección y programación de envío, y la programación
de las funciones de producción. Observe que no hay enlaces (binding) o elementos de servicio en
el documento WSDL. En un proceso WS-BPEL se definen por referencia solo los tipos de puertos
involucrados en el proceso y no sus implementaciones posibles. La definición de procesos de
negocio de esta manera permite la reutilización de la definición para procesos compatibles.
Los <partnerLinkType> incluidos en la parte inferior del documento WSDL representan la
interacción entre el servicio de la orden de compra y cada una de las partes con las que
interactúa. Los <partnerLinkType> se pueden usar para representar dependencias entre servicios,
independiente de que los procesos de negocio WS-BPEL sean definidos por uno o más servicios
web. Cada partnerLinkType define máximo 2 “role” name, y una lista de tipos de puerto (port
types) que cada role debe soportar para que la interacción se lleva a cabo con éxito.
Para este ejemplo se definen 4 partnerLinkType. Dos de ellos “purchasingLP y schedulingLP y sus
respectivos roles asociados. Para cada uno de ellos solo se asocio un único role. PurchasingLP
representa la conexión entre el proceso y la solicitud del cliente, donde solo el servicio de orden
de compra puede ofrecer la operación de servicio. ShedulingLP representa la interacción entre el
servicio de orden de compra y el servicio de programación, en los que las operaciones de este
último son invocadas. Los otros dos partnerLinkType “invoicingLT” y “shippinLT” son los
encargados de realizar las operaciones del cálculo de la factura y el servicio de envío cada uno
debe proporcionar la solicitud de la operación como la devolución de las notificaciones.
A continuación encontraremos el WSDL
<wsdl:definitions
targetNamespace="http://manufacturing.org/wsdl/purchase"
xmlns:sns="http://manufacturing.org/xsd/purchase"
xmlns:pos="http://manufacturing.org/wsdl/purchase"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:plnk="http://docs.oasis-open.org/wsbpel/2.0/plnktype"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<wsdl:types>
<xsd:schema>
<xsd:import namespace="http://manufacturing.org/xsd/purchase"
schemaLocation="http://manufacturing.org/xsd/purchase.xsd" />
</xsd:schema>
</wsdl:types>
<wsdl:message name="POMessage">
<wsdl:part name="customerInfo" type="sns:customerInfoType" />
<wsdl:part name="purchaseOrder" type="sns:purchaseOrderType" />
</wsdl:message>
<wsdl:message name="InvMessage">
<wsdl:part name="IVC" type="sns:InvoiceType" />
</wsdl:message>
<wsdl:message name="orderFaultType">
<wsdl:part name="problemInfo" element=”sns:OrderFault " />
</wsdl:message>
<wsdl:message name="shippingRequestMessage">
<wsdl:part name="customerInfo" element="sns:customerInfo" />
</wsdl:message>
<wsdl:message name="shippingInfoMessage">
<wsdl:part name="shippingInfo" element="sns:shippingInfo" />
</wsdl:message>
<wsdl:message name="scheduleMessage">
<wsdl:part name="schedule" element="sns:scheduleInfo" />
</wsdl:message>
<!-- portTypes supported by the purchase order process -->
<wsdl:portType name="purchaseOrderPT">
<wsdl:operation name="sendPurchaseOrder">
<wsdl:input message="pos:POMessage" />
<wsdl:output message="pos:InvMessage" />
<wsdl:fault name="cannotCompleteOrder"
message="pos:orderFaultType" />
</wsdl:operation>
</wsdl:portType>
<wsdl:portType name="invoiceCallbackPT">
<wsdl:operation name="sendInvoice">
<wsdl:input message="pos:InvMessage" />
</wsdl:operation>
</wsdl:portType>
<wsdl:portType name="shippingCallbackPT">
<wsdl:operation name="sendSchedule">
<wsdl:input message="pos:scheduleMessage" />
</wsdl:operation>
</wsdl:portType>
<!-- portType supported by the invoice services -->
<wsdl:portType name="computePricePT">
<wsdl:operation name="initiatePriceCalculation">
<wsdl:input message="pos:POMessage" />
</wsdl:operation>
<wsdl:operation name="sendShippingPrice">
<wsdl:input message="pos:shippingInfoMessage" />
</wsdl:operation>
</wsdl:portType>
<!-- portType supported by the shipping service -->
<wsdl:portType name="shippingPT">
<wsdl:operation name="requestShipping">
<wsdl:input message="pos:shippingRequestMessage" />
<wsdl:output message="pos:shippingInfoMessage" />
<wsdl:fault name="cannotCompleteOrder"
message="pos:orderFaultType" />
</wsdl:operation>
</wsdl:portType>
<!-- portType supported by the production scheduling process -->
<wsdl:portType name="schedulingPT">
<wsdl:operation name="requestProductionScheduling">
<wsdl:input message="pos:POMessage" />
</wsdl:operation>
<wsdl:operation name="sendShippingSchedule">
<wsdl:input message="pos:scheduleMessage" />
</wsdl:operation>
</wsdl:portType>
<plnk:partnerLinkType name="purchasingLT">
<plnk:role name="purchaseService"
portType="pos:purchaseOrderPT" />
</plnk:partnerLinkType>
<plnk:partnerLinkType name="invoicingLT">
<plnk:role name="invoiceService"
portType="pos:computePricePT" />
<plnk:role name="invoiceRequester"
portType="pos:invoiceCallbackPT" />
</plnk:partnerLinkType>
<plnk:partnerLinkType name="shippingLT">
<plnk:role name="shippingService"
portType="pos:shippingPT" />
<plnk:role name="shippingRequester"
portType="pos:shippingCallbackPT" />
</plnk:partnerLinkType>
<plnk:partnerLinkType name="schedulingLT">
<plnk:role name="schedulingService"
portType="pos:schedulingPT" />
</plnk:partnerLinkType>
</wsdl:definitions>
A continuación se definirá el proceso de negocio para la orden de servicio. Hay cuatro secciones
principales en la definición de este proceso. Se debe tener en cuenta que el ejemplo que estamos
tratando es un ejemplo simple. Con el fin de completarlo, los elementos adicionales que pueden
ser necesarios se definen como <correlationSets>




La sección <partnerLinks> define las diferentes partes que interactúan con los procesos en
el curso del procesamiento de la orden. Las 4 definiciones de <partnerLinks> que se
muestran aquí corresponden al remitente de la orden (customer), los proveedores de
precio (invoicing provider) , los proveedores de transporte (shipping provider) y los
servicios de programación de fabricación (scheduling provider). Cada <partnerLink> se
caracteriza por un <partnerLinkType> y/o uno o dos role names. Esta información
identifica la funcionalidad que es proporcionada por el proceso de negocio y por los
partner service para que la relación tenga éxito, esto es, los port types que el proceso de
orden de servicio y los partner necesitan para la implemantacion.
La sección <varables> define los datos variables que son usados por el proceso,
proporcionando sus definiciones en términos de tipos de mensaje WSDL, XML Schema
Types (simple or complex) o los XML Scheme elements
La sección <faultHandlers> contiene los controladores de error definiendo las actividades
que se deben realizar en respuesta a los fallos derivados de la invocación de los servicios
de evaluación y aprobación. En WS-BPEL, todos los defectos, sean internos o como
resultado de la invocación de un servicio, son identificados con un nombre completo. En
general cada fallo WSDL se identifica en WS-BPEL por un nombre completo formado por el
namespace del documento WSDL en que el port type y el tipo de falla son definidos y un
NCName de la falla.
El resto de los <process> contiene la descripción del comportamiento normal para el
manejo de la solicitud de compra. Los principales elementos de esta descripción son
explicados en la sección a continuación , la definición del proceso
<process name="purchaseOrderProcess"
targetNamespace="http://example.com/ws-bp/purchase"
xmlns="http://docs.oasis-open.org/wsbpel/2.0/process/executable"
xmlns:lns="http://manufacturing.org/wsdl/purchase">
<documentation xml:lang="EN">
A simple example of a WS-BPEL process for handling a purchase
order.
</documentation>
<partnerLinks>
<partnerLink name="purchasing"
partnerLinkType="lns:purchasingLT" myRole="purchaseService" />
<partnerLink name="invoicing" partnerLinkType="lns:invoicingLT"
myRole="invoiceRequester" partnerRole="invoiceService" />
<partnerLink name="shipping" partnerLinkType="lns:shippingLT"
myRole="shippingRequester" partnerRole="shippingService" />
<partnerLink name="scheduling"
partnerLinkType="lns:schedulingLT"
partnerRole="schedulingService" />
</partnerLinks>
<variables>
<variable name="PO" messageType="lns:POMessage" />
<variable name="Invoice" messageType="lns:InvMessage" />
<variable name="shippingRequest"
messageType="lns:shippingRequestMessage" />
<variable name="shippingInfo"
messageType="lns:shippingInfoMessage" />
<variable name="shippingSchedule"
messageType="lns:scheduleMessage" />
</variables>
<faultHandlers>
<catch faultName="lns:cannotCompleteOrder"
faultVariable="POFault"
faultMessageType="lns:orderFaultType">
<reply partnerLink="purchasing"
portType="lns:purchaseOrderPT"
operation="sendPurchaseOrder" variable="POFault"
faultName="cannotCompleteOrder" />
</catch>
</faultHandlers>
<sequence>
<receive partnerLink="purchasing" portType="lns:purchaseOrderPT"
operation="sendPurchaseOrder" variable="PO"
createInstance="yes">
<documentation>Receive Purchase Order</documentation>
</receive>
<flow>
<documentation>
A parallel flow to handle shipping, invoicing and
scheduling
</documentation>
<links>
<link name="ship-to-invoice" />
<link name="ship-to-scheduling" />
</links>
<sequence>
<assign>
<copy>
<from>$PO.customerInfo</from>
<to>$shippingRequest.customerInfo</to>
</copy>
</assign>
<invoke partnerLink="shipping" portType="lns:shippingPT"
operation="requestShipping"
inputVariable="shippingRequest"
outputVariable="shippingInfo">
<documentation>Decide On Shipper</documentation>
<sources>
<source linkName="ship-to-invoice" />
</sources>
</invoke>
<receive partnerLink="shipping"
portType="lns:shippingCallbackPT"
operation="sendSchedule" variable="shippingSchedule">
<documentation>Arrange Logistics</documentation>
<sources>
<source linkName="ship-to-scheduling" />
</sources>
</receive>
</sequence>
<sequence>
<invoke partnerLink="invoicing"
portType="lns:computePricePT"
operation="initiatePriceCalculation"
inputVariable="PO">
<documentation>
Initial Price Calculation
</documentation>
</invoke>
<invoke partnerLink="invoicing"
portType="lns:computePricePT"
operation="sendShippingPrice"
inputVariable="shippingInfo">
<documentation>
Complete Price Calculation
</documentation>
<targets>
<target linkName="ship-to-invoice" />
</targets>
</invoke>
<receive partnerLink="invoicing"
portType="lns:invoiceCallbackPT"
operation="sendInvoice" variable="Invoice" />
</sequence>
<sequence>
<invoke partnerLink="scheduling"
portType="lns:schedulingPT"
operation="requestProductionScheduling"
inputVariable="PO">
<documentation>
Initiate Production Scheduling
</documentation>
</invoke>
<invoke partnerLink="scheduling"
portType="lns:schedulingPT"
operation="sendShippingSchedule"
inputVariable="shippingSchedule">
<documentation>
Complete Production Scheduling
</documentation>
<targets>
<target linkName="ship-to-scheduling" />
</targets>
</invoke>
</sequence>
</flow>
<reply partnerLink="purchasing" portType="lns:purchaseOrderPT"
operation="sendPurchaseOrder" variable="Invoice">
<documentation>Invoice Processing</documentation>
</reply>
</sequence>
</process>
Estructura de un proceso de negocio
Estructura Básica
<process name="NCName" targetNamespace="anyURI"
queryLanguage="anyURI"?
expressionLanguage="anyURI"?
suppressJoinFailure="yes|no"?
exitOnStandardFault="yes|no"?
xmlns="http://docs.oasis-open.org/wsbpel/2.0/process/executable">
<extensions>?
<extension namespace="anyURI" mustUnderstand="yes|no" />+
</extensions>
<import namespace="anyURI"?
location="anyURI"?
importType="anyURI" />*
<partnerLinks>?
<!-- Note: At least one role must be specified. -->
<partnerLink name="NCName"
partnerLinkType="QName"
myRole="NCName"?
partnerRole="NCName"?
initializePartnerRole="yes|no"?>+
</partnerLink>
</partnerLinks>
<messageExchanges>?
<messageExchange name="NCName" />+
</messageExchanges>
<variables>?
<variable name="BPELVariableName"
messageType="QName"?
type="QName"?
element="QName"?>+
from-spec?
</variable>
</variables>
<correlationSets>?
<correlationSet name="NCName" properties="QName-list" />+
</correlationSets>
<faultHandlers>?
<!-- Note: There must be at least one faultHandler -->
<catch faultName="QName"?
faultVariable="BPELVariableName"?
( faultMessageType="QName" | faultElement="QName" )? >*
activity
</catch>
<catchAll>?
activity
</catchAll>
</faultHandlers>
<eventHandlers>?
<!-- Note: There must be at least one onEvent or onAlarm. -->
<onEvent partnerLink="NCName"
portType="QName"?
operation="NCName"
( messageType="QName" | element="QName" )?
variable="BPELVariableName"?
messageExchange="NCName"?>*
<correlations>?
<correlation set="NCName" initiate="yes|join|no"? />+
</correlations>
<fromParts>?
<fromPart part="NCName" toVariable="BPELVariableName" />+
</fromParts>
<scope ...>...</scope>
</onEvent>
<onAlarm>*
<!-- Note: There must be at least one expression. -->
(
<for expressionLanguage="anyURI"?>duration-expr</for>
|
<until expressionLanguage="anyURI"?>deadline-expr</until>
)?
<repeatEvery expressionLanguage="anyURI"?>
duration-expr
</repeatEvery>?
<scope ...>...</scope>
</onAlarm>
</eventHandlers>
activity
</process>
Los atributos del nivel superior son:

queryLanguage: Este atributo especifica el lenguaje de consulta utilizado en el proceso de
selección de nodos de asignación. El valor por defecto de este atributo es:
“urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0” lo que representa que se usa [XPath
1.0] de WS-BPEL 2.0

expressionLanguage: Este atributo especifica el lenguaje usado en el <process>. El valor
por defecto de este atributo es: “urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0” lo que
representa que se usa [XPath 1.0] de WS-BPEL 2.0

La sintaxis del proceso abstracto tiene su propio y distinto espacio de nombres
(namespace). Adicionalmente los atributos de nivel superior son definidos para los
procesos abstractos.
El valor de los atributos queryLanguage y expressionLanguage en el elemento <process> son
globales y por defecto se pueden reemplazar en construcciones específicas, tales como
<condition> de una actividad <while>, tal como se define más adelante en este pliego de
condiciones. Además, el atributo queryLanguage también está disponible para su uso en la
definición de WS-BPEL <vprop:propertyAlias> en el WSDL. Los procesos WS-BPEL debé:


Determinar estáticamente que lenguajes son referencia para el quryLanguage o que
atributos expressionLanguage para cada uno de los procesos WS-BPEL definidos para sí
mismo o si no hay ninguna definición propiedad WS-BPEL en el WSDL asociado.
Si cualquier lenguaje de referencia no es soportado por el procesador de WS-BPEL, el WSBPEL DEBE rechazar la definición del proceso WS-BPEL.
Cada proceso de negocio tiene una actividad principal.
Una actividad WS-BPEL puede ser cualquiera de los siguientes:











<receive>
<reply>
<invoke>
<assign>
<throw>
<Salir>
<wait>
<empty>
<sequence>
<if>
<while>










<repeatUntil>
<forEach>
<pick>
<flow>
<scope>
<compensate>
<compensateScope>
<rethrow>
<validate>
<extensionActivity>
La sintaxis de cada uno de estos elementos será descrita a continuación.
<receive> Permite que el proceso de negocio espere para un matching mensaje de llegada. Esta
actividad se completa cuando el mensaje llega. El portType es un atributo opcional. Si el atributo
portType se incluye para facilitar la lectura. El valor del atributo portType DEBE coincidir con la
combinación de partnertLinks especificados y el role especificado implícitamente en la actividad.EL
atributo messageExchange es opcional y es usado para asociar <reply> de la actividad con el
<receive> de la actividad.
<receive partnerLink="NCName"
portType="QName"?
operation="NCName"
variable="BPELVariableName"?
createInstance="yes|no"?
messageExchange="NCName"?
standard-attributes>
standard-elements
<correlations>?
<correlation set="NCName" initiate="yes|join|no"? />+
</correlations>
<fromParts>?
<fromPart part="NCName" toVariable="BPELVariableName" />+
</fromParts>
</receive>
<reply> permite al proceso de negocios enviar un mensaje en respuesta a un mensaje que fue
recibido por una actividad de mensajes entrantes (IMA) es decir <receive>, <onMessage> o
<onEvent>. La combinación de una IMA y un <reply> forma una operación de petición-respuesta
en un portType WSDL para el proceso. El atributo portType en el <reply> en una actividad es
opcional El valor del atributo portType DEBE coincidir con la combinación de partnertLinks
especificados y el role especificado implícitamente en la actividad. EL atributo messageExchange
es opcional y es usado para asociar <reply> de la actividad con un IMA.
<reply partnerLink="NCName"
portType="QName"?
operation="NCName"
variable="BPELVariableName"?
faultName="QName"?
messageExchange="NCName"?
standard-attributes>
standard-elements
<correlations>?
<correlation set="NCName" initiate="yes|join|no"? />+
</correlations>
<toParts>?
<toPart part="NCName" fromVariable="BPELVariableName" />+
</toParts>
</reply>
<invoke> Permite que el proceso de negocio pueda invocar en un sentido una request-response
de un portType ofrecida por un socio. En el caso de request-response, la actividad de invocación se
completa cuando se recibe la respuesta. El atributo portType es opcional.
<invoke partnerLink="NCName"
portType="QName"?
operation="NCName"
inputVariable="BPELVariableName"?
outputVariable="BPELVariableName"?
standard-attributes>
standard-elements
<correlations>?
<correlation set="NCName" initiate="yes|join|no"?
pattern="request|response|request-response"? />+
</correlations>
<catch faultName="QName"?
faultVariable="BPELVariableName"?
faultMessageType="QName"?
faultElement="QName"?>*
activity
</catch>
<catchAll>?
activity
</catchAll>
<compensationHandler>?
activity
</compensationHandler>
<toParts>?
<toPart part="NCName" fromVariable="BPELVariableName" />+
</toParts>
<fromParts>?
<fromPart part="NCName" toVariable="BPELVariableName" />+
</fromParts>
</invoke>
<assign> se utiliza para actualizar los valores de las variables con nuevos datos. La construcción de
un <assign> puede tener cualquier número de tareas elementales, tales como <copy>, asignación
de elementos o actualización de los datos de operaciones.
<assign validate="yes|no"? standard-attributes>
standard-elements
(
<copy keepSrcElementName="yes|no"? ignoreMissingFromData="yes|no"?>
from-spec
to-spec
</copy>
|
<extensionAssignOperation>
assign-element-of-other-namespace
</extensionAssignOperation>
)+
</assign>
<valídate> se utiliza para validar los valores de una variable contra los asociados en la definición
de datos SML y WSDL.
<validate variables="BPELVariableNames" standard-attributes>
standard-elements
</validate>
<throw> es usado para generar un fallo desde el interior del proceso de negocio.
<throw faultName="QName"
faultVariable="BPELVariableName"?
standard-attributes>
standard-elements
</throw>
<wait> se utiliza para esperar un determinado periodo de tiempo o hasta que un momento
determinado se haya alcanzado.
<wait standard-attributes>
standard-elements
(
<for expressionLanguage="anyURI"?>duration-expr</for>
|
<until expressionLanguage="anyURI"?>deadline-expr</until>
)
</wait>
<empty> es una acividad “no-op” en un proceso de negocio. Es útil para la sincronización de
actividades simultáneas.
<empty standard-attributes>
standard-elements
</empty>
<sequence> Se utiliza para definir un conjunto de actividades que se realizaran secuencialmente
en un orden léxico.
<sequence standard-attributes>
standard-elements
activity+
</sequence>
<if> Se utiliza para seleccionar exactamente una actividad para la ejecución de un conjunto de
opciones.
<if standard-attributes>
standard-elements
<condition expressionLanguage="anyURI"?>bool-expr</condition>
activity
<elseif>*
<condition expressionLanguage="anyURI"?>bool-expr</condition>
activity
</elseif>
<else>?
activity
</else>
</if>
<while> Se utiliza para definir que una actividad que se va a repetir hasta que una <condition> se
haga verdadera.
<while standard-attributes>
standard-elements
<condition expressionLanguage="anyURI"?>bool-expr</condition>
activity
</while>
<repeatUntil> se utiliza para definir que la actividad se va a repetir hasta que la <condiction> se
haga realidad. La <condiction> se prueba después de que la actividad secundaria se completa. Una
<repeatUntil> se utiliza para ejecutar al menos una vez la actividad secundaria.
<repeatUntil standard-attributes>
standard-elements
activity
<condition expressionLanguage="anyURI"?>bool-expr</condition>
</repeatUntil>
<forEach> Itera una actividad secundaria exactamente N+1 veces, donde N es igual a la
<finalCounterValue>. Si parallel = yes entonces esto es un <foreEch> paralelo donde N+1
instancias <scope> actividades que se deben realizar en paralelo. Un flujo se crea
dinámicamente con N+1 <scope> actividades secundarias. Un <completionCondiction> se
utiliza dentro de un <forEach> para permitir que una actividad se complete sin ejecutar o
terminar las ramas mencionadas.
<forEach counterName="BPELVariableName" parallel="yes|no"
standard-attributes>
standard-elements
<startCounterValue expressionLanguage="anyURI"?>
unsigned-integer-expression
</startCounterValue>
<finalCounterValue expressionLanguage="anyURI"?>
unsigned-integer-expression
</finalCounterValue>
<completionCondition>?
<branches expressionLanguage="anyURI"?
successfulBranchesOnly="yes|no"?>?
unsigned-integer-expression
</branches>
</completionCondition>
<scope ...>...</scope>
</forEach>
<pick> Se utiliza para esperar por uno o varios posibles mensajes lleguen o por un tiempo
de espera. Cuando alguno de estos disparadores se produce se ejecuta la actividad
secundaria. Cuando la actividad secundaria se completa, la actividad <pick> termina.
El atributo portType en la actividad <onMessage> es opcional. El atributo
<messageExchange> se utiliza para asociar un <reply> con un evento <onMessage>
<pick createInstance="yes|no"? standard-attributes>
standard-elements
<onMessage partnerLink="NCName"
portType="QName"?
operation="NCName"
variable="BPELVariableName"?
messageExchange="NCName"?>+
<correlations>?
<correlation set="NCName" initiate="yes|join|no"? />+
</correlations>
<fromParts>?
<fromPart part="NCName" toVariable="BPELVariableName" />+
</fromParts>
activity
</onMessage>
<onAlarm>*
(
<for expressionLanguage="anyURI"?>duration-expr</for>
|
<until expressionLanguage="anyURI"?>deadline-expr</until>
)
activity
</onAlarm>
</pick>
<flow> Es una actividad que se utiliza para describir una a más actividades que se ejecutan
al mismo tiempo. <link> se especifican para definir el control de las dependencias
explicitas entre las actividades anidadas secundarias.
<flow standard-attributes>
standard-elements
<links>?
<link name="NCName" />+
</links>
activity+
</flow>
<scope> Es una actividad que se utiliza una actividad anidada con sus propios asociados
<partnerLinks>, <messageExchange>, <variables>, <correlationSets>, zfaultHandlers>,
<compensationHandlers>, <terminationHandlers> y <eventHandlers>.
<scope isolated="yes|no"?
standard-attributes>
standard-elements
<partnerLinks>?
... see above under
</partnerLinks>
<messageExchanges>?
... see above under
</messageExchanges>
<variables>?
... see above under
</variables>
<correlationSets>?
... see above under
</correlationSets>
<faultHandlers>?
... see above under
</faultHandlers>
<compensationHandler>?
...
</compensationHandler>
<terminationHandler>?
...
</terminationHandler>
<eventHandlers>?
... see above under
</eventHandlers>
activity
</scope>
exitOnStandardFault="yes|no"?
<process> for syntax ...
<process> for syntax ...
<process> for syntax ...
<process> for syntax ...
<process> for syntax ...
<process> for syntax ...
<compensateScope> Esta actividad se utiliza para comenzar una compensación en un
ámbito interior especificado que ya se ha completado con éxito. Esta actividad solo DEBE
ser utilizada dentro de un faulHandler o de otro controlador de compensación
(compensationHandler) o un controlador de terminación (terminationHandler)
<compensateScope target="NCName" standard-attributes>
standard-elements
</compensateScope>
<compesate> Esta actividad se utiliza para iniciar una compensación en todos los scopes
internos que se hayan completado con éxito, en el orden predeterminado. Esta actividad
DEBE ser utilizada dentro de un faultHandler o en compesationHandler o en un
terminationHandler.
<compensate standard-attributes>
standard-elements
</compensate>
<exit> Esta actividad se utiliza para poner fin de inmediato a una instancia de un proceso
de negocio.
<exit standard-attributes>
standard-elements
</exit>
<rethrow> Esta actividad de utiliza para volver a lanzar una falta que fue originalmente
capturada inmediatamente al cerrar faultHandler
<rethrow standard-attributes>
standard-elements
</rethrow>
<extensionActivity> se utiliza para extender WS-BPEL mediante la introducción de un
nuevo tipo de actividad. El contenido de un <extensionActivity> DEBE ser un solo
elemento que DEBE poner a disposición de WS-BPEL elementos estándar y atributos
estándar.
<extensionActivity>
<anyElementQName standard-attributes>
standard-elements
</anyElementQName>
</extensionActivity>
Los atributos estándar mencionados anteriormente son los siguientes
name="NCName"? suppressJoinFailure="yes|no"?
donde los valores por defecto son los siguientes:


Nombre: Sin valor por defecto (sin nombre)
suppressJoinFailure: Cuando este atributo no se especifica para una actividad,
hereda su valor desde su actividad cerrada más cercana o desde el proceso no
cerrado si la actividad no cerrada especifica este proceso.
Los elementos estándar mencionados anteriormente son los siguientes:
<targets>?
<joinCondition expressionLanguage="anyURI"?>?
bool-expr
</joinCondition>
<target linkName="NCName" />+
</targets>
<sources>?
<source linkName="NCName">+
<transitionCondition expressionLanguage="anyURI"?>?
bool-expr
</transitionCondition>
</source>
</sources>
Idioma de extensibilidad
WS-BPEL soporta la extensibilidad, permitiendo los atributos namespace-qualified aparezcan en
cualquier elemento del WS-BPEL y permitir que elementos de otros namespaces aparezcan dentro
de los elementos definidos en el WS-BPEL.
Existen extensiones obligatorias u opcionales. En caso de extensiones obligatorias no soportadas
por la implementación WS-BPEL, la de definición del proceso debe ser rechazada. Las extensiones
opcionales no son compatibles con una implementación WS-BPEL y deberán ser ignoradas.
WS-BPEL proporciona dos explicit
<extensionActivity>
extension construct:
<extensionAssignOperation> y
Las extensiones son permitidas en WS-BPEL construidas utilizando definiciones WSDL, como
<partnerLink>, <role>, <vprop:property> y <vprop:propertAlias>.
Documento de Vinculación (Document Linking)
Un proceso de deficion WS-BPEL se basa en XML Schemas y WSDL para la definición de tipos de
datos e interfaces de servicio. La definición de procesos se basan también en otras construcciones
tales como partner link types, variable properties y property aliases.
<import namespace="anyURI"?
location="anyURI"?
importType="anyURI" />*
El Elemento <import> se utiliza en un proceso WS-BPEL para declara la dependencia en XML
Schemas o definiciones WSDL. Cualquier numero de elementos <import> pueden aparecer como
elementos hijos <import>. Cada elemento <import> contiene uno o dos atributos opcionales.



Namespace: Este atributo especifica una URL absoluta que identifica las definiciones
importadas. Este atributo es opcional. Un elemento importado sin un atributo namespace
indica que las definiciones externas que son usadas no son de namespace calificado. Si un
namespace se especifica las definiciones importadas DEBEN estar en el namespace. Si no
se especifica ningún namespace, las definiciones importadas no deben contener una
especificación targetNamespace. SI cualquiera de estas reglas no se cumplen entonces la
definición del proceso DEBE
ser rechazada por el WS-BPEL.
El namespace
http://www.w3.org/2001/XMLSchema es importado implícitamente.
Location: El atributo location contiene una URL que indica la ubicación de un documento
que contiene las definiciones pertinentes. La URL location puede ser una URL relativa.
Location es un atributo opcional. Un elemento <import> sin un atributo location indican
que las definiciones externas son usadas por el proceso pero no hace ninguna declaración
acerca de las definiciones que puede encontrar.
importType: Este atributo es obligatorio e identifica el tipo de documento que se importa
al proporcionar una URL absoluta que identifica el lenguaje de codificación usado en el
documento.
Observe que de acuerdo a estas normas, es permitido tener un elemento <import> sin el
namespace y el atributo location , y solo debe contener un atributo importType.
Un proceso de definición WS-BPEL DEBE importar todo los XML Schemas y las definiciones WSDL
que utiliza. Un procesador WS-BPEL deberá verificar que todos las partes de mensajes referencian
un <vprop:propertyAlias>, <from>, <to>, <fromPart> y <toPart>. Un proceo WS-BPEL puede incluir
más de una declaración de importación del mismo namespace y un importType, siempre y cuando
estas declaraciones sean ubicadas en diferentes valores. Un WS-BPEL DEBE rechazar si los
documentos importados contienen conflictos de los componentes usados en la definición del
proceso de importación.
Ciclo de vida de un proceso de negocio ejecutable.
Como se nota en la introducción, el modelo de interacción que es directamente soportado con
WSDL es esencialmente un modelo cliente-servidor de request-response. WS-BPEL se basa en
WSDL con el supuesto que todas las interacciones externas del proceso de negocio ocurren a
través del las operaciones Web Service. Sin embargo, un proceso de negocio WS-BPEL representa
las interacciones de larga duración en la que cada interacción tiene un comienzo, una definición
de comportamiento durante su tiempo de vida y un final.
La creación de una instancia de un proceso WS-BPEL es siempre implícita, las actividades que
reciben los mensajes (<receive>, <pick>) pueden ser anotadas para indicar que la actividad
provoca una nueva instancia del proceso de negocio que se creara. Esto es posible mediante lel
establecimiento del atributo createInstance de esa actividad en “si”. Cuando un mensaje es
recibido por dicha actividad, una instancia del proceso es creada si esta no existe ya.
Si mas de una actividad de inicio existe en un proceso y estas actividades contienen <correlations>
entonces tolas las actividades DEBEN compartir al menos un <correlation> común.
Si un proceso contiene exactamente una actividad de inicio entonces el uso de <correlationSets>
no tiene restricciones. Esto incluye una sección con múltiples <onMessage>.
Una instancia de proceso de negocio termina ya sea de forma normal o anormal. El proceso
termina normalmente cuando la actividad principal y todas las instancias event handlers del proso
están completas sin presentar ningún error.
Descargar