Java EE 7 两周岁快乐!它在生产环境中表现如何?

新闻 | Juergen Hoeller | 2015年6月4日 | ...

请注意,有一篇关于Spring 5 系统要求的后续博客文章。如果您主要对 Spring 5 的规划过程感兴趣,可以先从那里开始。

在我们寻求 Java EE 集成的过程中,我们正在积极拥抱最新一代的规范,例如 JPA、Bean Validation 以及当然还有 Servlet 和 JMS API。从 Spring 4 开始,我们并行支持 Java EE 6 和 7 级别规范。我们希望很快将其提升到 EE 7+ 级别(JPA 2.1、Bean Validation 1.1,特别是 Servlet 3.1 和 JMS 2.0),但面临着一个根本问题:**EE 7 平台采用率不足。**

Java EE 7 平台于 2013 年 5 月发布,至今已有两年时间。令人惊讶的是,它在生产环境中几乎找不到。但这其实并不奇怪:虽然期间有一些项目获得了 EE 7 认证,但主要供应商的缺席很明显:还没有主要的 EE 7 服务器提供生产支持,无论是 Web Profile 还是完整平台。截至 2015 年 6 月,常见的 EE 供应商仍在销售基于2009 年时代的 Java EE 6 API的服务器许可证。而且不仅仅是传统的大厂。

  • Tomitribe 为TomEE 1.7提供支持,这是一个基于 Tomcat 7 的 EE 6 Web Profile 堆栈,基于 2009 年时代的 EE 6 API,但至少与 JSR-356 WebSockets 和 JDK 8 兼容。TomEE 7.0(最近从 TomEE 2.0 更名而来)将是一个基于 Tomcat 8 的 Java EE 7 Web Profile 产品,但尚未发布(截至 2015 年 6 月)。
  • Red Hat 最新的支持产品是JBoss EAP 6.4,一个基于 JBoss 7 的 EE 6 堆栈,支持 JSR-356 WebSockets 和 JDK 8。请注意,从 Red Hat 的角度来看,WildFly 是一个研发项目:它提供了频繁的功能发布(对此表示赞赏),但不幸的是没有维护版本或任何形式的生产支持。
  • Oracle 发布了WebLogic 12.1.3,一个 EE 6 服务器,带有一些 EE 7 功能(JPA 2.1、JAX-RS 2.0、JSR-356 WebSockets)和 JDK 8 支持。WebLogic 12.2.1(之前一段时间宣布为 12.1.4)作为完整的 EE 7 服务器仍未发布(截至 2015 年 6 月)。从 Oracle 的角度来看,GlassFish 4 只是一个 RI,WebLogic 是生产升级路径。
  • IBM WebSphere 团队在为WebSphere Liberty Profile(WAS 8.5.5)实现 EE 7 规范方面做得很好,但尚未完成这项工作。至少,某些 EE 7 模块和 JDK 8 已在生产环境中得到支持,作为 Liberty Profile 的一种特性包,WebSphere 的完整 Java EE 7 认证很可能仍将在 2015 年完成。

**最新消息(6 月 9 日):**WAS 8.5.5 的 EE 7 修补程序包将于6 月 26 日正式发布。IBM 干得漂亮!

虽然 EE 7 伞形架构下的几个规范已经看到了个别的采用,例如通过 Hibernate 4.3 采用JPA 2.1,以及通过 Tomcat 8 和 Jetty 9 采用Servlet 3.1 / JSR-356 WebSockets,但可以公平地说,Java EE 7 作为整体平台未能进入市场。毕竟,“平台”的意义在于广泛的主流可用性。具有讽刺意味的是,后来发布的 JDK 8(2014 年 3 月)在生产环境中得到了相当快的采用,甚至在 EE 领域也是如此!因此,截至 2015 年年中,最先进的技术是在生产环境中运行在 JDK 8 上的供应商支持的 Java EE 6 服务器……

**我们的应对措施:**鉴于Spring 4 和 Java 8 的采用率,我们将在 Spring Framework 5 中将最低要求提高到 JDK 8+。但是,由于 Java EE 7 平台采用率不足,我们将不得不保留与当前一代应用服务器的兼容性:允许即将推出的 Spring 5 应用程序部署到生产环境中常见的基于 JDK 8 的 EE 6 服务器 - 就像我们对 Spring 4 所做的那样,但至少可以额外获益于将我们的框架代码库及其所有核心接口迁移到 JDK 8+。

附言(6 月 6 日)

顺便说一句,我真的很感谢GlassFishWildFly作为开源工程。Spring 对两者都提供了专门的支持,并且Undertow HTTP 服务器(在 WildFly 伞形架构下)非常适合与 Spring Boot 进行嵌入式部署。但这并不能改变项目所有者(分别为 Oracle 和 Red Hat)回避对其进行支持的事实,他们选择将投资转向 WebLogic 12 和 JBoss EAP 6 以用于生产目的。来自 Payara(针对 GlassFish)等方面的外部支持只能在一定程度上缓解这种情况,Java EE 市场的大部分仍然绑定到供应商的生产产品(均基于 EE 6)上 - 在 2015 年。

要查找开源项目本身提供的良好生产支持的示例,可以参考Tomcat。Tomcat 项目在修复错误,特别是安全漏洞方面有着令人钦佩的记录,即使是在过去服务器的三代主要版本中也是如此。因此,我并不是在主张商业支持本身,而是在主张像 Tomcat 所做的那样(也敢说:像 Spring 所做的那样)进行适当的维护版本发布,无论是来自开源项目本身还是来自商业支持订阅。例如,WildFly 既没有这些;GlassFish 没有 Oracle 的支持,但至少可以通过 Payara 获得支持选项。

获取 Spring 时事通讯

通过 Spring 时事通讯保持联系

订阅

领先一步

VMware 提供培训和认证,以加速您的进步。

了解更多

获取支持

Tanzu Spring 在一个简单的订阅中提供 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件。

了解更多

即将举行的活动

查看 Spring 社区中所有即将举行的活动。

查看全部