清单 5. LoggableEJBException — EJBException 的一个子类
public class LoggableEJBException extends EJBException {
protected boolean isLogged;
protected String uniqueID;
public LoggableEJBException(Exception exc) {
super(exc);
isLogged = false;
uniqueID = ExceptionIDGenerator.getExceptionID();
}
..
..
}
类 LoggableEJBException
有一个指示符标志(isLogged
),用于检查异常是否已经被记录了。每当捕获一个 LoggableEJBException
时,看一下该异常是否已经被记录了(isLogged == false
)。如果 isLogged 为 false,则记录该异常并把标志设置为 true
。
ExceptionIDGenerator
类用当前时间和机器的主机名为异常生成唯一的标识。如果您喜欢,也可以用有想象力的算法来生成这个唯一的标识。如果您在实体 EJB 组件中记录了异常,则这个异常将不会在别的地方被记录。如果您没有记录就在实体 EJB 组件中抛出了 LoggableEJBException
,则这个异常将被记录到会话 EJB 组件中,但不记录到 Web 层中。
清单 6. 使用 LoggableEJBException 的异常处理
try {
OrderHome orderHome = EJBHomeFactory.getInstance().getOrderHome();
Order order = orderHome.findByPrimaryKey(Integer id);
} catch (NamingException ne) {
throw new LoggableEJBException(ne);
} catch (SQLException se) {
throw new LoggableEJBException(se);
} catch (RemoteException re) {
Throwable t = re.detail;
if (t != null && t instanceof Exception) {
throw new LoggableEJBException((Exception) re.detail);
} else {
throw new LoggableEJBException(re);
}
}