Ronald van Luttikhuizen - Effective fault handling in SOA Suite and OSB 11g

45
1 | x Effective Fault Handling in Oracle SOA Suite 11g Ronald van Luttikhuizen [Vennster] Guido Schmutz [Trivadis] 1-Oct-2012 | Oracle OpenWorld & JavaOne

description

De presentatie die Ronald van Luttikhuizen tijdens de Oracle OpenWorld Preview sessie bij AMIS heeft verzorgd.

Transcript of Ronald van Luttikhuizen - Effective fault handling in SOA Suite and OSB 11g

Page 1: Ronald van Luttikhuizen - Effective fault handling in SOA Suite and OSB 11g

1 | x

Effective Fault Handling in

Oracle SOA Suite 11g

Ronald van Luttikhuizen [Vennster]

Guido Schmutz [Trivadis]

1-Oct-2012 | Oracle OpenWorld & JavaOne

Page 2: Ronald van Luttikhuizen - Effective fault handling in SOA Suite and OSB 11g

2 | x

Guido Schmutz

• Working for Trivadis for more than 15 years

• Oracle ACE Director for Fusion Middleware and SOA

• Co-Author of different books

• Consultant, Trainer, Software Architect for Java, Oracle, SOA and EDA

• Member of Trivadis Architecture Board

• Technology Manager @ Trivadis

• More than 20 years of software development experience

• Contact: [email protected]

• Blog: http://guidoschmutz.wordpress.com

• Twitter: gschmutz

Page 3: Ronald van Luttikhuizen - Effective fault handling in SOA Suite and OSB 11g

3 | x

Ronald van Luttikhuizen

• Managing Partner at Vennster

• Oracle ACE Director for Fusion Middleware and SOA

• Author of different articles, co-author Oracle SOA Book 11g book

• Upcoming book SOA Made Simple

• Architect, consultant, trainer for Oracle, SOA, EDA, Java

• More than 10 years of software development and architecture

experience

• Contact: [email protected]

• Blog: blog.vennster.nl

• Twitter: rluttikhuizen

Page 4: Ronald van Luttikhuizen - Effective fault handling in SOA Suite and OSB 11g

4 | x

Agenda

1. What is Fault Handling ?

2. Fault Handling in SOA vs. traditional systems

3. Scenario and Patterns

4. Implementation of Scenario

5. Summary and Best Practices

Page 5: Ronald van Luttikhuizen - Effective fault handling in SOA Suite and OSB 11g

5 | x

Fault Handling

● The goal of every programmer should be to write unbreakable software

● Extent of achievement depends on how good expected and unexpected exception conditions are handled and managed

● Object-oriented languages such as C++ and Java provide an efficient way for handling exceptions using constructs such as try, catch, and finally

● With a SOA, most of what is available at language level is still valid and usable

● SOA raises different challenges once starting orchestrating services and creating composite applications

● Prevention vs. handling

Page 6: Ronald van Luttikhuizen - Effective fault handling in SOA Suite and OSB 11g

6 | x

What is a Fault ?

● Something happened outside normal operational activity or

“happy flow”

• Technical error

• Programming error

• Faulty operation by user

• Exceptional business behavior

● Prevention and handling

Page 7: Ronald van Luttikhuizen - Effective fault handling in SOA Suite and OSB 11g

7 | x

Two Types of Faults

Business faults ● Faults that service clients can expect and recover from

● Failure to meet a particular business requirement

● Often: expected, business value, contractual and recoverable

Technical faults ● Faults that service clients do not expect and cannot (easily) recover from

● Results of unexpected errors during runtime, e.g. null pointer errors,

resources not available, and so on

● Often: unexpected, technical, implementation and non-recoverable

Page 8: Ronald van Luttikhuizen - Effective fault handling in SOA Suite and OSB 11g

8 | x

Business Fault <wsdl:operation name="orderProduct">

<wsdl:input message="order:OrderProductRequestMessage"/>

<wsdl:output message="order:OrderProductResponseMessage"/>

