There are 15 concurrent sessions by default, see standardjboss.xml
Waiting 10-20 seconds will just block one of these.
From jboss-3.2.2 you can do scheduled redelivery when
you send the message.
But this won't help you much since all that will happen is
the next message in the queue will fail.
You really need to do some system level processing
for this. Where once you detect a failure you suspend
delivery of the mdb and go on a retry loop waiting for
your destination to come back.
There is a container transcation timeout of 5 (?) minutes set by the transaction manager. Thus, you shouldn't be inside the onMessage() method for more than 5 minutes. This can be increased. I think what happens if you go over the time limit is that the container will attempt to roll back the transaction. If you have already posted your SOAP message, then you will probably send another as JBoss will redeliver the JMS message.