Throwing Error In Response Pipeline Ignores JMS Retry
(Doc ID 2586481.1)
Last updated on SEPTEMBER 16, 2019
Applies to:Oracle Service Bus - Version 220.127.116.11.0 and later
Information in this document applies to any platform.
On : 18.104.22.168.0 version, OSB Transports
Throwing error in response pipeline ignores JMS Retry Redelivery Limit
- a Subscriber is reading request messages from a JMS topic
- in the request pipeline the request message is validated and enriched. If validation or enrichment errors occur, an error is thrown so the JMS message is put back on the original JMS Topic and after max. retries they are put on a queue
- if validation and enrichment in the request pipeline succeeds, a routing to an external backend (SOAP service) is done and a response is received
- we might have the case that the external backend returns an HTTP 200 but the technical error message is returned in the response payload. Therefore we must check in the response pipeline the backend response and if it indicates a temporary problem on backend side, then we have to raise an error so the original JMS message is reput on the JMS Topic and retried later.
So it seems the JMS redelivery options are ignored by the above proxy/pipeline if an error is thrown in the response part of the pipeline.
For the Redelivery Limit retried same behavior on proxy request and proxy response pipeline
1. TestBug/TestBug/TestBugService.proxy : OSB proxy service listening on JMS queue jms://<SERVER_URL>:<SERER_PORT>/weblogic.jms.XAConnectionFactory/<QUEUE_NAME> for messages
2. TestBug/TestBug/TestBugService.pipeline : OSB request/pipeline pipeline that processes the message received by TestBugService.proxy with following logic:
2.1. If the received JMS message contains a JMSType = FAIL_IN_REQUEST_PIPELINE, then the OSB pipeline will throw an error in the request part of the pipeline.
2.2. If the received JMS message contains a JMSType = FAIL_IN_RESPONSE_PIPELINE, then the OSB pipeline will throw an error in the response part of the pipeline.
Note that the proxy only contains 1 activity on which is raising an error using the raiseError Activity
Observed behaviour :
1. If I put a JMS message on the queue <QUEUE_NAME> with JMSType = FAIL_IN_REQUEST_PIPELINE and Delivery Time=3000msec and Redelivery Limit=3, then the JMS message will be redelivered 3 times to the above proxy/pipeline (OK)
2. If I put a JMS message on the queue <QUEUE_NAME> with JMSType = FAIL_IN_RESPONSE_PIPELINE and Delivery Time=3000msec and Redelivery Limit=3, then the JMS message will be redelivered 0 times (NOK).
To view full details, sign in with your My Oracle Support account.
Don't have a My Oracle Support account? Click to get started!
In this Document