• Nenhum resultado encontrado

BPEL and PSEUDO SQL Codes for Bookstore Example Using WED-Flow Approach

N/A
N/A
Protected

Academic year: 2022

Share "BPEL and PSEUDO SQL Codes for Bookstore Example Using WED-Flow Approach"

Copied!
7
0
0

Texto

(1)

BPEL and PSEUDO SQL Codes for Bookstore Example Using WED-Flow Approach

This Document has posted in

http://www.ime.usp.br/~jef/apendix- CoopIS2010.pdf to complete the reading of the paper submitted to CoopIS 2010

entitle “Reducing the Complexity of Exception Handling in Business Process Development: The WED-Flow Approach.

To illustrate business process modeling and implementation using the WED- flow approach, consider a bookstore that sells books through orders over the Internet. An important event that a bookstore needs to manage is the ordering of books made by its customers. For this purpose our sample bookstore has created a business process called order book. Whenever a customer makes a book order, an instance of this business process commences execution. The most important common events and their respective activities are represented for such a book order process illustrated in Figure 1 (using the classical BPMN modeling). In the figure, a clear dependency relation between events is observable except in first event that initiates the process.

The main lifecycle is represented by events and activities that belong to the critical path (customer orders books, bookstore validates the order, customer pays the order, bookstore sends a book, and customer receives books) and the events and activities that belong to the exception paths (customer cancel order, customers reclaim, customer does not pay orders, bookstore abort orders, bookstore does not send books, and customer returns books).

Figure 1

(2)

Bookstore Example using BPEL Code

<!--

BPEL CODE FOR MESSAGE CONFIGURATIONS

-->

<portType name=" WEDFLOWPT ">

<operation name="Create WEDFLOW ">

<input message="ptr:WEDFLOW" />

</operation>

</portType>

<portType name=" WEDSTATEPT ">

<operation name="Instantiate WEDSTATE ">

<input message="ptr:WEDSTATE" />

</operation>

</portType>

<portType name=" WEDTRIGGERPT ">

<operation name="Create WEDTRIGGER">

<input message="ptr:WEDTRIGGER" />

</operation>

</portType>

<portType name=" WECONDITIONPT ">

<operation name="Create WEDCONDITION ">

<input message="ptr:WEDCONDITION" />

</operation>

</portType>

<portType name=" WEDTRANSITIONPT ">

<operation name="Create WEDTRANSITION ">

<input message="ptr:WEDTRANSITION" />

</operation>

</portType>

<portType name=" EOPT ">

<operation name="Create EO">

<input message="ptr:EO" />

</operation>

</portType>

<portType name=" OrderBookRequestPT ">

<operation name="OrderBookRequest">

<input message="ptr:OrderBookRequestMessage" />

</operation>

</portType>

(3)

<!--

BPEL CODE FOR ORDER BOOK WED-Flow Infra-structure

-->

<process name = “OrderBook”>

<plnk:partnerLinkType name="WEDFLOW">

<plnk:role name="Create WEDFLOW">

<plnk:portType name="plr:WEDFLOW" />

<plnk:role name="Instantiate WEDSTATE">

<plnk:portType name="plr:WESTATE" />

<plnk:role name="Create WEDTRIGGER">

<plnk:portType name="plr:WEDTRIGGER" />

<plnk:role name="Create WEDCONDITION">

<plnk:portType name="plr:WEDCONDITION" />

<plnk:role name="Create WEDTRANSITION">

<plnk:portType name="plr:WEDTRANSITION" />

<plnk:role name="Create EO">

<plnk:portType name="plr:EO" />

</plnk:role><plnk:role name="OrderBook">

<plnk:portType name="plr:OrderRequestPT" />

</plnk:role>

</plnk:partnerLinkType>

<variables>

<!-- input Schema for WEDFLOW -->

<variable name="WEDFLOW-Schema"

messageType="pts:WEDFLOWSchemaMessage"/>

<!-- input values for Instantiate WEDSTATE-->

<variable name="WEDSTATE-VALUES"

messageType="pts:WEDSTATEVALUESMessage"/>

<!-- input Schema for WEDTRIGGER -->

<variable name="WEDTRIGGER-Code "

messageType="pts:WEDTRIGGERCodeMessage"/>

<!-- input Code for WEDCONDITION -->

<variable name="WEDCONDITION-Code "

messageType="pts:WEDCONDITIONCodeMessage"/>

<!-- input Code for WEDTRANSITION -->

<variable name="WEDTRANSITION-Code "

messageType="pts:WEDTRANSITIONCodeMessage"/>

<!-- input Code for EO -->

<variable name="EO-Code "

messageType="pts:EOCodeMessage"/>

<!-- input for the OrderBookRequest -->

<variable name="OrderBookRequest"

