如何将失败情况处理成一个简单的Java应用程序?

时间:2015-02-26 09:43:54

标签: java java-ee exception architecture exception-handling

我是一名Java开发人员,但我还没有很多软件架构方面的经验。

我有以下情况。我正在创建一个批处理应用程序(运行到shell中的命令行应用程序),因此它是从定义到 Main()类中的 main()方法启动的。 / p>

在这个 main()方法中,我创建了一些其他类的对象实例(例如在数据库上执行查询,创建PDF等),因此应用程序可能会失败。

如果应用程序没有失败(一切都按预期进行), main()方法以退出代码= 0 结束。

我希望如果应用程序失败(在任何时候),返回的退出代码为-1

所以现在我不知道如何处理这种情况。

例如,如果进入 main()方法,我会这样:

// Create DAO object:
FatturaDAO fatturaDAO = new FatturaDAO(conn);
listaFatture = fatturaDAO.getListaFatturePDF(partitaIVA);

我在其中创建并使用 DAO 对象。现在考虑一下某些事情失败进入 FatturaDAO 对象的情况(例如连接丢失并抛出异常)。

如何正确处理这种情况?

我有2个想法,但我不知道什么是最佳解决方案:

  1. 我在代码中放了一些try catch块,所以如果出现问题,请进入处理它的 catch 块执行:

    System.exit(-1);
    
  2. 如果出现问题,请进入 catch 块,而不是退出会抛出一个自定义异常,直到执行 main()方法: / p>

    System.exit(-1);
    
  3. 或者我可以用其他更聪明的方式处理这些情况吗?

2 个答案:

答案 0 :(得分:3)

2. If something fail it enter into the catch block that instead of exit 
throws  a custom exception that goes back until the main() method that perform:

如果您正在处理main()中的异常,那么您必须在父级别处理错误处理代码。如果有任何更改,则无需检查其他函数,只需在其他函数上添加through关键字并在main()中处理异常并返回所需类型。

在大多数J2EE应用程序中,我们处理Controller部分而不是DAOService层的异常。当异常发生时,更容易将消息传递给用户。

答案 1 :(得分:1)

在命令行应用程序中,main()方法实际上是UI层。它是一个非常简单的用户界面,但是,如果您构建应用程序以便主类调用控制器层,并且控制器层抛出异常,则应该在main()方法中捕获该异常,并返回正确的"用户值" 0或-1。