• No se han encontrado resultados

Transformación de BPEL a Grafos

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

ifactivitySeqthen

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 activityW 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.