2015-02-11 60 views
2

如果它是一个noob问题,请对不起。哪个JRE被EAR/WAR使用

我正在开发一个使用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)。在这种情况下,我是对的吗?

对此的任何澄清将有所帮助。谢谢。

回答

1

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

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

+0

Tomcat不运送JRE。 – Stefan 2015-02-11 14:44:48

1

我的理解是,从法律上讲,所有JDK在法律上都要求每个许可协议包含相同的类。这就是为什么当微软试图向微软虚拟机添加扩展时,微软向Sun诉讼的原因。我已经发现,在使用IBM Java工具时,如果您正在IBM JRE上运行,则应该使用与该平台关联的IBM JDK(IBM世界中有多个Java平台)。我的经验是,IBM Java不符合标准Java的微妙方式。

Websphere Application Server(就我所知)是一个Java应用程序本身。你只需部署你的战争和耳朵,剩下的就完成了。

1

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

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

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

基于应用程序服务器本身,您无法对使用哪种JVM做出很好的扣减。确实,所有的服务器都有可以运行的最低JVM版本,但最终版本可能会有所不同。 Websphere很可能与IBM J9一起运行。

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