• Nenhum resultado encontrado

A Framework CEO (FCEO) é um perfil UML (extensão do UML base) que permite definir o modelo de negócio de uma organização. Os modelos FCEO não são à partida executáveis, uma vez que possuem apenas uma descrição estática da estrutura e dinâmica do processo. Usando uma descrição normalizada da dinâmica do processo torna possível a conversão automática dos modelos estáticos em modelos executáveis, permitindo simular o funcionamento real dos processos. Foi escolhida a linguagem

Business Process Execution Language for Web Services (BPEL4WS) para definir a

versão executável dos processos de negócio. A BPEL4WS define um modelo e uma gramática para descrever o comportamento de um processo de negócio baseado nas interacções entre o processo e os parceiros de negócio envolvidos.

Recorre-se a um exemplo simples de um processo de recepção de encomendas para melhor compreender a metodologia de modelação sugerida pela FCEO, sendo introduzidos os principais diagramas usados para descrever a estrutura e funcionamento do processo. Este exemplo é também usado para apresentar as principais estruturas e conceitos da linguagem BPEL4WS. De forma a tornar possível a conversão dos modelos FCEO em modelos BPEL4WS executáveis é necessário estender o perfil UML, definido na FCEO. Neste relatório são descritas as extensões necessárias à

framework de forma a tornar possível a conversão automática dos processos de negócio

descritos em UML. A partir da definição do perfil de modelação do negócio é detalhado todo o processo de conversão dos modelos UML para a linguagem BPEL4WS, sendo especificado o algoritmo usado durante a conversão. Actualmente, o algoritmo implementado permite gerar os ficheiros BPEL a partir da especificação do processo, não sendo ainda gerados os ficheiros WSDL correspondentes aos protocolos, nem os ficheiros XSD e WSDL correspondentes aos tipos de dados e mensagens.

Apêndice A – Ficheiro WSDL Protocolo Encomendar

<?xml version="1.0"?> <definitions name="Encomendar” targetNamespace="http://www.example.org/ProcessamentoEncomendas/Encomendar" xmlns:tns="http://www.example.org/ProcessamentoEncomendas/Encomendar" xmlns:plnk="http://schemas.xmlsoap.org/ws/2003/05/partner-link/" xmlns:def="http://www.example.org/ProcessamentoEncomendas/DefinicoesEncomenda/Definicoes Encomenda" xmlns:bpws="http://schemas.xmlsoap.org/ws/2003/03/business-process/" xmlns="http://schemas.xmlsoap.org/wsdl/" > <import namespace="http://www.example.org/ProcessamentoEncomendas/DefinicoesEncomenda/Definicoes Encomenda" location="DefinicoesEncomenda.wsdl"/> <!-- ================================================================= --> <!-- Definição dos tipos de portos: agrupam um conjunto de operações --> <!-- numa unidade lógica. --> <!-- ================================================================= -->

<portType name="IServicoEncomenda">

<operation name="enviarPedidoEncomenda"> <input message="def:Encomenda" /> <output message="def:Factura"/>

<fault name="impossivelFinalizarEncomenda" message="def:EncomendaFault"/> </operation>

</portType>

<!-- ================================================================= --> <!-- Definição das ligações aos parceiros de negócio e dos papéis --> <!-- ================================================================= --> <plnk:partnerLinkType name="Encomendar"> <plnk:role name="ServicoEncomenda"> <plnk:portType name="tns:IServicoEncomenda"/> </plnk:role> </plnk:partnerLinkType> </definitions>

Apêndice B – Ficheiro BPEL

ProcessoReceberEcomenda

<process name="ProcessoReceberEncomenda" suppressJoinFailure="yes"

targetNamespace="http://www.example.org/ProcessamentoEncomendas/ReceberEncomenda/ ProcessoReceberEncomenda" xmlns="http://schemas.xmlsoap.org/ws/2003/03/business-process/" xmlns:tns="http://www.example.org/ProcessamentoEncomendas/ReceberEncomenda/Proces soReceberEncomenda" xmlns:fabricar="http://www.example.org/ProcessamentoEncomendas/Fabricar" xmlns:bpws="http://schemas.xmlsoap.org/ws/2003/03/business-process/" xmlns:enviar="http://www.example.org/ProcessamentoEncomendas/Enviar" xmlns:encomendar="http://www.example.org/ProcessamentoEncomendas/Encomendar" xmlns:def="http://www.example.org/ProcessamentoEncomendas/DefinicoesEncomenda" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:bpelx="http://schemas.oracle.com/bpel/extension" xmlns:ora="http://schemas.oracle.com/xpath/extension" xmlns:facturar="http://www.example.org/ProcessamentoEncomendas/Facturar"> <!-- ================================================================= --> <!-- PARTNERLINKS --> <!-- Lista de parceiros de negócio associados ao processo --> <!-- ================================================================= --> <partnerLinks>

