Have you read pages 174-178 in the
EJB 2.0 specification?
Why? - because the specification says so.
Why would they specify the required behaviour this way? - I would have to guess the answer.
Why can't you specify a transaction attribute on ejbLoad, ejbStore, and ejbRemove?
Again I'm guessing. I think that a transaction attribute on those methods would be to constraining.
ejbRemove is invoked when remove is invoked via the Component or Home interface - so it makes sense that it would execute in the transaction context as specified by the transaction attributes on those methods.
ejbLoad would get invoked whenever a business method is invoked to ensure that the bean has up-to-date data - all these business methods may have different transaction attributes specified - so the ejbLoad is much more "reusable" if it simply takes the context of the invoking method rather than trying to impose its own.
ejbSelect can be used by different business methods or home business methods - so this case is similar to ejbLoad.
Also note that all three methods access the underlying persistent store.