An application exception may be a subclass (direct or indirect) of java.lang.Exception (i.e., a �checked exception�), or an application exception class may be defined as a subclass of the java.lang.RuntimeException (an �unchecked exception�). An application exception may not be a subclass of the java.rmi.RemoteException. The java.rmi.RemoteException and its subclasses are reserved for system exceptions.
So, I think that a subclass of EJBException annotated as ApplicationExcetion will be an application exception.
But I've just tested it with my JBoss. I have created this Bean:
And the exception:
When it extends Exception, I don't see the destroy in the console. --> It's an application exception
When it extends EJBException appears a "[STDOUT] Destroyed". --> It's a system exception.
So, the theory says that you can extends EJBException but the reality shows that it's not true.