You are on page 1of 44

Session id: 40024

BPEL: Building StandardsBased Business Processes with Web Services


Nickolas Kavantzas
Principal Member, Technical Staff Oracle Application Server 10g, Orchestration

Mike Lehmann
Principal Product Manager, Oracle Application Server 10g, Orchestration

BPEL?
B E E P L E? B E E P E L L? B I P P L E?

Web Services Meet Business Processes


Web Service 1 Web Service 4

Web Service 2

Web Service 5

Web Service 3

Web Service n

Example Problem Space

Credit Service
Purchase Invoice Order

Consolidate Results

Client

PO Service

Inventory Service

Business Process Challenges


Coordinate asynchronous communication between services Correlate message exchanges between parties Implement parallel processing of activities ... Manipulate/transform data between partner interactions Support for long running business transactions and activities Provide consistent exception handling ...

Recent History of Business Process Standards


BPML
(Intallio et al)

BPSS
(ebXML)

WSCI
(Sun et al)

WS-Choreography
(W3C)

2000/05 2001/03 2001/05 2001/06 2002/03 2002/06 2002/08 2003/01 2003/04

XLang
(Microsoft)

WSFL
(IBM)

WSCL
(HP)

BPEL4WS 1.0
(IBM, Microsoft)

BPEL4WS 1.1
(OASIS)

Orchestration vs. Choreography


Orchestration Private process Steps of an executable workflow Process controlled by one party
Business Process

Choreography Public (abstract) process Sequence of observable messages Conversation made up of equals
Business Process 1 1. CheckInv 2. Available Business Process 2

?
Derivation from Chris Peltz of HP JavaOne 2003 presentation

3. Place Order

Business Process Execution Language for Web Services


Version 1.0 released by IBM, Microsoft and BEA in August 2002

Accompanied by WS-Coordination, WS-Transaction which remain unsubmitted to standards bodies

Version 1.1 submitted to OASIS April 2003 XML language for describing business processes based on Web services

Convergence of XLANG (Microsoft) and WSFL (IBM) IBM, Microsoft, Oracle, Sun, BEA, SAP, Siebel

Amazing industry consensus in the last 6 months

Value Proposition
Portable business processes

Built on top of an interoperable infrastructure of Web services Common skill set and language for developers Standards lead to competitive offerings

Industry wide language for business processes

Choice of process engines

Standards Building Blocks of BPEL


BPEL4WS
Reliable Messaging Security UDDI WSDL SOAP XML,Encoding HTTP,IIOP, JMS, SMTP Transactions Coordination Processes Quality of Service Discovery Description Messaging Transport

BPEL Depends on WSDL and WSDL Extensions


Service Implementation Definition Service

Port

Binding Service Interface Definition Port types define Operations Message

Type

BPEL Scenario Structure


<process> <! Definition and roles of process participants --> <partners> ... </partners> <!- 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
Primitive Activities <invoke> <receive> <assign> <reply> <throw> <terminate> <wait> Structured Activities <sequence> <switch> <pick> <flow> <link> <while> <scope>

Partners
Declare the Web services and roles used by the process Tied to WSDL of the process itself and the participating Web services by service link types
Partner 1
(the process)

Partner 2 Credit Service

Partner 3 Inventory Service

Purchase Service

Partners in BPEL
BPEL:
<partners> <partner name=customer" serviceLinkType=lns:purchaseSLT myRole=purchaseService/> <partner name=inventoryChecker serviceLinkType=lns:inventorySLT myRole=inventoryRequestor partnerRole=inventoryService/> <partner name=creditChecker serviceLinkType=lns:creditSLT myRole=creditRequestor partnerRole=creditService/> </partners>

Purchase Process WSDL:


<slt:serviceLinkType name=purchaseSLT> <slt:role name=purchaseService> <slt:portType name=tns:purchasePT/> </slt:role> </slt:serviceLinkType>

Purchase Process PortType:


<portType name=purchasePT> <operation name="sendPurchase"> </operation> </portType>

Variables
Messages sent and received from partners

Persisted for long running interactions Defined in WSDL types and messages
Process

Customer Service

<variable> <activity> <activity> <variable>

<A>
Persist/ Retrieve

<B>
Persist/ Retrieve Persist/ Retrieve

Customer Service

Persist

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>

How is Data Manipulation Done?


Using <assign> and <copy>, data can be copied and manipulated between variables <copy> supports XPath queries to sub-select data
<assign> <copy> <from variable="PO" part="customerInfo"/> <to variable=creditRequest part="customerInfo"/> </copy> </assign>

Simple Activities
Receive

Wait for a partner inbound message Can be the instantiator of the business process Synchronous response to a receive activity Response to the inbound receive from a partner Issue a request synchronously *or* asynchronously Specify an inbound set of messages Can be the instantiator of the business process Activity completes when one of the messages arrives

Reply

Invoke

Pick

Simple Activities Combined with Structured Activities


Receive <PO>
<sequence>

Invoke <InventoryService>

Invoke <CreditService>

<flow>

Reply <Invoice>

</sequence>

Sample Activities in BPEL


<sequence> <receive partner=customer portType=lns:purchaseOrderPT" operation=sendPurchaseOrder variable=PO createInstance="yes" /> <flow> <invoke partner=inventoryChecker portType=lns:inventoryPT operation="checkINV" inputVariable="inventoryRequest" outputVariable="inventoryResponse" /> <invoke partner="creditChecker" portType=lns:creditPT" operation="checkCRED" inputVariable="creditRequest" outputVariable="creditResponse" /> </flow> ... <reply partner=customer portType=lns:purchaseOrderPT operation=sendPurchaseOrder variable=invoice"/> </sequence>

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 partner="D"> <target linkName="CtoD"/> </invoke> </flow>