messageType="ptr:OrderBookRequestMessage"/>

</variables>

<!--

BPEL CODE FOR CRITICAL EVENTS to ORDER BOOK

-->

<sequence>

<!-- Receive initial request from WEDFLOW -->

<receive partnerLink="WEDFLOW"

portType="WEDFLOWPT"

operation="Create WEDFLOW"

variable="WEDFLOW-Schema"

createInstance="yes" />

<invoke>

operation= Create WEDFLOW-Schema </invoke>

(4)

<!-- Receive initial values for WEDSTATE -->

<receive partnerLink="WEDSTATE"

portType="WEDSTATEPT"

operation="Instantiate WEDSTATE"

variable="WEDSTATE-VALUES"

createInstance="yes" />

<invoke>

operation= Instantiate WEDSTATE-VALUES </invoke>

<!-- Receive Schema for WEDTRIGGER Initial WEDflow Instance-->

<receive partnerLink="WEDTRIGGER"

portType="WEDTRIGGERPT"

operation="Create WEDTRIGGER"

variable="WEDTRIGGER-Code"

createInstance="yes" />

<invoke>

operation= Create WEDTRIGGER-Code <! -- Continual Query1 -->

<!--SELECT customer_id, book_id, order_id, date, status, result-->

<!--FROM Order-->

<!--WHERE Order.status = “requested” -->

<!--Teq1: Trigger: 5min interval every day -->

<!--Stop1: Order.status= done -->

</invoke>

<!--Receive Code for WEDCONDITION--> <!-- Order Values-- >

<receive partnerLink="WEDCONDITION"

portType="WEDCONDITIONPT"

operation="Create WEDCONDITION"

variable="WEDCONDITION-Code"

createInstance="yes" />

<invoke>

operation= Create WEDCONDITION-Code

IF order values are OK and there is the Book </invoke>

<!--Receive Code for WEDCONDITION--> <!-- Cancel = Requested-- >

<receive partnerLink="WEDCONDITION"

portType="WEDCONDITIONPT"

operation="Create WEDCONDITION"

variable="WEDCONDITION-Code"

createInstance="yes" />

<invoke>

operation= Create WEDCONDITION-Code IF Order.status = requested </invoke>

<!--Receive Code for WEDTRANSITION--><!--Instantiate WEDSTATE -->

<receive partnerLink="WEDTRANSITION"

portType="WEDTRANSITIONPT"

operation="Create WEDTRANSITION"

variable="WEDTRANSITION-Code"

createInstance="yes" />

<invoke>

operation= Instantiate WEDTRANSITION-Code <!--Processing-->

INSTATIATE WEDSTATE Order-Request;

UPDATE Order SET (status=processing)

</invoke>

. . .

(5)

<!--

BPEL CODE FOR EXCEPTION EVENTS to ORDER BOOK

-->

<!-- Receive Schema for WEDTRIGGER Cancelation-->

<receive partnerLink="WEDTRIGGER"

portType="WEDTRIGGERPT"

operation="Create WEDTRIGGER"

variable="WEDTRIGGER-Code"

createInstance="yes" />

<invoke>

operation= Create WEDTRIGGER-Code <! -- Continual Query2 -->

<! -- SELECT customer_id, book_id, order_id, date, status, result

<! -- FROM Order -->

<! -- WHERE Order.cancelation = “canceled” -->

<! -- Teq1: Trigger: 5min interval every day -->

<! -- Stop1: Order.cancelation = “canceled-accepted” -->

</invoke>

<!-- Receive Code for WEDCONDITION --> <!--Cancel = Validated-- >

<receive partnerLink="WEDCONDITION"

portType="WEDCONDITIONPT"

operation="Create WEDCONDITION"

variable="WEDCONDITION-Code"

createInstance="yes" />

<invoke>

operation= Create WEDCONDITION-Code IF Order.status = validated </invoke>

<!-- Receive Code for WEDCONDITION --> <!-- Cancel = payment -- >

<receive partnerLink="WEDCONDITION"

portType="WEDCONDITIONPT"

operation="Create WEDCONDITION"

variable="WEDCONDITION-Code"

createInstance="yes" />

<invoke>

operation= Create WEDCONDITION-Code IF Order.status = payment </invoke>

<!-- Receive Code for WEDCONDITION --> <!-- Cancel = sent -- >

<receive partnerLink="WEDCONDITION"

portType="WEDCONDITIONPT"

operation="Create WEDCONDITION"

variable="WEDCONDITION-Code"

createInstance="yes" />

<invoke>

operation= Create WEDCONDITION-Code IF Order.status = sent

</invoke>

<!--Receive Code for WEDCONDITION--> <!-- Cancel = received -- >

<receive partnerLink="WEDCONDITION"

