I think it would be best to use transactions everywhere it's needed.
In general your dao's should have transaction required.
That way a transaction started in a stateless sessionbean is a whole
unit encompassing the different calls to daos and or jms.
The only requirement for this to work is that you'll need two-phase commit
for all transactional resources taking part in the transaction.
All you have to do is define the transaction in the deployment descriptor.
(Or spring context if u're using spring).
Whatever you do don't code your transactions. It's not recommended. Sometimes just adding another method (with a different transaction propagation setting) to your sessionbean and calling it will end up the same as coding it. I sure hope you have the option of doing that else you'll be in for some pain...