与我们构建哪个供应商的JDK无关紧要?
如果要使用WebSphere 6.1(Java 1.5)部署到服务器,是否应该在构建框中使用IBM的JDK?还是将Sun的JDK编译为相同的二进制文件?
如果我应该使用IBM的,我在哪里可以获得Windows x64版本?
解决方案
它应该没有任何区别。它可能不是完全相同的二进制文件,而是100%兼容的。我假设我们无论如何都在使用外部库,例如log4j或者冬眠之类的东西,而这些不是使用IBM JDK构建的。
但是,JRE存在差异。例如,我记得当我使用反射列出类的方法或者字段时,IBM JRE曾经以与Sun不同的顺序将它们提供给我。
我将使用与部署应用程序时将使用的JDK相同的JDK(如果我们对此有控制权)。
如果编译器不同,则二进制文件可能会有所不同,但是它们在语义上应该相同。我不知道IBM是否编写了自己的编译器。 JRockit JDK实际上使用Sun编译器,但是JVM不同。因此,对于JRockit,二进制文件是相同的。
如果应用程序在运行时与不同的JDK一起使用,我仍然会使用我们认为大部分时间将在部署时使用的应用程序进行构建,并使用不同的JDK进行一些运行时测试。
它们可以编译为相同的字节码规范,尽管它们可以编译不同的字节码(就像以不同的方式,不同的C编译器生成不同的机器代码一样)。我认为在Mac上运行Java 1.4编译的结果代码,然后将其部署到在PocketPC上运行的IBM J9上没有问题(这在J9可以处理Java 5字节码之前)就不会有任何问题。
无论如何,我绝对会将编译平台放在自述文件上的要点,以便客户端可以查看是否有问题。
或者,我们可以使用ANT进行构建和部署,并将Sun的JDK与ANT一起使用。
除非我们要引用java。和javax。pacakges之外的类(不应这样做),否则使用任何JDK进行编译都不会引起问题。规范可能会导致一些非常奇怪的运行时错误,这些错误很难追查,但根据我的经验,我从未见过。
我建议运行使用目标JRE的任何测试套件,因为供应商之间的运行时行为差异远大于编译语义。
我将尽可能地使开发尽可能接近生产。 Ibm和Sun的JDK当然都满足SDK认证,但是它们绝不是完全相同的。它们的检测和内存管理至少略有不同。如果没有其他问题,JDK中的错误将有所不同,代码只能在一种情况下与另一种情况下发生冲突。它也可能只会在凌晨4点发生,并且在满月时,尤其是在我们陪伴时。
我无法告诉我们从何处获得IBM的jdk,但是如果我们在公司拥有Websphere的许可证,则应该与IBM取得联系以获取指向该JDK的链接。
祝我们好运,并尽可能尝试减少差异。
JDK正在将代码编译为字节码,而不是直接编译为机器代码。期望不同供应商的编译器生成跨供应商兼容的代码。例如,IBM的JDK1.5编译器将生成可在SUN的JDK 1.5及更高版本上运行的代码,而不会出现任何问题。
另一个问题是编译器如何优化字节码,我不知道有些编译器比其他编译器执行更好的优化。优化的最大部分是在运行时由JVM执行的(例如JIT(即时)或者AOT(提前)策略)。
与WebSphere合作已经很长时间了,JDK的版本非常重要。 WebSphere 6.1随IBM JDK 1.5(或者5)一起提供。修补WebSphere时,JDK也具有等效的修补程序。尽管它可以与其他版本的JDK(甚至是其他供应商)一起使用,但是如果出现问题,我怀疑我们会从IBM获得很多支持。
如果我们需要64位JVM,我建议我们可能是64位构建,而我不能特别在Windows上发表评论,我可以告诉我们,对于AIX和Linux,都有64位WebSphere 6.1构建。
最好的答案是与供应商联系,以查看他们是否支持配置。我们不希望做的就是使其正常运行,然后在运行中遇到问题,致电支持并发现环境不受支持。