Tuesday, September 4, 2012

EAI Siebel Adapter Performance Tuning


We are not going to discuss EAI Siebel Adapter methods. Lot of blogs have beautifully explained this already.

We will highlight a few key points which can tremendously improve performance of Siebel EAI Adapter.

Point 1

While sending messages through EAI workflow, in most of the cases, the first step of workflow uses “EAI Siebel Adapter Business Service” Query Method to retrieve the message that needs to be sent.

There is a hidden input argument which should be set for EAI Siebel Adapter BS to improve performance. Additionally, several times we have received the following  error while fetching large number of records using Siebel EAI Siebel Adapter

“SBL-DAT-00500: There were more rows than could be returned. Please refine your query to bring back fewer rows”

Setting up this input argument overcomes this error. Define the input argument as specified:


Input Argument
Type
Value
ExecutionMode
Literal
ForwardOnly.




Note: But you need to be cautious while using this argument as it will not allow cursor in backward mode. Hence when trying to update the previous record, you might get “End of File Error “

Point 2

Continuing with the above point, there can be a scenario where SearchSpec provided at EAI Siebel Adapter Query method did not fetch any record and hence the output of Siebel Adapter BS in an empty Siebel Message.

In case of an empty message there is no point of executing further steps until and unless logic is defined to populate Siebel message either through data map or other BS such as workflow Utilities or PRM ANI Utility Service. (Check previous blog to check how to do that).

So to avoid further execution of steps we should be using output argument “NumOutputObjects” of EAI Siebel Adapter along with the decision box.

NumOutputObjects is an optional argument which provides the number of records fetched by the query. In case no record is fetched it will be set to 0. Define the following in output arguments of BS.


Ouput Argument
Type
Value
NoOfObjects
Output Argument
NumOutputObjects

Use decision box to validate the value of NumOutputObjects is greater than 0 as shown below:




Point 3

Scenario – We are using MQSeries transport to communicate with an external system. We need to send thousands of contacts created in Siebel at end of day on daily basis to the external system. But sending thousands of contacts in bulk as single message using queue is not preferable as it hits the performance badly.

Hence to overcome this problem we can use the QueryPage Method of EAI Siebel Adapter BS. In this method you can define the number of records that should be fetched in single page by defining the PageSize input argument of BS. Let say I want to send 10 contacts as a single message so I will be defining PageSize to 10.

To send complete message we will be looping through multiple records. It has been effectively explained the following blog:


Point 4

While dealing with complex incoming messages where only part of message needs to be inserted, updated or deleted in Siebel we can use Skipnode and Skiptree to skip the part that should not be processed.

Usually all the entities in messages are treated as per parent Node Operation.

Generally in EAI Siebel Adapter, the child nodes will perform the Parent node operation. We can set the operation as Skipnode in Parent and can perform insert, update and delete in Child node(s).

Example:
<SiebelMessage xmlns="www.acrotrend.com"
  MessageId="Test"
  MessageType="Integration Object"
  IntObjectName="ContactIO"
  IntObjectFormat="Siebel Hierarchical" >
  <ListofContacts>
            <Contacts operation ="skipnode">
                        <ContactId>0078561</ContactId>
                         <ListOfActivities>
                                    <Activity operation ="Insert"></Activity>
                       </ListOfActivities>
                        <ListOfAccounts>
                                    <Account operation ="update"></Account>
                       </ListOfAccounts>
   </Contact>
  </ListofContacts>
</SiebelMessage>


Point 5

A few generic points

1)    Use lighter Integration Object definitions. Only add fields in Integration components which are useful from integration perspective.
2)    In case you need to fetch a single record try providing row_id of the record in PrimaryRowId input argument of EAI Siebel Adapter which improves the performance.
3)    Avoid Integration Object user keys if not needed while inserting or updating the records using EAI Siebel Adapter.

No comments:

Post a Comment