Doing things Parallely
Doing things Conditionally
Doing things in a Loop
Pick and
OnAlarm




Lesson Objectives

nAfter completing this Lesson, you should be able to do the following:
qAdd parallel flows using the Flow activity
qAdd conditional logic using Switch activity
qExecute loops using While activity
qCreating a web service bottom up
qUnderstand the use cases for Events
qHandle events using pick activity
qUsing a wait activity

qAdding OnAlarm branch to a scope


Processing with Parallel Flows

nA parallel flow:
qIs implemented in a BPEL <flow> structure
qContains one or more activity sequences processed concurrently (in parallel)
qEnables synchronization of dependencies between activities

qCompletes when all sequences in the flow are finished



Parallel flows implement processing of concurrent sequences of activities. In BPEL the <flow> element implements the flow structure. The <flow> element may contain one or more activities to be processed simultaneously, that is, in parallel.
Typically, a sequence of activities are processed in parallel. Sequences of concurrent processing are enabled by nesting one or more activities within a <sequence> element, each of which are contained within the flow.Synchronization of activities is realized because the flow does not complete until all activities or sequences of activities are finished processing.

Parallel Flow Example


nCreate a process that takes in a string and returns its translation in French, German and Russian languages.

qFor example, if input is Hello (English), then output is Bonjour in French, Hallo in German
nIt uses a translation service to do the job
n

nHowever, as each of the translations are independent, this can be done parallely


Parallel Flow ExampleCreate a process that takes in a string and returns its translation in French, German and Russian languages.For example, if input is Hello (English), then output is Bonjour in French, Hallo in German and .. in Russian


Creating the Translation Service

nWe want to create a simple web service that takes a string and translates it into another language. 
nThe web service internally uses Google APIs to get the work done.
nThis is an example of creating a web service bottom up – create the implementation first and then generate the WSDL file
nCreate the java file
nThen use New > BusinessTier > Web Services > Java Web Services to create the web service

nDeploy to Application server

Adding a Parallel Flow to the Process

Drag a Flow activity from the Component Palette and drop it into your process

nNote: The flow initially contains two concurrent sequences.




Adding a Parallel Flow to the ProcessThe Component Palette contains a Flow activity. To add and configure a parallel flow in your process:1.  Drag a Flow activity and drop it into the Diagram View. For example drop the flow after the AssignRating activity.2.  Double-click the Flow activity to configure it. In the General tab, change the Name to GetPriceQuote. Click OK.Note: The flow is initially created with two branches. Each branch represents a sequence of activities to be processed in parallel. If you click the blue down-arrow icon, on the left of the diamond shape representing the flow, you can add additional branch sequences to the flow.


Conditional Branching with Switch

nIn BPEL a conditional branch:
qIs implemented by a <switch> element
qConsists of one or more ordered <case> branches, which
nSpecify a condition to be evaluated
nAre processed in their order of appearance, and the first branch with a true condition is processed
nContain a sequence of activities
qMay have one <otherwise> branch, which
nIs processed if all <case> conditions are false
nIs optional

nContains a sequence of activities


Conditional Branching with SwitchA conditional branch is structure used to take different processing paths based on some condition determined by the data values passed between activities in the process.BPEL implements conditional branching with the <switch> element, represented by the Switch activity in the Component Palette. A <switch> element can contain:One or more ordered <case> branches, each with a condition to be evaluated. The first <case> branch returning a true result is processed.Optionally, a <otherwise> branch, which is processed if no <case> branch is processed. If omitted the BPEL logic assumes an empty activity exists for the otherwise branch.In JDeveloper, when you drag a Switch activity from the Component Palette and drop it into the Diagram View the following two conditional branches are created:One <case> branch
An <otherwise> branchYou may add additional <case> branches as needed. Double-clicking the <case> branch allows you to specify a comment and a Boolean expression to be evaluated for the branch. All conditional branches contain a sequence of activities that can be processed when the branch is select for execution.


Adding Conditional Branching Logic



Using While for looping

nDrag a while activity into the process

nSpecify a condition.  As long as condition is true, loop will continue.

Use cases

nI call a process, and expect it to return different kinds of responses
nI call a DocumentService, that can return me either a PurchaseOrder or an Invoice or a Receipt
nI want multiple kinds of messages to be able to initiate my BPEL process.
nI call a asynchronous process, but do not want to wait indefinitely. 

nI want to wait only for a certain amount of time (say 5 minutes)

Hmm..so whats the common pattern?

nRealize that the first two scenarios can be dealt with if I have an option to do different things depending upon the message I receive
nThe third scenario is also similar if I perceive the indication the system sends me when a particular amount of time has passed as a message

nThe common pattern, hence, is event driven processing


Taxonomy of Events

BPEL supports two types of events:
nMessage events are triggered by incoming messages

nAlarm events are time-related and are triggered either after a certain duration or at a specific time.

Pick Activity


nThe Pick activity is an excellent technique to use to implement a Receive activity (wait for a message) with a timeout. This is accomplished by using both of the following:
nAn onMessage branch to receive a specific message from an operation exposed by a service through a PartnerLink
nAn onAlarm branch that implements a wait time
nThe Pick activity terminates when a message or an alarm event occurs, whichever occurs first.

nPick activity can be configured with multiple onMessage and onAlarm branches


Suspending a Process with a Wait Activity



nThe Wait activity pauses for a specified amount of time or until a specified time period.
nWaiting for specified amount of time
q<wait name="Wait_1" for="'PT2M'"/>
qP1Y2M3DT4H5M6S – Wait for 1 year, 2 months, 3 days, 4 hours, 5 minutes and 6 seconds
nWaiting until a certain time

q<wait name="Wait_2" until="'2007-02-28T12:43:59'"/>


Raise the alarm, but still keep waiting



nWhile I want to raise an alarm if the process doesn’t return after certain interval, I still want to wait for the response
nUse the On Alarm branch available to a scope.

nIf any activity in a scope has to wait for more than the time configured in the On Alarm branch, an alarm is raised.

Pick vs OnAlarm

nPick is a activity, OnAlarm is a branch that can be added to any scope

nIn Pick, after the alarm, one of the paths will be chosen.  In OnAlarm, after the alarm, just an alarm is raised, but no other action is done.

Notes

The Oracle BPEL Process Manager uses the open source Quartz Scheduler Library to implement the schedule expiration events for the wait and onAlarm branch of pick activities

Leave a Reply

Subscribe to Posts | Subscribe to Comments

About This Site

Howdy! My name is Suersh Rohan and I am the developer and maintainer of this blog. It mainly consists of my thoughts and opinions on the technologies I learn,use and develop with.
Powered by Blogger.

- Copyright © My Code Snapshots -Metrominimalist- Powered by Blogger - Designed by Suresh Rohan -