If you are using DataPower to pull messages from MQ which contains persistent messages, do yourself a favor and set the ‘Units of Work’ on the QM in DP to 1.
This will enable DataPower to use SyncPoints from MQ and allow you transactionality on a per-message basis.
Without this setting, you can get very strange behavior when you want to discard a message. You could see the entire batch of messages re-appear on your input queue.
My theory is that MQ implicitly creates a syncpoint when DataPower connects and one end it disconnects. If it doesn’t get confirmation that all the messages were successfully processed, then the only recourse is for the QM to rollback the transaction, causing all the messages datapower successfully processed to return to the queue.
If you want to have transactional behavior of the DP with MQ you have to use the ‘Units of Work’ parameter set to 1. It is important to also configure the error queues for case when DP will not be able to move the message to the destination queues (for example because of the user rights or it can’t access it) – this can be done either by using QM settings or settings in DP.
Also note, that the transaction will only be supported on one QM. This is DP’s limitation.