bpel: construindo um padrão business processo baseado em web services
TRANSCRIPT
BPEL: Construindo um padrãoBusiness Processo baseado em Web Services
Agenda
O que é BPEL? Orquestração x Coreografia Vocabulário BPEL
– Activities– Partners– Variables– Flow, Link, Correlation
Escopo BPEL BPEL e Java technology Open issues of BPEL
O que é BPEL?
Web Services encontra Business Process
Web Service 1
Web Service 2
Web Service 3
Web Service 4
Web Service 5
Web Service n
Necessidade de composição de Web Services
Aplicações de negócio têm que interoperar e integrar;
A resposta moderna para o desafio de integração, é a Arquitetura Orientado à Serviço e a tecnologia orientada à serviço.
Diferentes aplicações de negócio expondo suas funcionalidades através de serviços web.
Desenvolver os serviços web e expor as funcionalidades não é suficiente. Necessita-se um meio de compor estas funcionalidade na ordem correta (Business Process)
Examplo Problema
ClientPO Service
Credit Service
Inventory Service
Purchase
Order
Credit
Check
ReserveInventory
Credit
Response
InventoryResponse
Invoice
ConsolidateResults
Desafio Business Process
Coordenar comunicação assíncrona entre os serviços
Correlacionar troca de mensagens entre as partes
Implementar ativdades de processamento em paralelo
Implementar lógica de compensação (Undo operations)
. . .
Manipulação/transformação de dados entre parceiros de interações
Suporte para atividades de transações de negócios de longa duração
Manipular exceções Necessidade de modelo
universal de troca Necessidade de troca de
mensagem . . .
História Recente Business Process Standards
2000/05
XLang(Microsoft)
2001/03
BPML(Intallio et al)
2001/05
WSFL(IBM)
2001/06
BPSS(ebXML)
2002/03
BPEL4WS 1.0 (IBM, Microsoft)
BPEL4WS 1.1(OASIS)
2002/06 2003/01
WS-Choreography(W3C)
2003/04
WSCI(Sun et al)
WSCL(HP)
2002/08
2004/12 WS-CDL
O que é BPEL?
Serviço Web (WS) Linguagem de Execução de Processos de Negócio (BPEL) • Versão 1.0 liberado ple IBM, Microsoft e BEA ago/02
– WS-Coordination, WS-Transaction
• Versão 1.1 submetido para OASIS abr/03 (http://www.oasis-open.org)
– Organization for the Advancement of Structured Information Standards
• Versão 2.0 aprovado abr/2007 (http://bpel.xml.org/about-bpel)
• Linguagem XML para descrever processos de negócio baseado em serviço WEB.
• Convergência de XLANG (Microsoft) e WSFL (IBM)
• Consenso de Indústria• IBM, Microsoft, Oracle, Sun, BEA, SAP, Siebel …
BPEL “Concerta” WSDL
WSDL: conjunto de operações desordenadas• Operação é a troca de mensagens
Necessita de regras para ordenar
BPEL é um Web Service Sequencing Language Processos definem um fluxograma de
“coversação”• Conversação consiste na descrição de troca de
mensagens WSDL.
A instância de um processo é um fluxograma em particular
• Sistema de execução pode suportar múltiplos conversações concorrentes.
BPEL é um linguagem orientada a Gráficos A natureza baseada em XML dos processos XML
permite que a lógica dos processos seja editada por ferramentas visuais.
Nós Atividades (Activity Nodes)• Representa a troca de mensagens, operações
internas, pontos de decisão
Arcos (Arcs)
• Ordem de execução• Restrições em processos concorrentes
Gráfico direto acíclico (Directed acyclic graph)
• Parecido com Java Separa erros e manipulação de compensação
Exemplo
Fonte: Collaxa BPEL Designer
BPEL é um Web Service Composition Language Consome serviços (invoke) Cria serviços (receive/reply) Agrega serviços densos (fine-grained services) Cria serviços simples (coarser-grained service)
Proposta do WS-BPEL
Processos de negócios portável– Construir uma infraestrutura interoperável de
Serviços Web.
Linguagem abrangente de indústria para os processos de negócio
– Conjunto de habilidades comuns e linguagens para os desenvolvedores
Mecanismo de escolha de processos– Padrões permitem uma oferta competitiva
Uso do BPEL
Dentro da Corporação (Intranet) Padronizar integração das aplicações corporativas
e estender a integração de sistemas isolados Entre as corporações (Internet)
Possibilitar integração fácil e eficiente entre os parceiros
BPEL Extensão Web Services
BPEL é uma tecnologia chave em ambientes onde as funcionalidades já estão ou serão disponibilizados como serviços web.
Com o aumento do uso de serviços web a importância do BPEL crescerá.
BPEL Process como Web Service
Orquestração x Coreografia
Orquestração x Coreografia
Orquestração É um processo de negócio executável descrevendo um
fluxo do ponto de vista de controle (Workflow) BPEL manipula Orquestração
Coreografia (WSDL) A troca de mensagem pública e observável Regras de interação Agregação entre dois ou mais processos de negócio WSDL manipula coreografia. CDL4WS
Exemplo Business Process: Ordem de Compra
Exemplo de Ordem de Compra
Requisição de Ordem de Compra
Reconhecimento da ordem de compra
Resposta de Ordem de Compra
Business
“A”
Business “B”
Perspectiva da Coreografia
Requisição da Ordem de Compra
Send PO
Receive PO Ack
Receive PO Response
Receive PO
Send PO Ack
Send PO Response
Reconhecimento da Ordem de Compra
Resposta da Ordem de Compra
Coreografia – Observação pública da troca de mensagem
Public Process
Business A
Business B
Perspectiva da Orquestração
Send PO
Receive PO Ack
Receive PO Response
Transform
Transform
From ERP
To ERP
Requisição da ordem de compra
Reconhecimento da ordem de compra
Resposta da ordem de compra
Orquestração – A execução do processo de negócio
Private Process
Business A BPEL Workflow
Orquestração e Coreografia Juntas
BusinessB
Business Analyst Tool
BusinessA
Send PO
Receive PO Ack
Receive PO Response
Transform
Transform
Business A BPEL Workflow
PO Request
PO Acknowledgement
PO Response
Generate BPEL
Template
Generate BPEL
Template
Receive PO
Send PO Ack
Receive PO Response
Transform
Transform
Business B BPEL Workflow
Dois fluxo de trabalho (workflow) refletindo um tratado de negócio
BPEL - Padrões
Description
HTTP,IIOP, JMS, SMTP Transport
XMLMessage
SOAP
WSDL
UDDI Discovery
Transactions
CoordinationWS-Security
WS-Reliability
Quality of
Service
Orchestration – WS-BPEL
BusinessProcesses
Context
Description
Man
agem
ent
Choreography
BPEL Depende de WSDL e Extensões
Service Implementation
Definition
Service Interface Definition
Service
Port
Binding
Port types define Operations
Message
Type
BPEL Vocabulário: Activities
BPEL Estrutura do Documento<process> <!– Definition and roles of process participants --> <partnerLinks> ... </partnerLinks> <!- Data/state used within the process --> <variables> ... </variables> <!- Properties that enable conversations --> <correlationSets> ... </correlationSets> <!- Exception handling --> <faultHandlers> ... </faultHandlers> <!- Error recovery – undoing actions --> <compensationHandlers> ... </compensationHandlers> <!- Concurrent events with process itself --> <eventHandlers> ... </eventHandlers> <!- Business process flow --> (activities)*</process>
BPEL Activities
Um processo BPEL consiste em: Cada passo é chamado de atividade (activity) Existem 2 tipos de atividades BPEL
Atividades Básicas Atividades Estruturadas
BPEL Activities
Basic Activities <invoke> <receive> <reply> <assign> <throw> <wait> <empty>
Structured Activities <sequence> <while> <pick> <flow> <scope> <compensate> <switch> <link>
Basic Activities
Invoke Permite que os processos ativem uma operação unidirecional ou
de request/response em um portType oferecido por um parceiro.
Receive Permite que os processos executem um bloqueio de espera
esperando uma mensagem chegar. Pode ser um instanciador de um processo.
Reply Permite que os processos enviem uma mensagem em resposta
a mensagem que é recebido através de um <receive> A combinação de <receive> e um <reply> forma uma operação
request-response em um WSDL portType para o processo.
Basic Activities
Assign Pode ser utilizada para atualizar valores de variáveis com
novos valores
Throw Gerar um erro/falta em um processo
Wait Permite esperar por um período ou até passar um tempo
Empty Permite inserir uma operação vazia em um processo. É útil para sincronizar atividades concorrentes.
Structured Activities
Sequence Permite definir uma coleção de atividades para serem
executados seqüencialmente em uma ordem léxica.
While Permite indicar que uma atividade seja repetida até que
um critério seja alcançado.
Pick Permite bloquear e esperar uma mensagem chegar ou
disparar um alarme para avisar Quando algum gatilho for ativado, a atividade associada é
executada e o pick completa.
Structured Activities
Flow Permite especificar um ou mais atividades para executar
concorrentemente. Ligações podem ser utilizadas em atividades concorrentes para definir estruturas de controles arbitrárias.
Scope Permite definir uma atividade aninhada com uma variável
associada, manipulador de erros, exceções e compensações.
Compensate Utilizada para chamar compensação dentro do escopo que
foi completada normalmente. Esta construção pode ser chamada somente dentro de um
manipulador de exceções ou outro compensation handler
Structured Activities
Switch Permite um comportamento condicional em um padrão que
acontece com freqüência. A atividade consiste em uma lista ordenada de um ou mais
condições definida com elementos case, seguido por um otherwise.
While Permite repetir uma interação de activityAllows
Basic Activities combinado com Structured Activities
Invoke <InventoryService>
Invoke <CreditService>
Reply <Invoice>
Receive <PO>
<sequence>
<flow>
</sequence>
Exemplo Activities in BPEL<sequence> <receive partnerLink=“customer” portType=“lns:purchaseOrderPT" operation=“sendPurchaseOrder” variable=“PO” createInstance="yes" /> <flow> <invoke partnerLink=“inventoryChecker” portType=“lns:inventoryPT” operation="checkINV" inputVariable="inventoryRequest" outputVariable="inventoryResponse" />
<invoke partnerLink="creditChecker" portType=“lns:creditPT" operation="checkCRED" inputVariable="creditRequest" outputVariable="creditResponse" /> </flow> ... <reply partnerLink=“customer” portType=“lns:purchaseOrderPT” operation=“sendPurchaseOrder” variable=“invoice"/></sequence>
Wait
<wait standard-attributes>
standard-elements
( <for expressionLanguage="anyURI"?>duration-expr</for> |
<until expressionLanguage="anyURI"?>deadline-expr</until> )
</wait>
Switch
<switch standard-attributes>
standard-elements
<case>+
<condition expressionLanguage="anyURI"?>
... bool-expr ...
</condition>
activity
</case>
<otherwise>?
activity
</otherwise>
</switch>
While
<while standard-attributes>
standard-elements
<condition expressionLanguage="anyURI"?>
... bool-expr ...
</condition>
activity
</while>
Switch
<switch standard-attributes>
standard-elements
<case>+
<condition expressionLanguage="anyURI"?>
... bool-expr ...
</condition>
activity
</case>
<otherwise>?
activity
</otherwise>
</switch>
BPEL Vobulário: Partner Links
Duas formas para BPEL Process interagir com Web Services externos O processo BPEL chama operações de outros
serviços WEB Representados por um partnerLink
O processo BPEL recebe chamadas de clientes Representados por um cliente partnerLink
Estes clientes de processos BPEL parecem outros serviços web.
Quando se define um processo BPEL define-se um novo serviço web que é uma composição de serviços existentes.
BPEL as a Web Service
Exemplo
ClientPO Service
Credit Service
Inventory Service
Purchase
Order
Credit
Check
ReserveInventory
Credit
Response
InventoryResponse
Invoice
Consolidate
Results
Partner Links Os serviços com os quais um processo
interage são modelados como um partner link. Cada partner link é caracterizado por um
partnerLinkType As regras do processo é indicado por um
atributo myRole e a regra (ROLE) do parceiro é indicado pelo atributo partnerRole.
CreditService
Partner 2
Inventory
Service
Partner 3
Partner 1(the process)
Purchase
Service
Partner Link
<partnerLinks> <partnerLink name="ncname" partnerLinkType="qname" myRole="ncname"? partnerRole="ncname"?>+ </partnerLink></partnerLinks>
Partner Link<?xml version="1.0" encoding="utf-8"?><process name="insuranceSelectionProcess" targetNamespace="http://packtpub.com/bpel/example/" xmlns="http://schemas.xmlsoap.org/ws/2003/03/business-process/" xmlns:ins="http://packtpub.com/bpel/insurance/" xmlns:com="http://packtpub.com/bpel/company/" >
<partnerLinks> <partnerLink name="client" partnerLinkType="com:selectionLT" myRole="insuranceSelectionService"/>
<partnerLink name="insuranceA" partnerLinkType="ins:insuranceLT" myRole="insuranceRequester" partnerRole="insuranceService"/>
<partnerLink name="insuranceB" partnerLinkType="ins:insuranceLT" myRole="insuranceRequester" partnerRole="insuranceService"/>
</partnerLinks>...
Partner Link Type
<partnerLinkType name="BuyerSellerLink"
xmlns="http://schemas.xmlsoap.org/ws/2004/03/partner-link/">
<role name="Buyer" portType="buy:BuyerPortType"/>
<role name="Seller" portType="sell:SellerPortType"/>
</partnerLinkType>
BPEL Vocabulary: Variables
Variables
Mensagens enviadas e recebidas de parceiros Definido em tipos e mensagens WSDL
CustomerService
Process
<A>
<variable> <activity>
<B>
<activity>
PersistPersist/Retrieve
CustomerService
Persist/Retrieve
Persist/Retrieve
<variable>
Variables in BPEL
<variables> <variable name=“PO” messageType=“lns:POMessage”/> <variable name=“Invoice” messageType=“lns:InvMessage”/> <variable name=“POFault” messageType=“lns:orderFaultType”/></variables>
<message name=“POMessage”> <part name=“customerInfo” type=“sns:customerInfo”/> <part name=“purchaseOrder” type=“sns:purchaseOrder”/></message><message name="InvMessage"> <part name=“IVC” type=“sns:Invoice”/></message><message name=“orderFaultType”> <part name=“problemInfo” type=“xsd:string”/></message>
Purchase Process WSDL:
BPEL:
Como acontece a manipulação de dados?
Utilizando <assign> e <copy>, os dados podem ser copiados e manipulados entre variáveis;
<copy> suporta consultas Xpath para selecionar um dado.<assign> <copy> <from variable="PO" part="customerInfo"/> <to variable=“creditRequest” part="customerInfo"/> </copy></assign>
BPEL Vocabulary: Flow, Links, Corelation
<flow> <links> <link name="XtoY"/> <link name="CtoD"/> </links> <sequence name="X"> <source linkName="XtoY"/> <invoke name="A" .../> <invoke name="B" .../> </sequence> <sequence name"Y"> <target linkName="XtoY"/> <receive name="C"/> <source linkName="CtoD"/> </receive> <invoke name="E" .../> </sequence> <invoke partnerLink="D"> <target linkName="CtoD"/> </invoke></flow>
<flow>
</flow>
<Y>
<C>
<E>
<X>
<A>
<B>
<D>
<link CtoD>
Links – Control Flow
<link XtoY>
Correlation / Correlação
Customer
• SendPurchase
• ProcessPurchaseResponse
PO
Correlation:<PO_CustId = 10><PO_OrdId = 100>
POResponse
Correlations:<PO_CustId = 10><PO_OrdId = 100>
<Inv_VendId = 20><Inv_InvId = 200>
Seller
• AsynchPurchase
• AsynchPurchaseResponse
initiate=yes
initiate=yes pattern=out
initiate=no pattern=out
initiate=yes
initiate=yes
initiate=no
Correlação in BPEL<correlationSets> <correlationSet name="POCorr" properties="cor:custId cor:ordId"/> <correlationSet name="InvoiceCorr" properties="cor:vendId cor:invId"/></correlationSets> ...
<receive partnerLink=“Customer” portType="SP:PurchaseOrderPT"
operation="AsynchPurchase" variable="PO"> <correlations> <correlation set="POCorr" initiate="yes"> </correlations></receive> ...
<invoke partnerLink=“Customer” portType="SP:CustomerPT"
operation=“ProcessPurchaseResponse" inputVariable="POResponse"> <correlations> <correlation set="POCorr" initiate="no" pattern="out">
<correlation set="InvoiceCorr" initiate="yes" pattern="out"> </correlations></invoke> ...
Escopo do BPEL
Escopo em BPEL
Provê um contexto compartilhado para um conjunto de atividades
Pode conter Manipuladores de Erros Manipuladores de
Eventos Variáveis de
manipulação de compensação
Conjunto de correlações Pode serializar variáveis
de acesso concorrente
<scopevariableAccessSerializable="yes|no“ ...>
<variables></variables>
<correlationSets>? ... </correlationSets>
<faultHandlers></faultHandlers>
<compensationHandler>? ... </compensationHandler>
<eventHandlers></eventHandlers> (activities)*
</scope>
Transações de Longa Duração e Compensação (UNDO)
Undo
ReserveInventory
<scope>
</scope>
• ReserveInventory• CancelReserveInv
InventoryService
• CheckCredit• ChargeHoldFee• CancelHoldFee
CreditService
Undo
ChargeHold Fee
Manipulação de Compensação BPEL
<scope> <compensationHandler> <invoke partnerLink="Seller" portType="SP:Purchasing" operation="CancelPurchase" inputVariable="getResponse" outputVariable="getConfirmation"> <correlations> <correlation set="PurchaseOrder" pattern="out"/> </correlations> </invoke> </compensationHandler> <invoke partnerLink="Seller" portType="SP:Purchasing" operation="SyncPurchase" inputVariable="sendPO" outputVariable="getResponse"> <correlations> <correlation set="PurchaseOrder" initiate=“yes” pattern="out"/> </correlations> </invoke></scope>
Exception Handling in BPEL
<faultHandlers> catch exception
– Based on WSDL port defining fault <faultHandlers> can perform activities upon
invocation<faultHandlers> <catch faultName="lns:cannotCompleteOrder" faultVariable="POFault"> <reply partnerLink="customer" portType="lns:purchaseOrderPT" operation="sendPurchaseOrder" variable="POFault" faultName="cannotCompleteOrder"/> </catch></faultHandlers>
Como isso ocorre?
PartnerWSDL 1
ProcessWSDL
PartnerWSDL n
. . .
BPEL Scenario
<process> <partners> <variables> <sequence> <flow> </sequence></process>
1. Compile2. Package3. Deploy
ApplicationServer
BPEL Runtime
CompiledBPEL Scenario
BPEL and Java Technology
BPEL e Java
BPEL é uma linguagem de programação genérica como Java, mas não é tão poderosa como Java.
Ordem exata como os participantes dos serviços web devem ser chamados;
Comportamento condicional, Laços, Variáveis ... É simples e adapta-se melhor para definição de
processos de negócio; BPEL não veio para tomar o lugar de Java, mas
como um complemento para Java.
O que aconteceu com Java?
JSR 207 – Processo de Definição de Linguagem para Java
Fazer com que os processos de negócio sejam natural para os programadores Java.
MessagingTransactions PoolingNamingSecurity
Application Server
Servlet EJB
Process Definition for Java
O que aconteceu com J2EE?
JSR 208 – Java Business Integration Fazer com os processos de negócio sejam
cidadãos de primeira classe nos containers J2EE
Based on JSR 208 Session at JavaOne 2003
. . .RoutingEngine
TransformEngine
BPELEngine
NormalizedMessage
Bus
JSR 208Binding SPI
EDI JCAWeb
Services JMS . . .
Binding Framework
JSR 208Machine SPI
Ferramentas Necessárias
IDE – construir seus Web services WSDL authoring – modelar sua interface Schema authoring – modelar mensagens Process modeling – modelar orquestração Empacotamento e implantação Debugging Monitoramento Análise
Considerações BPEL
Algumas soluções
W3C: WS-Choreography Spec: WS-Transaction Spec: WS-Coordination Spec: WS-Composite Application Framework OASIS: WS-Reliability Spec: ReliableMessaging Spec: WS-Addressing OASIS: WS-Security …
Alguns pensamentos
Portabilidade de processos de negócio? Java / J2EE é portável através de servidores de
aplicação BPEL é portável independente de Java
Linguagem de programação em XML? Fornecedores de todos os tamanhos estão
ocupados projetando modelos