Jakarta EE课程扩展阅读(一)
Jakarta EE课程扩展阅读(一)
1. 简述当今软件开发的主要特点
当今的软件开发已经高度演进,呈现出以下几个核心特点:
-
敏捷(Agile)与 DevOps 的普及:开发模式从传统的瀑布模型转向敏捷开发(如 Scrum、Kanban),强调快速迭代、持续反馈和适应变化。DevOps 文化则打破了开发(Dev)和运维(Ops)之间的壁垒,通过自动化工具链实现持续集成(CI)、持续交付/部署(CD),极大地提高了软件交付的频率和质量。
-
云原生(Cloud-Native)架构:软件被设计为在云环境中(如 AWS, Azure, GCP)以最佳方式运行。这通常涉及 微服务(Microservices) 架构,即将大型单体应用拆分为一组小而独立的服务。
-
容器化(Containerization)与编排:以 Docker 为代表的容器技术将应用及其依赖打包在一起,提供了极佳的环境一致性和可移植性。Kubernetes 则成为容器编排的事实标准,负责自动化部署、扩展和管理容器化应用。
-
API 优先(API-First):系统设计首先关注定义清晰、稳定、易用的 API(通常是 RESTful API),然后再进行具体实现。这使得前后端分离、微服务间通信以及与第三方系统集成变得更加容易。
-
开源软件(Open Source)的统治地位:从操作系统(Linux)、数据库(PostgreSQL, MySQL)到开发框架(Spring, Jakarta EE)和工具(Git, Jenkins),开源软件已经成为现代软件开发的基石。
-
关注全栈(Full-Stack)与专业化并存:市场既需要能够处理从前端到后端再到数据库的全栈工程师,也需要深度专精于某一领域(如前端、后端、数据科学、AI/ML)的专家。
2. 简述JavaEE的组件和功能
Java EE(现为 Jakarta EE)是一个包含众多技术规范的平台,旨在简化企业级应用的开发。其核心组件和功能可以分为几个层次:
-
Web 层组件:
- Jakarta Servlet: 处理 HTTP 请求和响应的核心组件,是构建 Web 应用的基础。
- Jakarta Server Pages (JSP) / Jakarta Standard Tag Library (JSTL): 用于创建动态 Web 页面的技术。JSP 允许在 HTML 中嵌入 Java 代码,JSTL 则提供了一套标准标签库(如循环、条件判断)来简化页面开发。
- Jakarta Server Faces (JSF): 一个基于组件的 UI 框架,用于构建 Web 用户界面,简化了事件处理和状态管理。
- Jakarta WebSocket: 支持在客户端和服务器之间建立全双工、低延迟的通信通道。
-
业务逻辑层组件:
- Enterprise JavaBeans (EJB): 提供强大的后端服务,如事务管理、安全控制、并发处理和远程调用。虽然在现代开发中部分功能被更轻量的框架替代,但它依然是重量级企业应用的选择。
-
数据与集成层组件:
- Jakarta Persistence (JPA): 对象关系映射(ORM)规范,允许开发者以面向对象的方式操作数据库,而无需编写繁琐的 SQL。
- Jakarta Transaction (JTA): 提供分布式事务管理能力,确保跨多个资源(如数据库、消息队列)的操作要么全部成功,要么全部失败。
- Jakarta Messaging (JMS): 用于在不同应用组件之间进行异步、可靠的消息传递。
- Jakarta RESTful Web Services (JAX-RS): 用于轻松创建和消费 RESTful Web 服务的 API。
- Jakarta SOAP with Attachments (JAX-WS): 用于创建基于 SOAP 协议的 Web 服务。
-
基础与通用组件:
- Contexts and Dependency Injection (CDI): 一个强大的依赖注入框架,用于解耦组件,是现代 Jakarta EE 应用的核心。
- Bean Validation: 提供了一套通过注解来定义和验证对象属性约束的机制(如
@NotNull
,@Size
)。
3. 简述JavaEE的容器类型和主要功能
Jakarta EE 应用运行在特定的运行时环境中,即容器(Container)。容器负责管理组件的生命周期并提供各种底层服务。主要有两种容器类型:
-
Web 容器 (Web Container):
- 主要功能:这是所有 Jakarta EE 服务器的基础。它负责管理 Web 组件(如 Servlet 和 JSP)的生命周期,将 HTTP 请求映射到具体的 Servlet,管理用户会话(Session)等。
- 例子:Apache Tomcat、Jetty。
-
EJB 容器 (EJB Container):
- 主要功能:它提供了一个更强大的环境来运行业务逻辑组件(EJB)。它提供的服务包括:
- 事务管理 (Transaction Management): 自动处理数据库事务。
- 安全管理 (Security Management): 声明式的角色和权限控制。
- 并发管理 (Concurrency Management): 安全地处理多线程访问。
- 远程访问 (Remote Access): 允许不同 JVM 中的客户端调用。
- 注意:一个完整的 Jakarta EE 服务器(Full Profile)会同时包含 Web 容器和 EJB 容器。
- 主要功能:它提供了一个更强大的环境来运行业务逻辑组件(EJB)。它提供的服务包括:
4. 符合Jakarta EE Platform规范的服务器有哪些?
Jakarta EE Platform(也称 Full Profile)是功能最全的规范,要求服务器实现所有 Jakarta EE API。以下是一些通过官方认证的服务器:
- GlassFish (Eclipse Foundation 的参考实现)
- WildFly (由 Red Hat 支持)
- Open Liberty (由 IBM 支持)
- Payara Server (基于 GlassFish 的商业支持版本)
- Oracle WebLogic Server
- IBM WebSphere Application Server
你可以在 Jakarta EE 官网上查看最新的兼容性列表:jakarta.ee/compatibility/
5. 符合Jakarta EE Web Profile规范的服务器有哪些?
Jakarta EE Web Profile 是一个功能子集,专注于构建现代 Web 应用,不包含 EJB 等一些传统的重量级组件。它更轻量,启动更快。
- Apache TomEE (在 Tomcat 基础上集成了其他 Jakarta EE 组件)
- WildFly (WildFly 也提供 Web Profile 的配置)
- Open Liberty (同样提供 Web Profile 配置)
- Payara Micro (Payara 的微服务版本)
- Piranha (一个非常现代和模块化的实现)
特别说明:Apache Tomcat 本身只是一个 Servlet 容器,它只实现了 Servlet, JSP, WebSocket 等少数几个规范,因此它不符合 Web Profile 规范。但是,像 Apache TomEE 这样的项目会在 Tomcat 的基础上添加所需的库(如 CDI, JPA, JAX-RS),使其成为一个完整的 Web Profile 服务器。
6. 市场上流行的Jakarta EE服务器主要有哪些?请比较它们的优缺点。
以下是当前最流行的几个服务器的比较:
服务器 | 优点 | 缺点 | 最佳使用场景 |
---|---|---|---|
WildFly | 功能全面 (Full Profile),性能优异,由 Red Hat 强大支持,管理控制台功能强大,文档完善。 | 相对 Open Liberty 来说,资源占用稍多,配置稍显复杂。 | 需要完整 Jakarta EE 功能、寻求稳定企业级支持的传统和现代应用。 |
Open Liberty | 极其轻量,启动飞快 (秒级),高度模块化,配置简单(单个 XML 文件),非常适合云原生和微服务。 | 默认功能较少,需要按需添加特性,社区相对 WildFly 稍小。 | 微服务、容器化环境、快速开发迭代以及对启动速度有极高要求的场景。 |
Payara | 基于 GlassFish,提供商业支持和增强功能,社区活跃,有专门的微服务版本 (Payara Micro)。 | 免费社区版的更新节奏可能不如商业版。 | 从 GlassFish 迁移、需要商业支持或对增强功能(如 JCache)有需求的企业。 |
Apache TomEE | 在 Tomcat 基础上构建,对于熟悉 Tomcat 的开发者来说学习曲线平缓,轻量且稳定。 | 功能更新可能滞后于 WildFly 和 Open Liberty,社区活跃度适中。 | 希望在熟悉的 Tomcat 环境中使用 Jakarta EE Web Profile 功能的团队。 |
GlassFish | 官方参考实现,最标准、最纯粹,适合学习和研究 Jakarta EE 规范。 | 缺乏商业公司的强力支持,在生产环境中的使用率已逐渐被其他服务器超越。 | 学习、教学、原型验证和非关键性内部应用。 |
7. 主流的Jakarta EE应用开发工具有哪些?
开发 Jakarta EE 应用通常会用到以下工具组合:
-
集成开发环境 (IDE):
- IntelliJ IDEA Ultimate: 目前被广泛认为是 Java 开发的最佳 IDE,对 Jakarta EE、Maven/Gradle、服务器集成等提供了顶级的支持。
- Eclipse IDE for Enterprise Java and Web Developers: 传统的、免费且强大的开源 IDE,拥有庞大的插件生态系统。
- Visual Studio Code: 通过安装 Red Hat 的
Extension Pack for Java
和Community Server Connectors
等插件,VS Code 也可以成为一个轻量级的 Jakarta EE 开发环境。
-
构建工具:
- Maven: 最主流的 Java 项目构建和依赖管理工具,通过
pom.xml
文件进行配置。 - Gradle: 更现代、更灵活的构建工具,使用 Groovy 或 Kotlin DSL 进行配置,在 Android 和许多新项目中非常流行。
- Maven: 最主流的 Java 项目构建和依赖管理工具,通过
-
应用服务器: 即上面提到的 WildFly, Open Liberty, Tomcat 等,在开发过程中直接集成在 IDE 中进行部署和调试。
-
数据库:
- H2 Database / Derby: 轻量级的内存/文件数据库,非常适合开发和测试阶段,无需单独安装。
- PostgreSQL / MySQL: 生产环境中广泛使用的开源关系型数据库。
-
其他工具:
- Docker: 用于创建和管理开发、测试环境,确保环境一致性。
- Postman / Insomnia: 用于测试 RESTful API 的强大工具。