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
<activationAgents> <activationAgent className=“…" partnerLink="MsgQueuePL"> ... <property name="adapter.jms.receive.threads”>5</property> </activationAgent> </activationAgents>
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 it here:
There exists 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 inversions prior to SOA 184.108.40.206.
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 separate 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 adapater *.jca file.
In SOA 10.1.3.x, the configuration file for you to set the File/FTP adapter processor threads are:
[SOA_HOME]\integration\esb\config\pc.properties (need to rename from pc.properties.esb)
The property name is:
If BPEL and ESB are co-located on 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.