领先一步
VMware 提供培训和认证,以加速您的进步。
了解更多请注意,还有一篇关于 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 的服务器的许可证。 而且不仅仅是传统的嫌疑人。
最新消息(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 日)
顺便说一句,我真的很欣赏 GlassFish 和 WildFly 作为开源工程的努力。 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 获得支持选项。