我有一些使用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中的异常?
答案 0 :(得分:2)
我的看法是客户端,最终用户不需要知道问题的技术细节。因此,在不同的层边界,将技术异常转换为一般性的“自然误差XYZ”是非常合理的。
我见过的方案是服务器在检测到异常时分配唯一的错误号。然后它将诊断程序写入其日志,包括该数字。向客户报告的消息只包含该号码。然后,支持人员可以通过该特定错误号将用户的问题报告关联起来。