<!-- The 'client' role represents the requester of this service. --> <partnerLink name="encomendar" partnerLinkType="encomendar:Encomendar" myRole="ServicoEncomenda"/>

<partnerLink name="enviar" partnerLinkType="enviar:Enviar"

myRole="ClienteDistribuicao" partnerRole="ServicoDistribuicao"/> <partnerLink name="facturar" partnerLinkType="facturar:Facturar"

partnerRole="ServicoFacturacao" myRole="ClienteFacturacao"/> <partnerLink name="fabricar" partnerLinkType="fabricar:Fabricar"

partnerRole="ServicoProducao"/> </partnerLinks>

<!-- ================================================================= --> <!-- VARIABLES --> <!-- Lista das mensagens e documentos XML usados pelo processo --> <!-- ================================================================= --> <variables>

<variable name="encomenda" messageType="def:Encomenda"/>

<variable name="pedidoEntrega" messageType="def:PedidoEntrega"/>

<variable name="informacaoEntrega" messageType="def:InformacaoEntrega"/> <variable name="prazoEntrega" messageType="def:PrazoEntrega"/>

<!-- CORRELATION SETS --> <!-- Lista dos conjuntos de correlação --> <!-- ================================================================= --> <correlationSets>

<correlationSet name="Encomenda" properties="def:encomendaID"/> <correlationSet name="PrazoEntrega" properties="def:encomendaID"/> </correlationSets>

<!-- ================================================================= --> <!-- ORCHESTRATION LOGIC --> <!-- Conjunto de actividades que coordenam o fluxo das mensagens entre --> <!-- o processo e os parceiros de negócio --> <!-- ================================================================= --> <sequence name="main">

<receive createInstance="yes" name="receberEncomenda"

partnerLink="encomendar" portType="encomendar:IServicoEncomenda" operation="enviarPedidoEncomenda" variable="encomenda"/> <flow name="flow-1"> <links> <link name="pedirEntrega-to-enviarPrecoEntrega"/> <link name="receberPrazoEntrega-to-enviarPrazoEntrega"/> </links> <sequence name="flow-sequence-distribuicao"> <assign name="inicializarPedidoEntrega"> <copy>

<from variable="encomenda" part="eid"/> <to variable="pedidoEntrega" part="eid"/> </copy>

<copy>

<from variable="encomenda" part="cliente"/> <to variable="pedidoEntrega" part="cliente"/> </copy>

</assign>

<invoke name="pedirEntrega" partnerLink="enviar"

portType="enviar:IServicoDistribuicao" operation="pedirEntrega" inputVariable="pedidoEntrega" outputVariable="informacaoEntrega"> <source linkName="pedirEntrega-to-enviarPrecoEntrega"/>

</invoke>

<receive createInstance="no" name="receberPrazoEntrega"

partnerLink="enviar" portType="enviar:ICallbackDistribuicao" operation="enviarPrazoEntrega" variable="prazoEntrega"> <source linkName="receberPrazoEntrega-to-enviarPrazoEntrega"/> </receive> </sequence> <sequence name="flow-sequence-facturacao">

<invoke name="calcularPreco" partnerLink="facturar" portType="facturar:IServicoFacturacao"

<invoke name="enviarPrecoEntrega" partnerLink="facturar" portType="facturar:IServicoFacturacao"

operation="enviarPrecoEntrega" inputVariable="informacaoEntrega"> <target linkName="pedirEntrega-to-enviarPrecoEntrega"/>

</invoke>

<receive createInstance="no" name="receberFactura"

partnerLink="facturar" portType="facturar:ICallbackFacturacao" operation="enviarFactura" variable="factura"/>

</sequence>

<sequence name="flow-sequence-producao">

<invoke name="pedirEscalonamentoProducao" partnerLink="fabricar" portType="fabricar:IServicoProducao"

operation="pedirEscalonamentoProducao" inputVariable="encomenda"> <correlations>

<correlation set="Encomenda" initiate="yes" pattern="out"/> </correlations>

</invoke>

<invoke name="enviarPrazoEntrega" partnerLink="fabricar" portType="fabricar:IServicoProducao"

operation="enviarPrazoEntrega" inputVariable="prazoEntrega"> <target linkName="receberPrazoEntrega-to-enviarPrazoEntrega"/> <correlations>

<correlation set="PrazoEntrega" initiate="yes" pattern="out"/> </correlations>

</invoke> </sequence> </flow>

<reply name="enviarFactura" partnerLink="encomendar" portType="encomendar:IServicoEncomenda"

operation="enviarPedidoEncomenda" variable="factura"/> </sequence>

Apêndice C – Conversão de Tipos Básicos da UML para

o Formato XSD

Tipo Elementar UML Tipo Simples XSD

Boolean boolean Byte byte Currency decimal Date dateTime Double double Float float Integer int Long long Single float String string

Apêndice D – Conversão para o Perfil versão UML 2.0

Perfil versão UML 1.5 Perfil versão UML 2.0 Descrição

receber <<receive>>