<flow> <X> <A>


<link XtoY>

<B> <Y> <C> <E> </flow> <D>

<link CtoD>

Correlation
PO

initiate=yes

Correlation: <PO_CustId = 10> <PO_OrdId = 100>

initiate=yes

Customer
SendPurchase ProcessPurchaseResponse

Seller
AsynchPurchase

POResponse Correlations: <PO_CustId = 10> <PO_OrdId = 100>

AsynchPurchaseResponse

initiate=no initiate=yes

initiate=no pattern=out

<Inv_VendId = 20> <Inv_InvId = 200> initiate=yes pattern=out

Correlations in BPEL
<correlationSets> <correlationSet name="POCorr" properties="cor:custId cor:ordId"/> <correlationSet name="InvoiceCorr" properties="cor:vendId cor:invId"/> </correlationSets> ... <receive partner=Customer portType="SP:PurchaseOrderPT" operation="AsynchPurchase" variable="PO"> <correlations> <correlation set="POCorr" initiate="yes"> </correlations> </receive> ... <invoke partner=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> ...

Scopes in BPEL
<scope

Provide a shared context for subset of activities Can contain

variableAccessSerializable="yes|no
...>

<variables> </variables> <correlationSets>? ... </correlationSets> <faultHandlers> </faultHandlers> <compensationHandler>? ... </compensationHandler> <eventHandlers> </eventHandlers> (activities)*

fault handlers event handlers, compensation handler variables correlation sets

Can serialize concurrent access to variables

</scope>

Long Running Transactions and Compensation


<scope> Charge Hold Fee CreditService CheckCredit ChargeHoldFee CancelHoldFee

Undo

InventoryService Reserve Inventory Undo </scope> ReserveInventory CancelReserveInv

Compensation Handlers in BPEL


<scope> <compensationHandler> <invoke partner="Seller" portType="SP:Purchasing" operation="CancelPurchase" inputVariable="getResponse" outputVariable="getConfirmation"> <correlations> <correlation set="PurchaseOrder" pattern="out"/> </correlations> </invoke> </compensationHandler> <invoke partner="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 partner="customer" portType="lns:purchaseOrderPT" operation="sendPurchaseOrder" variable="POFault" faultName="cannotCompleteOrder"/> </catch> </faultHandlers>

Just Show Me How to Do it!


Process WSDL Partner WSDL 1 Compiled BPEL Scenario

BPEL Scenario
<process> <partners> <variables> <sequence> <flow> </sequence> </process>

1. Compile 2. Package 3. Deploy

BPEL Runtime Application Server

...
Partner WSDL n

Tooling Requirements
IDE build your Web services WSDL authoring model your interfaces Schema authoring model your messages Process modeling model your orchestration Packaging and deployment Debugging Monitoring Analyzing

D E M O N S T R A T I O N

Building a BPEL Scenario

What Happened to Java?


JSR 207 - Process Definition Language for Java Make business processes natural for Java programmers
Process Definition for Java Servlet
Transactions Messaging Security

EJB
Naming Pooling

Application Server
Based on JSR 207 Session at JavaOne 2003

What Happened to J2EE?


JSR 208 Java Business Integration Make business processes a first class citizen in J2EE containers
BPEL Engine Transform Engine Routing Engine ...
JSR 208 Machine SPI

Normalized Message Bus Binding Framework EDI JCA Web Services JMS JSR 208 Binding SPI

...

Based on JSR 208 Session at JavaOne 2003

Oracles Strategy
Oracle Application Server Containers for J2EE BPEL runtime Oracle JDeveloper BPEL design time Oracle Application Server Integration Web service, B2B and EAI integration

Remember BPEL Does Not Solve World Hunger


No data transformation No data translation (EDI, binary formats ) No human workflow No trading partner agreements Silent on existing business protocols (ebXML, RosettaNet ) Silent on non Web service interactions (e.g. java to java)

...

But Remember: People Are Trying to Solve World Hunger


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

Parting Thoughts
Business process portability?

Java/J2EE is portable across application servers BPEL is portable independent of Java

Programming language in XML?

Does this hurt? Vendors, big and small, are busy building modellers
Much missing but compelling foundation

Is BPEL in 2003/2004 J2EE in 1998?

Next Steps.
Recommended sessions

36811 - Application Integration using Web Services 40053 - Develop, Deploy, and Manage Web Services with Oracle Application Server 10g DemoGrounds: See the Web Services Booth Hands On: Developing and Deploying Enterprise Web Services with Oracle Application Server 10g Visit the DEMOgrounds for a customized architectural review, see a customized demo with Solutions Factory, or receive a personalized proposal. Visit the DEMOgrounds for more information. http://otn.oracle.com/tech/webservices

Recommended demos and/or hands-on labs


See Your Business in Our Software

Relevant web sites to visit for more information

Reminder please complete the OracleWorld session survey

Session Id : 40024 Thank you.

otn.oracle.com

Join Over 3,000,000 Developers! Free Technical Advice

Free Software Downloads


http://otn.oracle.com

Develop your career with Oracles experts

Web services, Forms Upgrade to the Web, TopLink, Business Intelligence, Integration, J2EE, Linux

Connect with your peers Sign up at


http://otn.oracle.com/events/otnworkshop

QUESTIONS ANSWERS

You might also like