领先一步
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 获得支持选项。