EJB 2.0 specification says that RuntimeExceptions should no be thrown across the EJB layer:
Found this in the ejb 2.0 specification (Chapter 18, downloaded from
http://java.sun.com/products/ejb/docs.html 2.0 Final Release Specification):
An application exception class must be a subclass (direct or indirect) of java.lang.Exception.
An application exception class must not be defined as a subclass of the java.lang.RuntimeException,
or of the java.rmi.RemoteException. These are reserved for system exceptions.
(See next subsection).
The Bean Provider is also responsible for using the standard EJB application exceptions
(javax.ejb.CreateException, javax.ejb.RemoveException, javax.ejb.FinderException,
and subclasses thereof) as described in Subsections 10.5.8 and 12.1.8.