<wsdl:fault message="order:ProductNotInStockFaultMessage"

name="ProductNotInStockFault"/>

<wsdl:fault message="order:CustomerNotFoundFaultMessage"

name="CustomerNotFoundFault"/>

</wsdl:operation>

<xsd:element name="CustomerNotFoundFaultMessage">

<xsd:complexType>

<xsd:sequence>

<xsd:element name="CustName" type="xsd:string"/>

<xsd:element name="City" type="xsd:string"/>

</xsd:sequence>

</xsd:complexType>

</xsd:element>

2. Fault message payload

1. Service contract including fault

Page 9: Ronald van Luttikhuizen - Effective fault handling in SOA Suite and OSB 11g

9 | x

Business Fault (II) <soap:Envelope>

<soap:Header/>

<soap:Body>

<soap:Fault>

<faultcode>CST-1234</faultcode>

<faultstring>Customer not found</faultstring>

<detail>

<CustomerNotFoundFault>

<CustName>John Doe</CustName>

<City>Long Beach</City>

</CustomerNotFoundFault>

</detail>

</soap:Fault>

</soap:Body>

</soap:Envelope>

3. Actual service response

Page 10: Ronald van Luttikhuizen - Effective fault handling in SOA Suite and OSB 11g

10 | x

Technical Fault <wsdl:operation name="orderProduct”>

<wsdl:input message="order:OrderProductMessage"/>

<wsdl:output message="order:OrderProductResponseMessage"/>

<wsdl:fault message="order:ProductNotInStockFaultMessage"

name="ProductNotInStockFault"/>

<wsdl:fault message="order:CustomerNotFoundFaultMessage"

name="CustomerNotFoundFault"/>

</wsdl:operation>

<soap:Body>

<soap:Fault>

<faultcode>S:Server</faultcode>

<faultstring>Could not connect to URL 127.0.0.1 on port 8001</faultstring>

</soap:Fault>

</soap:Body>

1. Service contract including fault

2. Actual service response

Page 11: Ronald van Luttikhuizen - Effective fault handling in SOA Suite and OSB 11g

11 | x

Agenda

1. What is Fault Handling ?

2. Fault Handling in SOA vs. traditional systems

3. Scenario and Patterns

4. Implementation of Scenario

5. Summary and Best Practices

Page 12: Ronald van Luttikhuizen - Effective fault handling in SOA Suite and OSB 11g

12 | x

Fault Handling SOA vs. traditional systems

Multiple service consumers

Services part of larger unit

Heterogeneous & external components

Long running processes

Asynchronous

Timed events

Often enterprise-wide

Transactions

ESB

Implemen- tation

Implemen- tation

Implemen- tation

BPM User Interface

External

Page 13: Ronald van Luttikhuizen - Effective fault handling in SOA Suite and OSB 11g

13 | x

Agenda

1. What is Fault Handling ?

2. Fault Handling in SOA vs. traditional systems

3. Scenario and Patterns

4. Implementation of Scenario

5. Summary and Best Practices

Page 14: Ronald van Luttikhuizen - Effective fault handling in SOA Suite and OSB 11g

14 | x

Old System with limited scalability

No 7*24 avail. for single instance of credit card service

Short Network interruptions

Response sometimes get

lost

Not always available

Fault if product is no longer available

Page 15: Ronald van Luttikhuizen - Effective fault handling in SOA Suite and OSB 11g

15 | x

Patterns for Fault Tolerant Software

Compensation

Exception shielding

(Limit) retry

Share the load

Alternative

Exception handler

Heartbeat

Throttling

Page 16: Ronald van Luttikhuizen - Effective fault handling in SOA Suite and OSB 11g

16 | x

Fault Recovery Strategies

● Inaction – Ignore the request

● Balk – Admit failure

● Guarded suspension – Suspend execution until conditions for correct

execution are established

● Provisional action – Pretend to perform the request, but do not

commit until success is granted

● Recovery – Perform an acceptable alternative

