This week's book giveaway is in the OCAJP 8 forum. We're giving away four copies of OCA Java SE 8 Programmer I Study Guide and have Edward Finegan & Robert Liguori on-line! See this thread for details.
In HFE p.550, it is said hat you always can throw a RemoveException from your ejbRemove() method in case of stateless session bean (even if the client will never see it).
To my sense, because the ejbRemove() method from SessionBean interface doesn't declare the javax.ejb.RemoveException (application exception), you are NEVER allowed to throw a RemoveException in a SessionBean's ejbRemove() method, either a stateless or stateful one.
So to my sense, You only may prevent removal from entity beans because the ejbRemove() method of EntityBean precisely declares javax.ejb.RemoveException...
I've given this a bit thought and can't think why you would want to prevent the deletion of a stateful session bean. A client creates the session and so it would be a bit strange if there was code to prevent it being deleted in the bean class. As the instance can only be used to service that one client which it was created by and no others.
A container might want to prevent the deletion say, if the bean was using BMT and the client was in the middle of a transaction. That's the only reason I could think of that a stateful session bean might not be deleted.