I think the answer to this question has to be no -- you have to extract the wrapped exception from the remote exception even if the exception thrown extends RemoteException. It's a little annoying but not the end of the world. Don't assume that this is the gospel truth by any means: it's just what I've observed in my experience.
You should *not* extend RuntimeException. Your app exceptions should descend from Exception or any other non-runtime exception you wish.
If you exception extends RuntimeException, it will be wrapped in a EJBException and the client will be unable to catch it.
When I tried to create application exception , the container did not catch the exception and roll back the transaction. As I looked at the code , the container catch only Runtime and Remote exception.
That's because the container behaves according to the EJB spec! An application exception should not automatically lead to a rollback. If you want your bean to do so you have to explicitly set the rollbackOnly flag.