在应用程序init上进行必要且充分的验证

时间:2009-10-04 00:53:34

标签: java validation initialization startup

我有一个新的谜题: - )。

我在考虑应用程序应如何处理自己的启动。例如:检查所需的库,正确的版本,数据库连接,数据库兼容性等。具体来说,这是测试用例。我使用SWT和Log4J,原因很明显。现在,问题:

  • 应用应该检查自己是否需要依赖项?如果是,是否应该向用户提供缺少的具体细节?或者只是一条消息,以及日志的详细信息?
  • 如果log4J库不可用怎么办?
  • 测试的最佳选择是什么?验证文件存在(使用file.exists(),在指定的路径上),或加载一个类,比如Class.forName(“org.apache.log4j.Logger”)?什么应该是正确的检查顺序?例如,如果我测试SWT,我不知道logger是否可用,并且当我尝试访问它时会发生错误。向后,如果我测试logger 1st:a)lib可能不可用 - 我无法记录错误; b)SWT可能不可用 - 无法显示用户消息。
  • 我今天发现了apache.commons.lang框架,我发现方法org.apache.commons.lang.SystemUtils.isJavaVersionAtLeast(Float value)非常有用 我相信,还有其他人。但是,为项目导入过多的库不会使其难以维护吗?版本更改,兼容性丢失,例如。一个人无法控制第三方的发展方式或方向。

感谢您的回答。

3 个答案:

答案 0 :(得分:1)

简短的回答是否定的。 JVM在初始化或运行时适当地处理此功能。如果在类路径上找不到所需的类,则抛出ClassNotFoundException。如果找到了一个类,但没有找到必需的方法,则抛出NoSuchMethodException。

答案 1 :(得分:1)

关于1到3,这里有两个主要用例:

  • 应用程序打包由您控制,并且可以确保正确打包所有必需的依赖项。运行时验证在这里没用。
  • 应用程序包装不在您的控制范围内,您可以提供主罐和有关要求的说明。运行时验证可能很有用,但是想要打包应用程序的人通常有足够的技能来理解ClassNotFoundException: org.apache.logging.LogManager的含义。

关于4,只要您保留项目中包含的相同版本的依赖项,就可以保持控制权。升级到更新版本是一个有意识的决定,需要思考和测试。

答案 2 :(得分:1)