The container rolls back the transaction
because you requested it.
This nacks the message. If this is the only
message it will be immediatley redelivered
by the JMS server.
The container could handle it, but there is
no spec compliant mechanism to tell the
container that the rollback is due to a severe
problem and it should wait or the rollback
is due to a transient problem like a deadlock
detection which can be retried immediately.
The spec doesn't even allow you sleep()
in the MDB.