EAR / WAR使用哪种JRE

时间:2015-02-11 14:13:56

标签: java tomcat websphere war ear

如果它是一个菜鸟问题,请原谅我。

我正在使用IBM工具开发Java应用程序。在项目中,我使用了IBM JRE提供的某些类。 据我所知,IBM提供了自己的JDK(不同于Sun / Oracle JDK),它与Websphere服务器和RAD捆绑在一起。

考虑使用RAD / Websphere和JRE(包含在IBM的JDK中)开发应用程序,并在Websphere服务器中部署EAR文件。

在这种情况下,应用程序是否会在Websphere服务器中查找JRE(它首先有自己的JRE吗?)用于部署还是会使用系统JRE?

如果它使用系统JRE,它将引起关注,因为大多数用户系统运行Oracle JRE并且我已经使用了Oracle JRE中不存在的某些类。

继续朝这个方向发展,我觉得在Tomcat中部署的WAR文件将使用系统JRE(假设Tomcat没有自己的JRE)。在这种情况下我是对的吗?

对此的任何澄清都会有所帮助。感谢。

3 个答案:

答案 0 :(得分:1)

是的,与WebSphere捆绑的JRE和WebSphere将不使用系统JRE。我相信Tomcat也有自己的JRE,但如果您愿意,可以将其配置为使用其他JRE。

请注意,IBM JRE完全符合Java API,并且编写到API的程序可以移植到其他JRE。但是WebSphere提供了自己的jar文件,而使用WebSphere API的程序可能无法移植到非WebSphere环境。

答案 1 :(得分:1)

我的理解是,从法律上讲,所有JDK在法律上都要求每个许可协议包含相同的类。这就是为什么微软在试图向微软虚拟机添加扩展时失去了诉讼的原因。

话虽如此,我发现在使用IBM Java工具时,如果您在IBM JRE上运行,则应使用与该平台关联的IBM JDK(IBM世界中有多个Java平台。我的经验是IBM Java不能以微妙的方式符合标准Java。

Websphere Application Server(据我所知)是一个Java应用程序本身。你只是部署你的战争和耳朵,它将完成其余的工作。

答案 2 :(得分:1)

生产中的JVM将取决于您的组织或客户组织的布局(基本上由谁决定哪个版本在哪里,运营团队,技术团队,开发团队或其他人)。最后,它应该是项目的非功能性要求之一

所有经过认证的JVM都遵循Oracle的规范。请参阅http://docs.oracle.com/javase/specs/因此,您必须真正使用一些内部API来导致Hotspot和IBM J9之间的可移植性问题。

应用程序服务器和servlet容器通常可以使用不同的JDK版本运行,因为您使用的API不同,或者您的应用程序可能无法在生产环境中启动。例如,您使用Java 8功能,但app服务器使用Java 7运行。应用服务器不会启动WAR / EAR,因为它无法读取类定义。

基于应用程序服务器本身,您无法对JVM的使用进行非常好的推论。确实,所有服务器都具有可以运行的最小JVM版本,但最终版本可能不同。而且,Websphere最有可能与IBM J9一起运行。

还有一点需要注意。大多数情况下,app服务器或servlet容器使用JDK而不仅仅是JRE运行。例如,当您使用JSP(JSP被转换为Java代码然后编译为类文件)时,您需要使用JDK而不仅仅是JRE来进行编译。