Why Dehydration
- Long running process or processes waiting for response consumes memory and CPU
- While waiting for the response the bpel engine can store the process, thus freeing up server resources.
- Over the life cycle of the BPEL instance, the instance with the current state of execution may be saved in database.
Dehydration
- Storing the current status of the BPEL process(i.e. long running
process, asynchronous process) into the database tables is known as
dehydration
- SOA_INFRA schema is the dehydration store which contains tables to hold the meta data of the process.
- Synchronous Process
– Process gets dehydrated only at the end of the process.
– Using Dehydrate activity we can explicitly dehydrate process state if required.
– Automatically dehydrated the process based on the activities used.
Dehydrate Activities
- Few activities causes the BPEL instances to be dehydrated
- If the process is dehydrated, then transaction ends and a new transaction is started once the bpel process resumes.
- Dehydration activities:
Wait
Dehydrate(11g) / Checkpoint(10g)
Receive(without create instance)
Commit(Java embedded)
Pick
Invoke(nonBlocking property set on PL)
Non-idempotent activity(Invoke, receive) is encountered.
Types of BPEL Process
When and how dehydration occurs differ based on process types. Based
on the dehydration we can categorize process in to 2 categories
- Transient Process: Oracle BPEL server dehydrates
the process instance only at the end of the process. If server crashes
in middle of the running process instance, the instances will not be
visible in EM
- Durable Process: Oracle BPEL Server dehydrates the
process instance in-flight at all midprocess breakpoint and
non-idempotent activities, plus the end of the process. When the server
crashes, this process instance appears in Oracle BPEL Control up to the
last dehydration point (breakpoint activity) once the server restarts.
If the server crashes before the process instance reaches the first
midprocess breakpoint activity, the instance is not visible in Oracle
BPEL Control after the server restarts.
When Dehydration Occur
- When the BPEL instance encounters a mid-process breakpoint activity (not including the initial receive).
Activities like wait, receive, pick, call to an async WSDL
That is where an existing BPEL instance must wait for an event, which
can be either a timer expiration or message arrival. When the event
occurs (the alarm expires or the message arrives), the instance is
loaded from the dehydration store and execution is resumed. This type of
dehydration occurs only in
durable processes, which have mid-process breakpoint activities. A transient process does not have any mid process breakpoint activities.
- When the BPEL instance encounters a non-idempotent activity
When Oracle BPEL Server recovers after a crash, it retries the
activities in the process instance. However, it should only retry the
idempotent activities. Therefore, when Oracle BPEL Server encounters a
non-idempotent activity, it dehydrates it. This enables Oracle BPEL
Server to memorize that this activity was performed once and is not
performed again when Oracle BPEL Server recovers from a crash.
Idempotent activities are those activities where the result is the same irrespective of no. of times you execute the process.
Repeated invocations have the same effect as one invocation.
E.g. Read only services, Receive activity
- When the BPEL instance finishes
At the end of the BPEL process, Oracle BPEL Server saves the process
instance to the dehydration store, unless you explicitly configure it
not to do so. This happens to both durable and transient processes.
Note: A BPEL invoke activity is by default (true) an idempotent
activity, meaning that the BPEL process does not dehydrate instances
immediately after invoke activities. Therefore, if idempotent is set to
true and Oracle BPEL Server fails right after an invoke activity
executes, Oracle BPEL Server performs the invoke again after restarting.
This is because no record exists that the invoke activity has executed.
This property is applicable to both durable and transient processes. If
idempotent is set to false, the invoke activity is dehydrated
immediately after execution and recorded in the dehydration store. If
Oracle BPEL Server then fails and is restarted, the invoke activity is
not repeated, because Oracle BPEL Process Manager sees that the invoke
already executed.
Skipping dehydration
Dehydration Tables
- Cube_Instance: Stores the information about the composite instance that gets created.
- Cube_scope: Stores information about the scopes and variables declared and used.
- DLV_Message: All the incoming payload details are stored.
- Invoke_Message: All the outgoing message payload details are stored.
- Audit_Trail: Used to store information of the xml that is rendered in EM console.