3.1. Emparejamiento
3.1.2. Transformación de BPEL a Grafos
En este apartado se describirá la equivalencia entre una descripción BPEL y una representación formal de Grafos para procesos de negocio, encontrada en(Corrales, 2008). Un grafo tiene un nodo de comienzo y puede tener múltiples nodos de finalización. Un grafo también posee dos clases de nodos: los nodos regulares, que representan las actividades y los conectores, que representan las reglas de separación o juntura del tipo XOR o AND. Los nodos son conectados mediante aristas, las cuales pueden tener un guard opcional. Los guards son condiciones que pueden ser evaluadas como verdaderas o falsas.
En esta transformación, se implementa la estrategia de barrido presentada en (Mendling, y otros, 2005) para transformar un documento BPEL a un grafo BPEL. La idea general del barrido es mapear Actividades Estructuradas (SA) a sus respectivos Fragmentos de Grafo BPEL (ver Algoritmo 1). Éste algoritmo recorre la estructura anidada del flujo de control BPEL (BCF) de arriba hacia abajo y aplica recursivamente un proceso de transformación específico para cada tipo de actividad estructurada. Primero, los nodos Start y End son identificados en el documento BPEL, luego por cada actividad estructurada la Structured Activity graph (SAgraphi) es calculada ejecutando la función BCF transform en SAi (mirar
algoritmo 2). Seguido el SAgraphi es adicionado al BPEL graph. Por cada SAgraphi
adicionado al BPEL graph, el algoritmo 1 calcula sus aristas con otras actividades estructuradas de grafos (SAgraphj) considerando el mapeo tc, el cual es definido de acuerdo
con las condiciones de transición de las Actividades Estructuradas (SA) en el documento BPEL.
Luis Javier Suárez Meza – Luis Antonio Rojas Potosí
Algoritmo 1. Function FlatteningBCF
INPUT: BPELdocument OUTPUT: BPELgraph
ADD Start node to BPELgraph ADD End nodes to BPELgraph
for each SAido
Calculate SAgraphi = BCF transform(SAi)
ADD SAgraphi to BPELgraph
Calculate the edge (SAgraphi ,SAgraphj ) = tc(SAi , SAj )
ADD the edge (SAgraphi ,SAgraphj ) to BPELgraph
end for
returnBPELgraph
El Algoritmo 2 presenta el procedimiento BCFtransform, el cual es invocado recursivamente en elementos anidados. En este algoritmo, el primer parámetro representa la actividad estructurada a ser procesada, seguida por el nodo predecessor y successor del grafo estructurado de actividades (SAgraph), entre los cuales, la estructura anidada está anclada (i.e. predecesor y sucesor).
El procedimiento BCFtransform, empieza comprobando si la actividad estructurada actual (SA) sirve como objeto y fuente de relaciones. Si es así, respectivamente serán adheridos conectores al comienzo y al final del bloque actual de la actividad. De este modo las relaciones en el control de flujo de BPEL son mapeadas a aristas y las respectivas conexiones de join o split, son adicionadas alrededor de las actividades básicas anidadas. Existen cinco sub-procedimientos para manejar las cinco actividades estructuradas: Secuence, Flow, Switch, While, y Pick. En éste punto, se asume que Pick es únicamente utilizada para modelar eventos alternativos de comienzo. La transformación de Scopes simplemente llama al procedimiento para esa actividad anidada. Actividades Empty son mapeadas a una arista entre el nodo predecessor y el nodo successor. Terminate es mapeada a un evento End. Además, cada actividad Básica BPEL (Receive, Reply, Invoque , Wait) es transformada a un nodo de grafo BPEL. Puesto que el control de flujo BPEL es de importancia, la actividad Assign es mapeada a una arista entre nodos predecessor y successor.
Algoritmo 2.Function BCFtransform
INPUTS: SA
OUTPUT: SAgraph
Calculate BCF transform(SA, Predecessor, Successor, Connector)
if∃(Linki , SA) then
ADD a SplitConnectori
ADD an edge between the P redecessor Activity and the SplitConnectori
end if
if∃(SA, Linkj ) then
ADD a JoinConnectorj (Linkj )
Descubrimiento de Servicios en Ambientes Ubicuos
end if
ifactivity∈Seqthen
Calculate BCFtransformSeq(SA,Predecessor,Successor)
else if activity ∈ F low then
Calculate BCFtransformFlow(SA,Predecessor,Successor,AND)
else if activity ∈ P ickthen
Calculate BCFtransformPick(SA,Predecessor,Successor,XOR)
else ifactivity ∈ Switchthen
Calculate BCFtransformSwitch(SA,Predecessor,Successor,XOR)
else if activity∈W hilethen
Calculate BCFtransformWhile(SA,Predecessor,Successor,XOR)
else if activity ∈ Basicthen
Calculate (Activity,Predecessor,Successor)
else if activity ∈ Emptythen
Calculate (Predecessor,Successor)
else ifactivity ∈ Assignthen
Calculate (Predecessor,Successor)
else if activity ∈ Terminatethen
Calculate (Predecessor,End) end if
returnSAgraph
Los procedimientos de BCFtransformSeq, BCFtransformFlow, BCFtransformPick, BCFtransformSwitch y BCFtransformWhile, generan los elementos del grafo BPEL que corresponden a sus respectivas actividades estructuradas BCF. BCFtransformSeq transforma una Sequence, conectando todas las actividades anidadas con las aristas del grafo. Aunque no esté definida explícitamente, esta transformación requiere un orden definido en las actividades anidadas. Para cada sub-actividad el procedimiento BCFtransform es invocado nuevamente. La representación de grafos de Switch (BCFtransformSwitchprocedure), en el grafo BPEL, consiste de un bloque de ramas alternativas entre una separación XOR y una juntura XOR. Las condiciones de ramificación son asociadas a las aristas.
La actividad Pick tiene algunas similitudes a la Switch. Pero, en lugar de evaluar una expresión, espera por la ocurrencia de una fuera de un conjunto de eventos y ejecuta las actividades asociadas. Esos eventos pueden ser relacionados a tiempo o a mensajes recibidos. Sintácticamente, el BCFtransformPick procedure mapea a los mismos elementos de control de flujo correspondientes a la actividad Switch. En el caso de las condiciones de OnMessage, el mensaje es especificado con elementos de flujo no controlable, similares a una actividad Receive. En el caso de un evento OnAlarm, el tiempo es modelado de la misma manera que para una actividad Wait. Cada evento alternativo es seguido por actividades anidadas combinadas con una juntura XOR. El BCF procedure es transformado a un bloque de ramas paralelas, comenzando con una separación AND y sincronizada con una juntura AND. Para la actividad While, BCFtransformWhile crea un bucle entre una juntura XOR y una separación XOR. La condición es adicionada a la arista. Para la transformación de Scopes simplemente se llama al procedimiento de esta actividad anidada.
Luis Javier Suárez Meza – Luis Antonio Rojas Potosí
Figura 7. Correspondencia entre elementos BPEL y elementos de Grafos
Los nodos que representan las actividad básicas tienen los siguientes atributos: ActivityType(AT), Operation (Op), PortType (PT) yPartnerLink (PL). Los nodos conectores tienen dos atributos: ConnectorType (AND-split, AND-join, XOR-split, XOR-join) y ActivityType (la actividad estructurada BPEL desde la cual fue transformada). La Figura 7muestra la correspondencia entre un esquema BPEL y elementos de grafos.