portType="WEDCONDITIONPT"

operation="Create WEDCONDITION"

variable="WEDCONDITION-Code"

createInstance="yes" />

<invoke>

operation= Create WEDCONDITION-Code

(6)

IF Order.status = received </invoke>

<!--Receive Code for WEDTRANSITION--><!-- Order Cancelation -->

<receive partnerLink="WEDTRANSITION"

portType="WEDTRANSITIONPT"

operation="Create WEDTRANSITION"

variable="WEDTRANSITION-Code"

createInstance="yes" />

<invoke>

operation= Instantiate WEDTRANSITION-Code<!--Validated-->

INSTATIATE WEDSTATE Order-Request;

UPDATE Order SET (status=done; result=canceled-accepted)

</invoke>

. . .

<!-- CREATE MAIN CODE FOR INSTANCE of an Order Book--> 

       

<eventHandlers>

<onMessage WEDTRIGGER Order-Book-Request <switch>

<case WEDCONDITION Order-Book-Values <invoke>

operation= WEDTRANSITION Order-Book-Processing </invoke>

</case>

. . .

<case WEDCONDITION Order-Book-Canceled <invoke>

operation= WEDTRANSITION Order-Book-Canceled </invoke>

</case>

...

</switch>

</onMessage>

</eventHandlers>

</process>

(7)

Bookstore Example using PSEUDO SQL Code INFRASTRUCTURE Using SQL CODE

ON CREATE-WEDFLOW Order-Book

CREATE WEDSTATE Schema-Data-State (Schema-Order-Book) SET WEDSTATE Initial-Data-State (VALUES)

CREATE WEDTRIGGER Order-Book-Request (ContinualQuery1)

SELECT customer_id, book_id, order_id, date, status, result FROM Order

WHERE Order.status = “requested”

Teq1: Trigger: 5min interval every day Stop1: Order.status= done

CREATE WEDCONDITION Order-Book-Values

IF Request values are OK and there is a Book CREATE WEDTRANSITION Order-Book-Request

BEGIN

INSERT new WED-state copying data state values from triggers;

UPDATE Order SET (status = request);

END

CREATE WEDTRANSITION Order-Book-Processing BEGIN

INSERT new WED-state copying last valid data state;

UPDATE Order SET (status = processing);

END

CREATE WEDTRANSITION Order-Book-Cancelation-Validated BEGIN

INSERT new Order copying last valid data state values

UPDATE Order SET (status = done; result = canceled-accepted);

END

     

MAIN SQL CODE FOR TWO EVENTS

============================

ON WEDFLOWTRIGGER Order-Request FOR EACH ROW

IF WEDCONDITION Order-Book-Values

CALL WEDTRANSITION Order-Book-Processing ENDIF

. . .

ON WEDFLOWTRIGGER Order-Cancelation FOR EACH ROW

IF WEDCONDITION Order-Book-Cancelation-Validated

CALL WEDTRANSITION Order-Book-Cancelation-Validated ENDIF

IF WEDCONDITION Order-Book-Cancelation-Payment CALL WEDTRANSITION Order-Book-Payment

ENDIF

IF WEDCONDITION Order-Book-Cancelation-Sent CALL WEDTRANSITION Order-Book-Sent

ENDIF

IF WEDCONDITION Order-Book-Cancelation-Received CALL WEDTRANSITION Order-Book-Received

ENDIF . . .

Referências

Documentos relacionados

Esta ferramenta possui uma opção que permite o uso de um ficheiro climático, uma vez que as cargas térmicas associadas à envolvente, à infiltração de ar e ao

Como foi dito anteriormente, o atual presidente da COOPERORG é conselheiro da SESCOOP, logo, ele traz uma carga de conhecimento sobre o cooperativismo muito grande

[...] ‘então eu nunca mais vi o mar!?’ () Vou ali olhar à doca e parece que sinto alívio, é só a única coisa que sinto mais alívio. Propõe-se a agregação destes aspectos sob

A pesar de que oficialmente la cooperación de la administración general del estado solo reconoce la Convocatoria Abierta y Permanente (CAP) del año 2011 (Resolución de 12 de mayo

In theoretical point of view the S&amp;OP process is already implemented, presents a more than initial maturity and, therefore, should produce the necessary information for

Em sede de recurso extraordinário, não tendo havido prequestionamento da matéria constitucional, a regra de que a inconstitucionalidade poder ser declarada de ofício deve ser

A segunda característica prende-se com o facto dos SDW, usualmente, gerirem um grande volume de dados distribuídos por uma hierarquia de camadas de dados com diferentes níveis

Feliz é a república à qual o destino outorga um legislador prudente, cujas leis se combinam de modo a assegurar a tranquilidade de todos, sem que seja necessário reformá-las. É o