gpt4 book ai didi

java - 如何以及在何处捕获 j2ee 应用程序中的异常

转载 作者:行者123 更新时间:2023-12-02 00:55:23 25 4
gpt4 key购买 nike

好的,我在一个 j2ee 项目中工作,该项目在存储库中有 2 个分支,我被命令将它们混合在一起。

我正在编码,然后 Netbeans 询问我“未报告的异常 blah bla bla 必须被捕获或声明为抛出”,并让我选择是处理每个异常还是直接抛出它希望其他人捕获。

我正在使用的类(class)是:

DataBase - DataObject - PersonDB(我在这里工作)

DataBase 是 DBMS 的抽象(支持其中的几个)

DataObject只是CRUD,DBMS和java之间的类型转换,以及一些通用性的反射东西,它使用Database作为成员变量

PersonDB 是表中名为 person 的字段到 java 类型的映射,此类扩展了 DataObject

现在在版本1中(只是实际上并行工作的名称)捕获所有产生异常的地方,例如在DataBase类中:

try {
Class.forName(this.driver);
} catch (ClassNotFoundException ex) {
Logger.getLogger(BD.class.getName()).log(Level.SEVERE, null, ex);
}

或者在 DataObject 类中捕获:SQLException、NoSuchFieldException、IllegalArgumentException

现在在版本 2 上,所有这些都留给向上调用者,如下所示:

public BD (String Adriver, String Ahost, String Abase, String Alogin, String Apassword) 
throws java.lang.ClassNotFoundException { ... }

这是解决此类问题的最佳方法,特别是如果我使用 struts

我为我的英语道歉

最佳答案

我要问的第一个问题是:如果这是一个 J2EE 应用程序,那么您要手动加载 JDBC 驱动程序做什么?这就是data sources是为了。

其次,如果你确实需要用点来表示,那么问问自己:这个异常发生的结果是什么?它可恢复吗?或者失败如此严重以至于您的应用程序无法运行?

如果情况如此严重,您的应用程序无法运行,请执行以下操作:

try {
...
} catch (SomeCheckedException e) {
throw new RuntimeException(e);
}

用“throws ...”子句污染你的接口(interface)是没有意义的。

或者,如果它是可恢复或可能可恢复的,那么您确实需要更好地处理它。但很难给出答案。其实这要看具体情况。

例如,如果您以这种方式加载模块/插件,您只需记录插件 XYZ 无法加载(记录异常)并继续。如果这是用户操作的直接结果,您需要以某种方式向用户报告操作失败(并记录错误)等。

关于java - 如何以及在何处捕获 j2ee 应用程序中的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/958754/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com