代码之家  ›  专栏  ›  技术社区  ›  Nemi

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

  •  1
  • Nemi  · 技术社区  · 17 年前

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

    在一个事务中,可以引发Hibernate ConstraintVolationException。我捕获所有异常并将它们包装在EJB异常中,如下所示:

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

    我遇到的问题是,当客户端的jboss调用程序对异常进行解组时,会抛出一个ClassNotFoundException(对于psqlException),因为客户端在类路径中没有SQL驱动程序jar。

    我更改了这个应用程序,以总是像这样将捕获的异常传递给EJBexception构造函数,这样我们就可以有一个堆栈跟踪历史记录。现在我正在寻找原始开发人员没有这样做的原因。

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

    1 回复  |  直到 17 年前
        1
  •  2
  •   djna    17 年前

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

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