Friday, February 3, 2012

Configure Adapter Threads in Oracle SOA 10G

In a separate posting, I mentioned you can configure multiple threads of inbound (polling) adapters of Oracle SOA. However, the ways to configure multiple threads vary between adapters and product versions, and the information scatter across multiple documentations. Hence it is worth to consolidate them here.

This post is for Oracle SOA 10.1.3.x. I have another blog post for configuring adapter threads in Oracle SOA 11G.


1. JMS Adapter
  • For BPEL: Set 'adapter.jms.receive.threads' as activation agent properties in bpel.xml

<activationAgents>
<activationAgent className=“…" partnerLink="MsgQueuePL">
...     <property name="adapter.jms.receive.threads”>5</property>
</activationAgent>
</activationAgents>

  • For OESB 10.1.3.3 onward: Set as endpoint property via JDeveloper (10.1.3.3) or directly at *.esbsvc file


2. AQ Adapter

This blog summarizes the different kind of settings for AQ Adapter threads very well. Let me copy and paste it below:
#### FOR ESB/BPEL 10.1.3.4.x
<property name="adapter.aq.dequeue.threads">NO_OF_THREADS</property>
#### FOR BPEL 10.1.3.3.x
<property name=activationInstances">NO_OF_THREADS<property>
#### FOR ESB 10.1.3.3.x
<endpointProperties>
   <property name="numberOfAqMessageListeners" value="NO_OF_THREADS"/>
</endpointProperties>

3. MQ Adapter

Oracle Support Tech Note How to limit number of threads for reading messages from a queue (Doc ID 1144847.1] describes the details of how to setup the threads for Inbound MQAdapter . Copying here:

There exist a parameter called "InboundThreadCount" which is valid for both 11g and also it is tested on SOA 10.1.3.5, And Confirmed to be working on 10.1.3.4.

To set the parameter, Please add the following to the Inbound MQ Adapter

<jca:operation

ActivationSpec="oracle.tip.adapter.mq.inbound.SyncReqResActivationSpecImpl"
MessageType="REQUEST"
QueueName="INBOUND_QUEUE"
Priority="AS_Q_DEF"
Persistence="AS_Q_DEF"
InboundThreadCount="1"
<==== This parameter 

Expiry="NEVER"
OpaqueSchema="true" >
</jca:operation>




4. Database Adapter

It takes multiple steps to configure database adapter threads.

Step 1: Configure distributed polling. The query in the polling database adapter needs to be a distributed polling in order to avoid data duplication.

To set usesSkipLocking in SOA 10.1.3.x, you must first declare the property in ra.xml, then set the value in oc4j-ra.xml. No re-packaging or redeployment of DbAdapter.rar is needed.

Step 2. Set activationInstances as activation properties at bpel.xml to achieve multiple threads in database adapter.

Note: There is another property called NumberOfThreads. This property is NOT supported in clustered environment or when activationInstances>1 in SOA 10.1.3.x, or even at versions prior to SOA 11.1.1.3.


Step 3. Tune MaxTransactionSize and MaxRaiseSize to throttle the incoming messages along side with activationAgents/NumberOfThreads. These two properties are configured either through the DbAdapter wizard at JDeveloper, or manually directly at the WSDL file of the DbAdapter


5. File/FTP Adapter

File/FTP adapter's has a separation poller thread and processor thread (comparatively, JMS/AQ adapters always use the same thread to poll and process). There is always only one poller thread, while there could be multiple processor threads. In SOA 10.1.3.x, the processor threads are globally shared among File and FTP adapter instances, while in 11G you have an option to configure private processor thread pool per adpater *.jca file.



In SOA 10.1.3.x, the configuration file for you to set the File/FTP adapter processor threads are:
[SOA_HOME]\bpel\system\services\config\pc.properties
[SOA_HOME]\integration\esb\config\pc.properties (need to rename from pc.properties.esb)


The property name is:
oracle.tip.adapter.file.numProcessorThreads=4

If BPEL and ESB co-located at the same OC4J container, the pc.properties for BPEL takes precedence over that of ESB . In such cases, the values set in SOA_HOME\bpel\system\service\config\pc.properties will suffice

7 comments:

  1. Hi Francis,

    A quick question. What is the equivalent of the adapter.jms.receive.timeout parameter in SOA 10g.

    While tuning a AIA2.5/SOA 10g for a customer, I find a lot of SQL/NET Breaks in the AWR reports.
    The AIA tuning guide recommends setting this to 60s in 11g, hence the question for an equivalent.

    Thanks in Advance.

    regards,

    ReplyDelete
    Replies
    1. I assume you are asking for the equivalent in SOA 11G.

      You will be able to find the answer from another blog post of mine: Configure Adapter Threads in SOA 11G

      Delete
    2. Thanks for your response, however I am looking for the equivalent of jms.recieve.timeout ( which is in 11g) parameter in soa 10g.

      I see a lot of SQL Net Breaks in the AWR report and my guess it is probably due to the jms adapter polling the queues continuously. To verify this, I am looking to tune the recieve timeout parameter for the JMS Adapter in SOA 10g.

      Will tuning the inactivity-timeout/wait-timeout parameter in the oc4j-ra.xml help resolve this?

      Awaiting your comment on the same.

      -regards,

      Delete
    3. Pria

      The same adapter.jms.receive.timeout is supported in 10G. I believe the default value is 30 second.

      The minimumDelayBetweenMessages is also supported in 10G.

      Delete
    4. Please do make sure you understand how the receive timeout works. You can refer to the javax.jms.MessageConsumer.receive(long timeout) for more details.

      Delete
  2. This comment has been removed by the author.

    ReplyDelete
  3. Hi Francis,

    I wanted to add a property in FTP adapter jca properties for CharacterSet as value "UTF-8". This I am trying in 10g. But when I am adding this property the operation is failing with the following error. Can you please let me know if CharacterSet property is supported in 10g.

    Error: Property setCharacterSet is not defined for oracle.tip.adapter.ftp.outbound.FTPReadInteractionSpec

    ReplyDelete