I think it's the best approach.
A supervisor should check DLQ, fix bugs, and send it back to the main queue. You can use jms QueueBrowser to inspect the messages (including message text, jms-id, and ...) in a queue. So you should write a program to list all messages in DLQ. The supervisor should be able to manipulate message text, and send it back to the main queue (delete it from DLQ: consume the message by jms-id, and produce fixed message to the main queue)