entry/ correlation: initialize correlacao1 entry/ operacao1( atrib1 )

Na UML 2, a acção <<receive>> é modelada como uma CallOperation

action e referencia directamente a

operação da interface do protocolo; o nome da acção é sempre igual ao nome da operação; é usado um output pin para modelar a mensagem recebida: ‘atrib1’; os conjuntos de correlação a usar são descritos através de uma restrição associada à acção.

invocar

entry/ correlation: initialize correlacao2 entry/ atrib2 := operacao2( atrib1 )

<<invoke>>

Na UML 2, a acção <<invoke>> é modelada como uma CallOperation

action e referencia directamente a

operação da interface do protocolo; o nome da acção é sempre igual ao nome da operação invocada; todas as

invocações incluem um input pin, correspondente ao parâmetro de entrada da operação, e no caso da invocação síncrona é também incluído um output

pin, correspondente ao parâmetro de

retorno da operação.

responder <<reply>>

entry/ correlation: correlacao1 entry/ operacao1() := atrib2

Na UML 2, a acção <<reply>> é modelada como uma CallOperation

action e referencia directamente a

operação da interface do protocolo; o nome da acção é sempre igual ao nome da operação; todas as actividades de resposta incluem um input pin

correspondente ao parâmetro de retorno da operação.

atribuicao <<assign>>

entry/ msg2/secB := msg1/secA

Na UML 2, as expressões de atribuição da acção <<assign>> são modeladas através de restrições.

Perfil versão UML 1.5 Perfil versão UML 2.0 Descrição

esperar24H

entry/ for 'P1DT' <<wait>>

Na UML 2, as expressões temporais da acção <<wait>> são modeladas através de restrições. Actividade1 <<receive>> Actividade2 <<assign>> [ cond1 ] Actividade4 <<invoke>> Actividade3 <<invoke>> [ cond2 ] Actividade6 <<reply>> Actividade5 <<wait>>

Na UML 2, o fluxo entre actividades deve ser modelado através do fluxo de controlo e não do fluxo de objectos.

Referências

[ACDG+03] – T. Andrews, F. Curbera, H. Dholakia, Y. Goland et. al, “Business Process Execution Language for Web Services”, 2003

[AGGI03] – J. Amsden, T. Gardner, C. Griffin, S. Iyengar, “Draft UML 1.4 Profile for Automated Business Processes with a mapping to BPEL 1.0”, 2003

[BEKM05] – F. Beshears, J. Evdemon, R. Kleinman, S. Mohler, “IMS General Web Services UML to WSDL Binding Auto-generation Guidelines”, IMS Global Learning Consortium, Inc., 2005

[CCMW01] – E. Christensen, F. Curbera, G. Meredith, S. Weerawarana, “Web Services Description Language (WSDL) 1.1”, www.w3.org/TR/wsdl, W3C, 2001

[CLRS01] – T. Cormen, C. Leiserson, R. Rivest, C. Stein, “Introduction to Algorithms”, McGraw-Hill, 2001

[CR99] – J. Clark, S. DeRose, “XML Path Language (XPath)”, www.w3.org/TR/xpath, W3C, 1999

[FW04] – D. Fallside, P. Walmsley, “XML Schema Part 0: Primer Second Edition”,

www.w3.org/TR/xmlschema-0/, W3C, 2004

[BM04] – P. Biron, A. Malhotra, “XML Schema Part 2: Datatypes Second Edition”,

www.w3.org/TR/xmlschema-2/, W3C, 2004

[EP00] – H. Eriksson, M. Penker, “Business Modeling with UML”, John Wiley & Sons, Inc., 2000

[Fowler04] – Martin Fowler, “UML Distilled Third Edition: A Brief Guide to the Standard Object Modeling Language”, Addison-Wesley, 2004

[Hussey05] – Kenn Hussey, “Getting Started with UML2”,

dev.eclipse.org/viewcvs/indextools.cgi/~checkout~/uml2-home/docs/articles/Getting_Started_with_UML2/article.html, IBM, 2005

[Hussey05b] – Kenn Hussey, “Introduction to UML2 Profiles”,

dev.eclipse.org/viewcvs/indextools.cgi/~checkout~/uml2-home/docs/articles/Introduction_to_UML2_Profiles/article.html, IBM, 2005

[Misic05] – Dusko Misic, “Authoring UML profiles using Rational Software Architect and Rational Software Modeler”,

www-128.ibm.com/developerworks/rational/library/05/0906_dusko/ , IBM, 2005

[OMG03] – “Unified Modeling Language Specification”, OMG, version 1.5, 2003

[Sinogas02] – Pedro Sinogas, “Modelação de processos de negócio”, 2002

[VCSMT04] – A. Vasconcelos, A. Caetano, P. Sinogas, R. Mendes, J. Tribolet, Arquitectura de Sistemas de Informação: A Ferramenta de Alinhamento Negócio / Sistemas de Informação?, 2004

Documentos relacionados