在生产环境中运行哪个Java版本的注意事项


14

有些人掌握了技术的最前沿-更新某些事物的日期。在生产中,这不合适。

研究当前版本(Java 7)是否准备好投入生产会产生大量旧材料,这些旧材料可能不再正确(在撰写本文时,Java 7已经使用了一年半的时间,这似乎已经很长了) 。

为了确定将生产环境升级到更高版本的Java是否合适,我需要考虑哪些因素?


即使是这样,在上述应用程序中使用的任何第三方库/插件(如果有)也需要与Java 7兼容(风险很大)。
arin

2
是。我遇到的唯一问题是我无法在Red Hat Enterprise Linux 4上安装Java 7,但随后该操作系统已过时。我已经在其他任何地方的生产环境中使用它大约6个月了,没有任何问题。
GlenPeterson

@arin:不是Java,不是真的。它倾向于向下兼容。
Michael Borgwardt

理论上,@ MichaelBorgwardt我同意您的观点,但是在测试环境中,即使更新到小版本升级,第三方库也会在我们的测试代码中造成不稳定的行为/崩溃。
arin

@arin:当然可以。但是以我的经验来看,很少有理由害怕更新Java,而不是改变几乎所有其他东西(尤其是自己的代码)。
Michael Borgwardt

Answers:


11

要问的第一个问题是“计算机上是否支持Java版本?” 虽然更新JRE是一回事,但可能是不支持运行新版本的Java(支持的证书和支持合同,以及许多企业环境喜欢的类似文件)来运行底层操作系统。

实际上,许多Java生产环境都在应用程序服务器上运行。这将是下一个考虑因素。 Wikipedia对Java EE App Server的比较显示了受支持的Java EE版本。在Oracle的JavaEE兼容性概述中可以进一步看到这一点。针对JBoss企业应用平台6的经过测试的配置符合Java SE 6.0更新6u30。Java SE 6.0更新6u30也是JBoss Application Server 7.1.0 Final的经过测试的配置。它们可能在Java 7中工作,但是它们不是经过测试的配置。

在应用程序服务器上扩展,有一些实时代码分析工具,用于在事后进行调试。 Omniscient调试器 (另请参见)和Dynatrace是此的两个示例。这些应用程序通过检测(修改)正在运行的Java的实时字节代码来向其报告来工作。由于这些应用程序通过修改字节码工作,因此如果字节码以无法使用的方式(例如在新的JRE中)更改,则它们将无法工作。

接下来是框架。这样的一个例子是java和Spring一起使用的JAXB。更改为Java 7更新的JAXB,生成的代码与某些框架不兼容(这要求它们进行更新,并且它们的依赖项也需要更新...)。

列表旁边是构建工具。需要确保构建环境使用的是正确的Java版本。然后为Java 7编写代码但不更新Maven或Ant使用的版本会引起问题。有时,构建工具本身会与带有特定插件的一个版本紧密联系在一起。

测试工具。诸如PMD,findbug和checkstyle之类的东西可能无法识别Java新版本中的新结构-它们可能与字符串切换语句或复合捕获非常混淆。用于测试的工具(例如代码覆盖率)可能无法在新的JVM中使用。在Java 7的上下文中,Cobertura和Emma尚未更新为新的JRE(同样,这些应用程序修改字节码以查看运行的代码和不运行的代码)(请参见jdk7的开放源代码覆盖库)。这可能需要更改构建脚本才能从一个切换到另一个。

然后是IDE。可能需要将IDE更新到知道该语言新结构的版本。Eclipse 宣布支持Java 7显示了这些问题。

最后,当然同样重要的是开发人员。开发人员应负责编写新代码并了解如何重构代码。从Java 1.4到1.5,引入了模板和注释,开发人员花了一些时间才能了解可用的新结构。同样,这些集合在1.2中进行了重做,使开发人员不再使用HashTable和Vector。更新版本应伴随新语言结构的大量培训。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.