Hello all,
I have some custom JMS java code (why I need to do this in the first place is another story) which I would like to submit to Monitor for retry. The aim of the exercise is remove ‘bad messages’ from a JMS queue and log them in Monitor so that they can be viewed/retried/deleted. I do not want the JMS queue clogged with bad messages, but i do not want to throw them away either.
The hard part is that I want to do this from java code and I cannot find a WmMonitor flow service which will do this. Some more facts:
- I have a broker document type (which will wrap JMS payload) that I can submit to Monitor
- I do not want to use TN for this (as per a related thread on this issue) because I want ability to resumit services, documents and process models from a single place.
Anyone know of a way to log things to Monitor programmatically ?
Why can’t you just do the following:
- Have a service that retrieves the messages from the JMS queue
- This service then passes the message to a Flow service which is setup to log On Errors and Include Pipeline On Errors Only
- If the message retrieved from the queue is a “bad message”, then the service should EXIT and signals FAILURE (this should cause your message to get logged to the Monitor along with its error message)
- The service that retrieved the message from the JMS queue should not rollback if it gets a bad message error
Percio,
What you suggest is a good idea and would certainly work. Currently I am publishing documents so I would have to reconsider things to try this.
Regards,
Serge
So, after you read the message from the JMS queue, you publish it to the Broker instead of invoking a service to process it?
That should not be a problem. Assuming you subscribe the message from the Broker via a trigger, you can configure your trigger service to do the auditing that I referred to above. You can even go one step further and implement logic to retry the document if the error is transient (ie. by using pub.flow:throwExceptionForRetry) and not retry it if it’s a “bad message” (ie. by using EXIT $flow and signal FAILURE)