Java EE 平台是创建企业应用程序的主要工具之一,这要归功于一系列标准和规范,这些标准和规范的实现使我们能够管理诸如事务、安全性、可伸缩性、并发性和正在部署的组件的管理等关键方面.
与 Spring 和 Pivotal 技术一起,Java EE 代表了现代基于 Java 的企业应用程序在任何类型的部署平台上的实现模型。
如前所述,平台发展的延迟以及因此能够满足与在云环境中实施微服务相关的新要求的新版本的发布在社区中产生了对其使用的不信任感。
我不想引发某种宗教战争,Java EE、Spring 或其他技术被认为是实现现代应用程序的最佳技术。 Java EE 7 是最新的稳定且受支持的版本,于 2013 年发布,得到了社区非常积极的反馈。
Java EE 7 在企业应用生态系统中的相关性非常
Spring 对 Java EE 的影响是显而易见的,并且通过显着降低复杂性来帮助改进平台,例如,通过以下方式:
- The arrival of Spring and Hibernate has provided new ideas and approaches to development, which has given birth to EJB 3 and JPA 1, which represent the two major innovations introduced in Java EE 5.
- Spring Dependency Injection was the base on which Context and Dependency Injection (CDI) was built.
- Spring Batch has merged into JBatch specification (JSR 352 https://www.jcp.org/en/jsr/detail?id=352).
自创建以来,Spring 在开发人员中广受欢迎,这要归功于易于使用的方法和快速的上市时间,这使我们能够快速采用技术创新,例如微服务和云原生应用程序。
相反,Java EE,特别是在版本 5 之后,上市时间较慢;原因与编写规范所需的时间长度以及实施和认证时间有关。通常,规范发布需要几个月的时间才能得到应用服务器的支持和认证。
最近,这个差距扩大了:
- Spring Boot has increased its ease of use through the convention-over-configuration principle.
- Spring Cloud is becoming the major platform used in cloud-native developments by leveraging open source components from Netflix, which creates modules that implement important cloud concepts such as service registry, service discovery, load balancing, monitoring, and so on.
现在的问题可能是——Java EE 仍然是制作微服务和云-原生应用程序的好选择吗?
在我看来,答案是肯定的。
首先,Java EE,尤其是第 8 版,引入或整合了大量对微服务实现极为有用的规范,例如:
- CDI 2.0
- Java API for JSON Processing (JSONP) 1.1
- Java API for JSON Binding (JSON-B) 1.0
- Java API for RESTful Web Services (JAX-RS) 2.1
- Java Servlet 4.0
CDI 2.0 定义了 Java EE 容器之外的 CDI 行为,即使在第三方实用程序库等上下文中也允许使用控制反转等模式。
该规范分为三个部分——核心 CDI、Java SE 的 CDI 和 Java EE 的 CDI。这种拆分使 CDI 更加模块化,以帮助其他 Java EE 规范更好地与其集成。
微服务环境中 API 通信的事实标准是 JSON 格式。 Java EE 有两个很棒的规范,JSON-B 和 JSONP,可以帮助开发人员轻松生成和处理 JSON 有效负载。
JSONP 提供强大的支持,包括 JSON Pointer、JSON Patch、JSON Merge Patch 等实用程序,以满足 Internet Engineering Task Force (IETF< /strong>) 标准 (https://www.ietf.org/standards/ )。它还为 JSONObject 和 JSONArray 添加了编辑操作,并引入了帮助类和方法以更好地利用 Java SE 8 Stream 操作。
JSON-B 设置了一个类似于 JAXB 的 API 来轻松地将 Java 对象编组到 JSON 或从 JSON 解组。它创建了类和 JSON 之间的默认映射,以及为 JAX-RS 处理 application/JSON 媒体类型的标准支持。它是 JSONP 规范的自然后续,缩小了 JSON 支持的差距。
JAX-RS 2.1 标准化了微服务开发中最常用的一些特性,如下所示:
- Server-sent events
- Non-blocking I/O in providers (filters, interceptors, and so on)
- Reactive programming paradigms to improve JAX-RS asynchronous clients
- Hypermedia API enhancements
通过这种方式,它促进了与其他 JSR 和框架的集成。
Servlet 4.0 引入了对 HTTP/2 协议的支持以及请求/响应多路复用、服务器推送通知等的使用。它还与最新的 HTTP 1.1 RFC 保持一致。
前面描述的所有规范和特性当然有用,但不足以使 Java EE 适合满足云-原生应用程序和微服务的需求。
现在,主要目标如下:
- Deploy the applications onto the cloud
- Build microservices in an easy manner
- Enable more rapid evolution of applications
社区,通过 Java EE 守护者 (https://javaee-guardians.io/< /a>) 和 Java 用户组 (JUG) 推动了适用于云和微服务环境的 Java EE 现代化。目标是扩展 Java EE 平台,使其能够构建微服务架构,同时仍保持与以前的 Java EE 版本的向后兼容性。此外,社区需要一条迁移路径,将整合的应用程序发展为可利用新的云开发和部署模型的云就绪应用程序。
具体来说,该请求是为了获得如下功能:
- Client-side circuit breakers in order to make remote REST invocations fault-tolerant
- A standard way of health checking Java apps
- A secret vault to shadow sensitive data
- Multitenancy support to accommodate the needs of complex applications
- OAuth and OpenID support technologies have rapidly emerged as a de facto standard in security context implementation
- An externalized configuration store to make it an easy process to promote applications across environments
这些请求的答案基本上有两个,如下:
- The creation of the MicroProfile.io project, in the middle of 2016
- The new life on Java EE with the Jakarta EE community project at the end of April 2018