First of all, if the container has started the transaction on the receipt of the message, that means that SLSB2 cannot rollback the transaction as it is running under the same transaction context. It can only mark the transaction for rollback (call setRollbackOnly())Consider the sequence of method calls as shown in the following image when a message is received by the MDB. All the beans have container managed transaction demarcation and have 'Required' as the transaction attribute. What will happen if SLSB2 rolls back the transaction?
Secondly, the "correct answer" states:
"The transaction started by the MDB is rolled back and JMS Message redelivery semantics will apply."
The transaction is not started by the MDB, but by the container (otherwise you would have a BMT MDB)
Regards,
Frits