Java has two kinds of exceptions:
1. Checked exception: handled from java.lang.Exception but not java.lang.RuntimeException.
2. Unchecked exception: handled from java.lang.RuntimeException thrown by JVM.
EJB has two kinds of exceptions:
1. System Exception : is an unchecked exception produced from java.lang.RuntimeException. An EJBException is an unchecked exception, which is started from java.lang.RuntimeException.
2. Application Exception : is generic to an application and thrown because of violation of business rules. An Application Exception is a checked exception that is either described by the bean developer and does not import java.rmi.RemoteException.
A System Exception is given by the system and is not recoverable. Because the System Exceptions are unpredictable when they occur, the EJB container is the only one responsible for trapping the System Exceptions. The container usually wraps any RuntimeException in RemoteException, which subsequently puts thrown to the caller. In addition to intercepting System Exception the container can give the errors.