Handling Exceptions

The exceptions thrown by enterprise beans fall into two categories: system and app.

A system exception indicates a problem with the services that support an app. Examples of these problems include the following: a database connection cannot be obtained, a SQL insert fails because the database is full, or a lookup method cannot find the desired object. If your enterprise bean encounters a system-level problem, it should throw a javax.ejb.EJBException. The container will wrap the EJBException in a RemoteException, which it passes back to the client. Because the EJBException is a subclass of the RuntimeException, you do not have to specify it in the throws clause of the method declaration. If a system exception is thrown, the EJB container might destroy the bean instance. Therefore, a system exception cannot be handled by the bean's client program; it requires intervention by a system administrator.

An app exception signals an error in the business logic of an enterprise bean. There are two types of app exceptions: customized and predefined. A customized exception is one that you've coded yourself, such as the InsufficentBalanceException thrown by the debit business method of the SavingsAccountEJB example. The javax.ejb package includes several predefined exceptions that are designed to handle common problems. For example, an ejbCreate method should throw a CreateException to indicate an invalid input parameter. When an enterprise bean throws an app exception, the container does not wrap it in another exception. The client should be able to handle any app exception it receives.

If a system exception occurs within a transaction, the EJB container rolls back the transaction. However, if an app exception is thrown within a transaction, the container does not roll back the transaction.

Table 5-2 summarizes the exceptions of the javax.ejb package. All of these exceptions are app exceptions, except for the NoSuchEntityException and the EJBException, which are system exceptions.

 

Table 5-2 Exceptions 
Method Name
Exception It Throws
Reason for Throwing
ejbCreate CreateException An input parameter is invalid.
ejbFindByPrimaryKey (and other finder methods that return a single object) ObjectNotFoundException (subclass of FinderException) The database row for the requested entity bean cannot be found.
ejbRemove RemoveException The entity bean's row cannot be deleted from the database.
ejbLoad NoSuchEntityException The database row to be loaded cannot be found.
ejbStore NoSuchEntityException The database row to be updated cannot be found.
(all methods) EJBException A system problem has been encountered.