Page 17: Ronald van Luttikhuizen - Effective fault handling in SOA Suite and OSB 11g

17 | x

Fault Recovery Strategies

● Rollback – Try to proceed, but on failure, undo the effects of a

failed action

● Retry – Repeatedly attempt a failed action after recovering from

failed attempts

● Appeal to higher authority – Ask someone to apply judgment and

steer the software to an acceptable resolution

● Resign – Minimize damage, write log information, then signal

definite and safe failure

Page 18: Ronald van Luttikhuizen - Effective fault handling in SOA Suite and OSB 11g

18 | x

Agenda

1. What is Fault Handling ?

2. Fault Handling in SOA vs. traditional systems

3. Scenario and Patterns

4. Implementation of Scenario

5. Summary and Best Practices

Page 19: Ronald van Luttikhuizen - Effective fault handling in SOA Suite and OSB 11g

19 | x

Page 20: Ronald van Luttikhuizen - Effective fault handling in SOA Suite and OSB 11g

20 | x

Product Management

Result Caching

Problem

● Not to overload the old, non-scalable product system with the new

demand

Solution

● Use Result Caching to cache the product information (read-only

operation)

● Use Service Throttling to limit the number of concurrent requests

Result Cache

Page 21: Ronald van Luttikhuizen - Effective fault handling in SOA Suite and OSB 11g

21 | x

Product Management

Result Caching

Results are returned from cache rather than always invoking the

external service

● Product data is rather static, so ideal candidate for caching

Product DB

OSB

Proxy Service

Business Service

1

2 3

Result Cache

Page 22: Ronald van Luttikhuizen - Effective fault handling in SOA Suite and OSB 11g

22 | x

Product Management

Service Throttling

Restrict the number of messages on the message flow to a Business

Service

● Set from Operational Settings on the OSB console

OSB

Proxy Service

Business Service

Product DB

Message Buffer

Page 23: Ronald van Luttikhuizen - Effective fault handling in SOA Suite and OSB 11g

23 | x

Credit Card Booking

Retry Configuration

Problem

● Unstable network between us and the external services

Solution

● Use Retry mechanism of OSB to try multiple times

● No Fault Management necessary for service consumer if network

interruption is only for a short time

Retry

Page 24: Ronald van Luttikhuizen - Effective fault handling in SOA Suite and OSB 11g

24 | x

Credit Card Booking

Retry Configuration

Configured on the business service in OSB

Credit Card Service

OSB

Proxy Service

Business Service

1

2 after 2s

5x

Page 25: Ronald van Luttikhuizen - Effective fault handling in SOA Suite and OSB 11g

25 | x

Credit Card Booking

Service Pooling

Problem

● Credit Card Service does not guarantee 7*24 availability for one single instance

Solution

● Use the multiple instances (endpoints) that the company provides and use service pooling feature of OSB

● No Fault Management for the service consumer if at least one endpoint is available

Service Pooling

Page 26: Ronald van Luttikhuizen - Effective fault handling in SOA Suite and OSB 11g

26 | x

Credit Card Booking

Service Pooling

Credit Card Service instance 2

Credit Card Service instance 1

Credit Card Service instance 3 OSB

Proxy Service

Business Service

Page 27: Ronald van Luttikhuizen - Effective fault handling in SOA Suite and OSB 11g

27 | x

Order Management

Transaction configuration

Problem ● Guarantee that the message will be delivered to the order management

system

Solution ● Make sure that queues are available, even if the Handle Order system is not

● Make sure that queuing run’s in the same transaction as the service consumer

Transaction of OSB

Service Consumer

Transaction of OSB

Service Consumer

Page 28: Ronald van Luttikhuizen - Effective fault handling in SOA Suite and OSB 11g

28 | x

Transactions in OSB

Explanation and Demo of Transactions in OSB

Page 29: Ronald van Luttikhuizen - Effective fault handling in SOA Suite and OSB 11g

29 | x

Order Management (II)

Fault Message on Callback Contract

