| Starting with WebSphere Process Server Version 6.0.1.2, if the number of retries for a SCA destination is to 0 or 1, then during asynchronous invocations using Java™ Message Service (JMS) transport, with the reliability qualifier set to assured, failed events will not be generated in the Failed Event Manager.
While using JMS as a transport, the flow of messages happens as follows:
JMS queue-> MDB for JMS transport-> MDB for SCA -> Target of async invocation The first time a message is processed from the JMS queue, the SCA Message Driven Bean (MDB) is skipped and a synchronous call is made to the target component. This change has been introduced due to performance reasons. In the scenario where the number of retries is set to 0 or 1 for the target component, there is only attempt made to deliver the event, and that one attempt is a synchronous call. Consequently, since the call is synchronous, there will be no failed event captured by WebSphere Process Server that can be re-submitted from the Failed Event Manager. Instead after the single failed attempt, the message is sent to the default exception destination for the bus on which the JMS queue resides. Usually, the setup has the JMS queue configured on the SCA.APPLICATION bus. Hence, the default exception destination for the SCA.APPLICATION bus is where the event is now sent.
The following example illustrates the concept:
Consider an SCA component called SampleComponent, implementing an interface called SampleInterface. Assume that an export for this component is generated with a JMS binding and that the export is called SampleExport. Also, assume that the JMS export is listening to a JMS queue called SampleJMSQueue that resides on the SCA.APPLICATION bus. Messages arriving on this JMS queue will be processed by a Message Driven Bean.
When this module is deployed into a WebSphere Process Server run time, there will also be another Message Driven Bean, created for processing asynchronous requests coming in for any component in the SCA module. Furthermore, during the deployment of the module, the following destinations will be generated on SCA.SYSTEM bus:
sca/ModuleName/component/SampleCommponent for the component and
sca/ModuleName/export/SampleExport for the export.
Now the above flow can be represented as:
SampleJMSQueue -> MDB for JMS Transport ->MDB for SCA ModuleName -> sca/ModuleName/component/SampleComponent (target of the async invocation)
If the number of retries for the destination sca/ModuleName/component/SampleComponent is set to 0 or 1, then the behavior described above will be observed. This will happen even if the reliability qualifier is set to "assured."
Recommendation: In order to generate failed events that can later be processed through the FailedEvent Manager, set the number of retries for the SCA destination to be more than 1. To configure the number of retries, one needs to set the value of "Maximum Failed Deliveries" property for that destination. The default value of this property is 5. |