On the basis of my experience till date I am sharing some of the best practices, for improving performance of a BPEL process. I am not sure how much will these impact the performance but I think the system performance will get improved at least by some milliseconds.
Below are some of the key points which I have explored during my day today tasks.
- We all usually use databases for our configurations like we create a configuration databases and create some tables to store error logs, some name value mappings etc. to avoid hard coding in our code. I have also used the same during my projects, but If we use DVM's (for those records for which there are very less chances to be changed) inspite of database will improve the performance of the BPEL Process, as there is reduction in Partner link call. The Function which we usually use for DVM's is orcl:lookup-dvm().
- Cleanup/Purging of instances from BPEL console and dehydration database at regular Interval of time like we can have the backup of the schema and use Oracle API's to clean up instances in dehydration database.
- There are some XSLT functions, which improve the processing of BPEL processes. Below are some of those.
- Use of "for-each-group" in place of for-each
- Very less use of "if" conditions and use of conditional statements under square brackets "[]"
- One of the important point I have noticed is removal of comments provided in starting of XSLT but then the design view of xsl is not visible.
- For the situations where one for-each condition is been used for multiple mappings, inspite of having similar for-each statement multiple times, use of multiple mapping statements in a single for-each. Like
<xsl:for-each test="">
<A>
<xsl:value-of select="">
</A>
<B>
<xsl:value-of select="">
</B>
</xsl:for-each>
- Use of Assign activities, inspite of Transformation (wherever possible) will also improve the performances. If we use ora:processXSL() function in assign for transformation rather than using transformation activity will improve the performance.
There are many more best practices which will improve the performance, which I will include those later on....