Problem ● Need to return a Product No Longer Available Business Fault over an

Asynchronous MEP

Solution ● Design a separate Fault Message and Operation on the Callback

contract (WSDL) and use that

Fault Message on

Callback Contract

Page 30: Ronald van Luttikhuizen - Effective fault handling in SOA Suite and OSB 11g

30 | x

“Business Fault” modeled as another operation on the Callback WSDL

Order Management (II)

Fault Message on Callback

Page 31: Ronald van Luttikhuizen - Effective fault handling in SOA Suite and OSB 11g

31 | x

Order History

Fault Management Framework

Problem ● Order History System not available should have no impact on

Business Process

Solution ● Use Mediator with Fault Management Framework to configure retry

independent of availability of Order History Web Service

Use Fault Policy Management

In Mediator to configure retry

Page 32: Ronald van Luttikhuizen - Effective fault handling in SOA Suite and OSB 11g

32 | x

Order History

Fault Management Framework

<faultPolicies>

<faultPolicy version="2.0.1" id="OrderProcessFaultPolicy">

<Conditions>

<action ref="RetryAction"/>

</Conditions>

<Actions>

<Action id="RetryAction">

<Retry>

<retryCount>3</retryCount>

<retryInterval>2</retryInterval>

<exponentialBackoff/>

<retryFailureAction ref="HumanInterventionAction"/>

<retrySuccessAction/>

</Retry>

</Action>

</Actions>

</faultPolicy>

</faultPolicies>

<faultPolicyBindings version="2.0.1">

<composite faultPolicy="OrderProcessFaultPolicy"/>

</faultPolicyBindings>

Page 33: Ronald van Luttikhuizen - Effective fault handling in SOA Suite and OSB 11g

33 | x

Order Handling Process

Return errors as synchronous response

Problem

● Both Product Management and Credit Card Booking can

return Business Faults

Solution

● Handle errors and map them to errors returned to the

service consumer (i.e. the caller of the process)

Fault Handling

Fault Handling

Reply with Fault

Page 34: Ronald van Luttikhuizen - Effective fault handling in SOA Suite and OSB 11g

34 | x

Order Handling Process

Return errors as synchronous response

Handle Business Faults in BPEL error handler and reply with an error

Page 35: Ronald van Luttikhuizen - Effective fault handling in SOA Suite and OSB 11g

35 | x

Order Handling Process (II)

Handle missing callback with timeout

Problem

● Order Processing response message can get lost in the Order

Processing system, i.e. the callback message will never

arrive in the process

Solution

● Timeout on the Wait For Answer with a BPEL pick activity

with a timeout

● Undo the process by doing compensation

● Use the BPEL compensate activity together with

compensation handler to undo the Booking of the Credit Card

Pick with timeout

Compensate

Page 36: Ronald van Luttikhuizen - Effective fault handling in SOA Suite and OSB 11g

36 | x

Order Handling Process (II)

Handle missing callback with timeout

Pick Activity for handling callback

message with timeout branch

c

Page 37: Ronald van Luttikhuizen - Effective fault handling in SOA Suite and OSB 11g

37 | x

Order Handling Process (III)

Compensation Handling

Problem

● Order Processing callback message can be a Product No

Longer Available Business Fault

Solution

● Undo the process by doing compensation

● Use the BPEL compensate activity together with

compensation handler to undo the Booking of the

Credit Card

Handle Business

Fault and Compensate

Compensation

Handler

Page 38: Ronald van Luttikhuizen - Effective fault handling in SOA Suite and OSB 11g

38 | x

Order Handling Process (III)

Compensation Handling

Compensate activity invokes compensation

handling on the inner scope

• Can only be invoked from within a fault handler or

another compensation handler

Page 39: Ronald van Luttikhuizen - Effective fault handling in SOA Suite and OSB 11g

39 | x

Order Handling Process (IV)

Non-idempotent operations

Problem

● Credit Card Booking is a non-idempotent operation

Solution

