in 376 page of spec says:
If the instance called setRollback-Only(), then rollback the transaction, and re-throw AppException. Otherwise, attempt to commit the transaction, and then re-throw AppException.
also a main thing from documentation is :for transaction rolled back exception
This exception indicates that the transaction associated with processing of the request has been rolled back, or marked to roll back.
so in BMT you start a new transaction.the clients transaction is suspended forever..so in BMT calling setRollbackOnly() rollbacks the BMT bean transaction not the request(clients)..so the exception will not be thrown when you call commit.
but for cmt in case of "required" and "mandatory" if clients transactions there and you call setR.. then exception will be thrown.
hope this is clear