Friday, 3 May 2013

BPEL Persistence Properties – 11g

BPEL Persistance properties are used to control, when a process need to dehydrate. Below are the properties which we can use to control it for BPEL Component in a Composite.
inMemoryOptimization
This property indicates to Oracle BPEL Server that this process is a transient process and dehydration of the instance is not required. When set to true, Oracle BPEL Server keeps the instances of this process in memory only during the course of execution. This property can only be set to true for transient processes (process type does not incur any intermediate dehydration points during execution).
  • false (default): instances are persisted completely and recorded in the dehydration store database for a synchronous BPEL process.
  • true: Oracle BPEL Process Manager keeps instances in memory only.
completionPersistPolicy
This property controls if and when to persist instances. If an instance is not saved, it does not appear in Oracle BPEL Console. This property is applicable to transient BPEL processes (process type does not incur any intermediate dehydration points during execution).
This property is only used when inMemoryOptimization is set to true.
This parameter strongly impacts the amount of data stored in the database (in particular, the cube_instance, cube_scope, and work_item tables). It can also impact throughput.
  • on (default): The completed instance is saved normally.
  • deferred: The completed instance is saved, but with a different thread and in another transaction, If a server fails, some instances may not be saved.
  • faulted: Only the faulted instances are saved.
  • off: No instances of this process are saved.
<component name="mybpelproc">
...
<property name="bpel.config.completionPersistPolicy">faulted</property>
<property name="bpel.config.inMemoryOptimization">true</property>
...
</component>

oneWayDeliveryPolicy
This property controls database persistence of messages entering Oracle BPEL Server. Its used when we need to have a sync-type call based on a one way operation. This is mainly used when we need to make an adapter synchronous to the BPEL Process.
By default, incoming requests are saved in the following delivery service database tables: dlv_message
  • async.persist: Messages are persisted in the database.
  • sync.cache: Messages are stored in memory.
  • sync: Direct invocation occurs on the same thread.
<component name="UnitOfOrderConsumerBPELProcess">
...
<property name="bpel.config.transaction" >required</property>
<property name="bpel.config.oneWayDeliveryPolicy">sync</property>
...
</component>

General Recommendations:
1. If your Synchronous process exceed, say 1000 instances per hour, then its better to set inMemoryOptimization to true and completionPersistPolicy to faulted, So that we can get better throughput, only faulted instances gets dehydrated in the database, its goes easy on the purge (purging historical instance data from database)
2. Do not include any settings to persist your process such as (Dehydrate, mid process receive, wait or Onmessage)
3. Have good logging on your BPEL Process, so that you can see log messages in the diagnostic log files for troubleshooting.

3 comments:

  1. This comment has been removed by the author.

    ReplyDelete
  2. Hi Sir,

    I am dealing with a scenario where i have to interact with some web service which entertain XML argument input and return XML output only,(my service is on weblogic and the service which i am trying to call is on glassfish)
    ----------------------------------------------------------------------------------------------------------------------------------------------
    example:- my BPEL's inputs and outputs corresponding webservice inputs and outputs are like.

    @ BPEL input and outputs
    ---------------------------------------------
    *Input to my BPEL-->>
    request ---username type "string"
    ---password type "string"


    *output from my BPEL-->>
    response ---status type=" string"
    ---code type ="string"



    @ the webservice which i am trying to call: input and outputs

    inputXML


    outputXML
    ----------------------------------------------------------------------------------------------------------------------------------------------
    the reference side have only one input i.e input XML.. and also after successful login it should give out the response in such a format so that my BPEL can interact with that so until and unless i did not found a solution to convert my input to the BPEL (input xsd) to XML i will not able to do so .I have tried the following -- Using the XPath function-- ora:parseEscapedXML() to take an XML string and convert it to DOM format for processing in BPEL but getting Xpath error. Please Please help me out if you have any solutions.

    #Secondly
    To escape the above deadlock we place a wrapper layer between both the service my services are running on weblogic and the service which i am trying to call is on glassfish ,with this approach we are Successfully hitting the service but not getting any response but instead getting error-----"error getting response;java.net.SocketTimeoutException:Read timed in weblogic" please help me out if you have any solutions..

    Thanks and Regards
    Abhishek Ajral

    ReplyDelete
  3. I simply study your remark such a totally exceptional. Thank you for posting this blog. The main on-line education supplier gives several courses at the numerous technical platform.
    thank regards
    Oracle Fusion cloud procurement Online Training
    Oracle Fusion cloud procurement Online Training

    ReplyDelete