● To avoid BPEL calling the Book Card operation again (not really possible here), we have set the idempotent

Property on the partner link to FALSE

Idempotent

Non-Idempotent

Page 40: Ronald van Luttikhuizen - Effective fault handling in SOA Suite and OSB 11g

40 | x

Problem

● Unexpected (technical) fault

● Multiple processes that deal with unexpected faults in

their own way

Solution

● Use fault handler mechanism to enqueue on error queue

without adding process logic

● Create one process to listen to error queue and handle

faults

● Retrieve process information by using (composite) sensors

Unexpected (technical) error

Order Handling Process (V)

Generic Error Handler w. Fault Policy Framework

Page 41: Ronald van Luttikhuizen - Effective fault handling in SOA Suite and OSB 11g

41 | x

<faultPolicies>

<faultPolicy version="2.0.1" id="GenericFaultPolicy">

<Conditions>

<action ref="GenericAction"/>

</Conditions>

<Actions>

<Action id="GenericAction">

<javaAction className="nl.vennster.GenericHandler“ defaultAction=“HumanIntervention">

<returnValue value="HumanIntervention" ref=" HumanIntervention"/>

</javaAction>

</Action>

</Actions>

</faultPolicy>

</faultPolicies>

<faultPolicyBindings version="2.0.1">

<composite faultPolicy="GenericFaultPolicy"/>

</faultPolicyBindings>

Order Handling Process (V)

Generic Error Handler w. Fault Policy Framework

<property name="oracle.composite.faultPolicyFile">oramds:/apps/fault-policies.xml</property>

<property name="oracle.composite.faultBindingFile">oramds:/apps/fault-bindings.xml</property>

Page 42: Ronald van Luttikhuizen - Effective fault handling in SOA Suite and OSB 11g

42 | x

Order Handling Process (V)

Generic Error Handler w. Fault Policy Framework

Explanation of generic fault handler

Page 43: Ronald van Luttikhuizen - Effective fault handling in SOA Suite and OSB 11g

43 | x

Agenda

1. What is Fault Handling ?

2. Fault Handling in SOA vs. traditional systems

3. Scenario and Patterns

4. Implementation of Scenario

5. Summary and Best Practices

Page 44: Ronald van Luttikhuizen - Effective fault handling in SOA Suite and OSB 11g

44 | x

Summary Issue Solution Product

Overloading product management system ThrottlingResult cache OSB

Credit Card Service does not guarantee 7*24 uptime due to e.g.

network problems

Muliple endpoints

Service pooling

OSB

Guarantee message delivery to order management system Availability of queues

Enqueue and dequeue in service consumer

transaction

OSB (and SOA Suite for XA

propagation to OSB)

Returning business fault over async MEP from order management

system

Separate operation and fault message OSB and SOA Suite (callback

contract between the two)

Order history service not available Retry in Mediator using fault policy framework SOA Suite

Business fault handling from service to process to consumer Catch faults in process and reply fault to

consumer

OSB and SOA Suite (correct

contracts)

Detect missing response message Timeout in pick activity SOA Suite

Handle product no longer available Compensation SOA Suite

Avoid calling credit card booking twice Set non-idempotent property SOA Suite

Processes needing to deal with unexpected technical faults. All

processes solving it in their own way using process logic.

Fault policy frameworks, error queue, generic

error handler, SOA Suite APIs & composite

sensors.

SOA Suite

Page 45: Ronald van Luttikhuizen - Effective fault handling in SOA Suite and OSB 11g

45 | x

Best Practices

● Differentiate between business and technical faults

● Design service contracts with faults in mind: formally describe business faults in

service contracts

● Don’t use exceptions as goto’s

● Design with criticality, likeliness to fail, and cost in mind

● Differentiate fault patterns in OSB and BPM/BPEL

• OSB: Retry, throttling, transaction boundaries

• BPM/BPEL: Compensation, business fault handling, generic fault handler, timeout

● Handle unexpected errors generically

● Make services autonomous

● Fault-handling on scope of services and in wider perspective