正确的EJB异常处理 - 来自客户端的ClassNotFoundException

时间:2009-09-09 17:58:05

标签: java ejb

我有一些使用Hibernate将数据持久化到数据库的EJB。我有一个厚的Swing客户端与这些EJB对话。客户端对数据库一无所知(没有驱动程序jar)。

在一个事务期间,可以抛出Hibernate ConstraintViolationException。我捕获所有异常并将它们包装在EJBException中,如下所示:

catch(HibernateException e) {
    e.printStackTrace();
    throw new EJBException(e);
}

我得到的问题是,当客户端的JBoss Invoker解组异常时,抛出ClassNotFoundException(对于PSQLException),因为客户端在类路径中没有sql驱动程序jar。

我将此应用程序更改为始终将捕获的异常传递给ejbexception构造函数,因此我们可以拥有堆栈跟踪历史记录。现在我发现为什么原始开发人员没有这样做。

此时我看到两个选项 - 要么包含客户端的postgres驱动程序jar,要么删除将捕获的异常传递给EJBException构造函数。我很好奇是否有人有任何其他建议,以及其他人如何处理他们的EJB中的异常?

1 个答案:

答案 0 :(得分:2)

我的看法是客户端,最终用户不需要知道问题的技术细节。因此,在不同的层边界,将技术异常转换为一般性的“自然误差XYZ”是非常合理的。

我见过的方案是服务器在检测到异常时分配唯一的错误号。然后它将诊断程序写入其日志,包括该数字。向客户报告的消息只包含该号码。然后,支持人员可以通过该特定错误号将用户的问题报告关联起来。