I can't fathom the logic either. I've read the 'self-evident' paragraph in
EJB 3 by Burke and Monson-Haefel many times but am none the wiser.
While I understand that the client transaction context cannot be passed to the MDB, that doesn't seem to be sufficient to allow logic to be applied to deduce that NotSupported and Required are the only options.
NotSupported makes sense given that its transaction scope is not propagated to the target EJB, in this case an MDB.
Supports requires the transaction scope, if one exists, to be propagated - so that can be ruled out.
Required doesn't make sense because if a transaction is active the target EJB executes in this scope - and surely this requires that the transaction scope be propagated?
RequiresNew would seem to be a candidate given that it creates a new transaction scoped to the MDB method, irrespective of the state of the client transaction. But this is not a candidate so my logic somewhere is wrong.
Mandatory can be ruled out on tx ctx propagation grounds.
Never - no tx ctx propagation but still need to know if the client is part of a tx to throw an exception - but isn't this done by the container? Even so, ruled out because it would only ever result in an exception being thrown.
So, NotSupported and RequiresNew seem reasonable to me, but that's wrong (unless there's a typo in the book?)