BPEL: Construindo um padrão
Business 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 4
Web
Service 2
Web
Service 5
Web
Service 3
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
Credit
Service
Purchas
Invoic
ee
Order
Client
Consolidate
Results
PO Service
Inventory
Service
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
BPML
BPSS
WSCI
WS-Choreography
(Intallio et al)
(ebXML)
(Sun et al)
(W3C)
2001/03
2001/05
WSFL
(IBM)
(Microsoft)
2004/12 WS-CDL
2001/06
2002/03
WSCL
(HP)
2002/06
2002/08
2003/01
2003/04
BPEL4WS 1.0
BPEL4WS 1.1
(IBM, Microsoft)
(OASIS)
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/aboutbpel)
• 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
Business
“A”
Reconhecimento da ordem de
compra
Resposta de Ordem de
Compra
Business
“B”
Perspectiva da Coreografia
Public
Process
Business A
Send
PO
Receive PO
Ack
Receive PO
Response
Requisição da Ordem
de Compra
Reconhecimento da
Ordem de Compra
Resposta da Ordem
de Compra
Business
B
Receive
PO
Send
PO Ack
Send PO
Response
Coreografia – Observação pública da troca de mensagem
Perspectiva da Orquestração
Private
Process
Business A BPEL Workflow
Transform
From
ERP
Send
PO
Receive PO
Ack
To ERP
Transform
Requisição da
ordem de compra
Reconhecimento da
ordem de compra
Receive PO
Response
Resposta da ordem
de compra
Orquestração – A execução do processo de negócio
Orquestração e Coreografia
Juntas
Business Analyst Tool
Business
A
Generate BPEL
Template
Business
B
Business B BPEL Workflow
Business A BPEL Workflow
Transform
Send
PO
Receive PO
Ack
Transform
Receive PO
Response
Generate BPEL
Template
PO
Request
Receive
PO
Transform
Send PO Ack
PO Acknowledgement
Receive PO
Response
Transform
PO
Response
Dois fluxo de trabalho (workflow) refletindo um tratado de negócio
BPEL - Padrões
Choreography
Orchestration – WS-BPEL
Business
Processes
Management
Transactions
WSReliability
WSSecurity
Coordination
Context
Quality
of
Service
UDDI
Discovery
WSDL
Description
Descriptio
n
SOAP
Message
XML
HTTP,IIOP, JMS, SMTP
Transport
BPEL Depende de WSDL e
Extensões
Service
Implementation
Definition
Service
Port
Binding
Service
Interface
Definition
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
<sequence
>
Receive
<PO>
Invoke
<InventoryService>
Invoke
<CreditService>
Reply
<Invoice>
<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
Credit
Service
Purchas
Invoic
ee
Order
Client
Consoli
date
Results
PO Service
Inventory
Service
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.
Partner 1
(the process)
Purchas
e
Service
Partner
2
Credit
Service
Partner
3
Inventor
y
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
Process
Customer
Service
<variable>
<activity> <activity> <variable>
<A>
Persist
Persist/
Retrieve
<B>
Persist/
Retrieve
Customer
Service
Persist/
Retrieve
Variables in BPEL
BPEL
:
<variables>
<variable name=“PO” messageType=“lns:POMessage”/>
<variable name=“Invoice” messageType=“lns:InvMessage”/>
<variable name=“POFault” messageType=“lns:orderFaultType”/>
</variables>
Purchase Process WSDL:
<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>
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
Links – Control Flow
<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>
<X>
<A>
<link XtoY>
<B>
<Y>
<link CtoD>
<C>
<E>
<D>
</flow>
Correlation / Correlação
PO
initiate=yes
Correlation:
<PO_CustId = 10>
<PO_OrdId = 100>
Customer
initiate=yes
Seller
• SendPurchase
• AsynchPurchase
• ProcessPurchaseResponse
POResponse
• AsynchPurchaseResponse
Correlations:
<PO_CustId = 10>
<PO_OrdId = 100>
initiate=no pattern=out
initiate=no
initiate=yes
<Inv_VendId = 20>
<Inv_InvId = 200>
initiate=yes pattern=out
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
<scope
variableAccessSerializable="yes|no“
...>
<variables>
</variables>
<correlationSets>? ...
</correlationSets>
<faultHandlers>
</faultHandlers>
<compensationHandler>? ...
</compensationHandler>
<eventHandlers>
</eventHandlers>
(activities)*
</scope>
Transações de Longa Duração
e Compensação (UNDO)
<scope>
Charge
Hold Fee
Undo
CreditService
• CheckCredit
• ChargeHoldFee
• CancelHoldFee
InventoryService
Reserve
Inventory
Undo
</scope>
• ReserveInventory
• CancelReserveInv
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?
Process
WSDL
Partner
WSDL 1
...
Partner
WSDL n
BPEL Scenario
<process>
<partners>
<variables>
<sequence>
<flow>
</sequence>
</process>
1.
2.
3.
Compile
Package
Deploy
Compiled
BPEL Scenario
BPEL Runtime
Application
Server
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.
Process Definition for Java
Servlet
Transactions
EJB
Messaging
Security
Naming
Application Server
Pooling
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
JSR 208
BPEL
Engine
Transform
Engine
Routing
Engine
Machine SPI
...
Normalized
Message
Bus
Binding Framework
EDI
JCA
Based on JSR 208 Session at JavaOne
Web
Services
JMS
...
JSR 208
Binding 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
Download

BPEL: Construindo um padrão Business Processo baseado