From the search for the solution of this issue there are two ways to tackle this problem:
1. Use Singleton property for the inbound endppoint for SOA composite.
To enable this just add singletom property to composite.xml.
<service name="InvoiceXMLReader" ui:wsdlLocation="InvoiceXMLReader.wsdl">
<interface.wsdl interface="http://xmlns.oracle.com/pcbpel/adapter/file/EInvoiceProcessing/InvoiceXMLReader/InvoiceXMLReader#wsdl.interface(Read_ptt)"/>
<binding.jca config="InvoiceXMLReader_file.jca">
<property name="singleton">true</property>
</binding.jca>
</service>
2. To use HAFielAdapter for File Adapter.
Thus in the .jca fiel change to use eis/HAFileAdapter instead of eis/FileAdapter.
<adapter-config name="InvoiceXMLReader" adapter="File Adapter" wsdlLocation="InvoiceXMLReader.wsdl" xmlns="http://platform.integration.oracle/blocks/adapter/fw/metadata">
<connection-factory UIexcludeWildcard="*.tif;*.lock" location="eis/HAFileAdapter" UIincludeWildcard="*.*"/>
<endpoint-activation portType="Read_ptt" operation="Read">
<activation-spec className="oracle.tip.adapter.file.inbound.FileActivationSpec">
<property name="DeleteFile" value="false"/>
<property name="MinimumAge" value="0"/>
<property name="PhysicalDirectory" value="/u01/shared/einvoice"/>
<property name="Recursive" value="true"/>
<property name="PollingFrequency" value="10"/>
<property name="IncludeFiles" value=".*\..*"/>
<property name="UseHeaders" value="false"/>
<property name="ExcludeFiles" value=".*\.tif;.*\.lock"/>
</activation-spec>
</endpoint-activation>
</adapter-config>
Behind HAFileAdapter is the database used as mutex to ensure the one file is only handled by one instance. By default it uses jdbc/SOADataSource. When using HAFileAdapter in OSB this jdbc/SOADataSource should also target the OSB server nodes as well.
This also invovles some configuration changes for File Adapter. You need to set Deployments->File Adapter->Configuration->Outbound Connection Pools->javax.resource.cci.ConnectionFactory->eisHAFileAdapter->controlDir to some shared localtion.
To my understanding the first way is to force to seralize the inbound file processing, which means only one File Adapter is processing a file at one time. HAFileAdapter is using some mutex to ensure one file is only processed by one FileAdapter instance. But the multiple HAFileAdapter can process the different file at the same time. So this is the real solution for high availability environment.
what about JMS is it the same??
ReplyDelete@Raja....visit this link for JMS adapter configuration in cluster env
Deletehttp://blog.raastech.com/2012/07/understanding-singleton-property-with.html
Great insights into configuring the File Adapter in an Oracle SOA 11g cluster environment! For those working with containerized services, Ambition Host is an excellent tool to manage local Docker environments, making it easier to replicate and test complex cluster setups without any hassle.
ReplyDelete