Thursday, March 27, 2014

DEHYDRATION IN ORACLE BPEL

Dehydration in Oracle BPEL

Over the life cycle of a BPEL instance, the instance with its current state of execution may be saved in a database. When a BPEL instance is saved to a database, the instance is also known as being dehydrated. The database where the BPEL instance is saved is called a dehydration store.
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.

§  In Synchronous Process
·         Process gets dehydrated only at the end of the process.
·         Using Dehydrate activity we can explicitly dehydrate process state if required.
§  In Asynchronous Process
·         Automatically dehydrated the process based on the activities used.

Why Dehydration Occurs:
·         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.








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)
·         Non-idempotent activity (Invoke, receive) is encountered. 
Types of BPEL Processes:
Oracle BPEL Process Manager uses the dehydration store database to maintain long-running asynchronous processes and their current state information in a database while they wait for asynchronous call-backs. Storing the process in a database preserves the process and prevents any loss of state or reliability if a system shuts down or a network problem occurs. There are two types of processes in Oracle BPEL Process Manager. These processes impact the dehydration store database in different ways.
·         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 mid-process 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 mid-process breakpoint activity, the instance is not visible in Oracle BPEL Control after the server restarts.

An Idempotent Activity:
·         An idempotent activity is an activity that can be retried (or) 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, the assign activity. 
·         A non-idempotent activity is an activity that can happen only once.
The default value of idempotent property is true. By default, in a BPEL process invoke activity is an idempotent activity, It means that the BPEL engine will not dehydrate the instance right after invoke activities. This property can be set for each partner link. If it is set to true and when you invoked a BPEL process and your environment get crashed all of a sudden then when you will restart the system the invoke will be executed again. But when we will set this property to false the BPEL engine will dehydrate the activity after the invoke and when you will start the server it will start from the last saved activity and not from the invoke activity. Thus it will enhance performance.

When Dehydration Occurs:
·         When the BPEL instance encounters a mid-process breakpoint activity (not including the initial receive).
            Activities like wait, receive, pick, and 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 break point activities. A transient process does not have any mid process break-point 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.
·         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.
It can be set within the bpel.xml file.
General syntax is
<partnerLinkBindings>
<property name="idempotent">true</property>
</partnerLinkBinding>
 
Skipping Dehydration:
·        Skipping dehydration will increase performance with a cost of auditing.
·        By Default, all BPEL processes are dehydrated regardless of whether they are Synchronous or Asynchronous process.
·        For Synchronous processes that do not need to be durable, you can turn off the dehydration mechanism by setting the following properties at process or engine level:
·        Set inMemoryOptimization to true.
·        Set completionPersistPolicy property to faulted or Off.
·        Asynchronous process invocation messages are always saved to the dehydration store.
·        Durable processes are always dehydrated regardless of the settings of the persistence properties.

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.




3 comments: