2. Estado del arte
2.2. Operadores de mutación para WS-BPEL 2.0
2.2.4. Operadores de Mutación Relacionados con las Condiciones Ex-
Los operadores definidos dentro de esta categoría están relacionados con los distintos tipos de manejadores que proporciona WS-BPEL: de fallos, de eventos, de compensa- ción y de terminación.
Los manejadores de fallos permiten especificar mediante los elementos catch las ac- tividades a llevar a cabo en caso de que se produzca un fallo determinado, y mediante el elemento catchAll las relacionadas con cualquier otro fallo no especificado an- teriormente. El operador XMF elimina un elemento catch o el elemento catchAll
de un manejador de fallos. Por tanto, modela el olvido por parte del programador de incluir un manejador específico para un fallo determinado, o bien el de un manejador por omisión. Código original: <faultHandlers> <catch faultName="LibroNoDisponible" ... > ... </catch> <catchAll> ... </catchAll> </faultHandlers>
Mutante generado por XMF: <faultHandlers>
<catch faultName="LibroNoDisponible" ... > ...
2 Estado del arte
</faultHandlers>
A veces, cuando se produce un fallo durante la ejecución de un proceso, es necesa- rio deshacer el trabajo que ya ha sido hecho; para ello se dispone del manejador de compensación. Por otro lado, dentro de un scope se puede definir un manejador de terminación, que indica las actividades a realizar si se debe terminar la ejecución de dicho scope.
Un scope termina su ejecución con éxito o sin éxito dependiendo de los siguientes casos (véase §A.7):
Finalización normal: si la actividad principal finaliza sin lanzar un fallo y no se detectan actividades de mensajes de entrada, entonces todos los manejadores de eventos se deshabilitan y el manejador de compensación se instala. El scope finaliza con éxito.
Fallo interno: si se lanza un fallo dentro del scope, entonces se terminan las otras actividades en ejecución y las intancias del manejador de eventos del scope, y se ejecuta un manejador de fallos. El scope finaliza sin éxito.
Terminación externa: si un scope en ejecución ha recibido una señal de ter- minación, entonces se terminan las actividades en ejecución y las instancias del manejador de eventos. El scope finaliza sin éxito.
El operadorXMC elimina la definición de un manejador de compensación, y el opera-
dorXMT, la de un manejador de terminación. En ambos casos, WS-BPEL los sustituirá
por el manejador por omisión de cada uno de ellos. Veamos un ejemplo: Código original: <scope name="compra" ... > ... <faultHandlers> <catch faultName="rechazarOrden"> ... </catch> </faultHandlers> <compensationHandler> <invoke partnerLink="Vendedor" ... /> </compensationHandler> </scope>
Mutante generado por XMC:
<scope name="compra" ... > ...
2.2 Operadores de mutación para WS-BPEL 2.0 <faultHandlers> <catch faultName="rechazarOrden"> ... </catch> </faultHandlers> </scope>
La actividad throw permite lanzar un fallo determinado, cuyo nombre se especifica mediante el atributo faultName. El operadorXTF cambia el nombre del fallo lanzado
por una actividad throw por otro del mismo ámbito, modelando la confusión a la hora de especificar el fallo a lanzar.
Código original: <if>
<condition>Stock > 100</condition> <flow> ... </flow>
<elseif>
<condition>Stock ≥ 0</condition> <throw faultName="NoHayStock" ... /> </elseif> <else> <throw faultName="ArticuloNoDisp" /> </else> </if>
Mutante generado por XTF: <if>
<condition>Stock > 100</condition> <flow> ... </flow>
<elseif>
<condition>Stock ≥ 0</condition>
<throw faultName="ArticuloNoDisp" ... /> </elseif> <else> <throw faultName="ArticuloNoDisp" /> </else> </if>
La actividad rethrow permite volver a lanzar un fallo previamente capturado, pu- diéndose utilizar solamente dentro de un manejador de fallos. El operadorXER elimi-
na una actividad rethrow, modelando el olvido de su inclusión en el manejador de fallos.
2 Estado del arte Código original: <faultHandlers> <catch faultName="LibroNoStockExcep" faultVariable="LibroNoStockVar"> ... <rethrow> ... </rethrow> </catch> <catchAll> ... </catchAll> </faultHandlers>
Mutante generado por XER: <faultHandlers> <catch faultName="LibroNoStockExcep" faultVariable="LibroNoStockVar"> ... </catch> <catchAll> ... </catchAll> </faultHandlers>
Los manejadores de eventos pueden contener elementos onEvent, que determinan las acciones a realizar cuando se produce un evento dado, y un elemento onAlarm que especifica las actividades a realizar si después de un tiempo determinado no se ha producido ningún evento. El operador XEE elimina un elemento onEvent de un
manejador de eventos, modelando el olvido a la hora de especificar un evento que puede recibir el proceso. La eliminación del elemento onAlarm ya está modelada por el operadorAPA. Código original: <eventHandlers> <onEvent partnerLink="compra" operation="estadoPedido" ... > <scope> ... </scope> </onEvent> <onEvent partnerLink="compra" operation="cancelarPedido" ... > <scope> ... </scope> </onEvent> </eventHandlers>
Mutante generado por XEE:
2.2 Operadores de mutación para WS-BPEL 2.0 <eventHandlers> <onEvent partnerLink="compra" operation="cancelarPedido" ... > <scope> ... </scope> </onEvent> </eventHandlers>
3 Equivalencias entre los operadores de
mutación para WS-BPEL 2.0 y otros
lenguajes
Con este capítulo se ha llevado a cabo uno de los objetivos de este PFC: estudiar y analizar las equivalencias existentes entre los operadores de mutación definidos para WS-BPEL y los definidos para otros lenguajes.
Es la primera vez que se ha realizado este mismo estudio, que se ha presentado en un artículo. Este artículo [4] ha sido aceptado en el V Taller PRIS 2010.