CDI 2、JAX-RS 和依赖库支持

目录

简介

CDI 和 JAX-RS 是许多其他 API 和库的依赖项。本指南介绍如何使用 Tomcat 源代码中提供的两个可选模块在 Tomcat 中添加对它们的 支持。

CDI 2 支持

CDI 2 支持由可选模块 `modules/owb` 提供。该模块打包了 Apache OpenWebBeans 项目,并允许将 CDI 2 支持添加到 Tomcat 容器中。该模块的构建过程使用 Apache Maven,并且由于它使用许多公开可用的 JAR 文件构建,因此无法作为二进制包提供。

构建 CDI 支持的过程如下。

cd $TOMCAT_SRC/modules/owb
mvn clean && mvn package
生成的 JAR 文件位于 `target/tomcat-owb-x.y.z.jar`(其中 x.y.z 取决于构建过程中使用的 Apache OpenWebBeans 版本)中,应该由 Tomcat Jakarta EE 迁移工具处理,然后放置到 Tomcat 安装目录的 `lib` 文件夹中。
然后可以通过在 `server.xml` 中的 `Server` 元素内添加以下监听器来为容器中的所有 Web 应用程序启用 CDI 支持。
<Listener className="org.apache.webbeans.web.tomcat.OpenWebBeansListener" optional="true" startWithoutBeansXml="false" />
如果 CDI 容器加载失败,监听器将产生一个非致命错误。
也可以通过在 Web 应用程序 `context.xml` 文件的 `Server` 元素内添加以下监听器来在单个 Web 应用程序级别启用 CDI 支持。
<Listener className="org.apache.webbeans.web.tomcat.OpenWebBeansContextLifecycleListener" />

JAX-RS 支持

JAX-RS 支持由可选模块 `modules/cxf` 提供。该模块打包了 Apache CXF 项目,并允许将 JAX-RS 支持添加到单个 Web 应用程序中。该模块的构建过程使用 Apache Maven,并且由于它使用许多公开可用的 JAR 文件构建,因此无法作为二进制包提供。该支持依赖于 CDI 2 支持,该支持应该之前已在容器或 Web 应用程序级别安装。

构建 JAX-RS 支持的过程如下。

cd $TOMCAT_SRC/modules/cxf
mvn clean && mvn package
生成的 JAR 文件位于 `target/tomcat-cxf-x.y.z.jar`(其中 x.y.z 取决于构建过程中使用的 Apache CXF 版本)中,应该放置到目标 Web 应用程序的 `WEB-INF/lib` 文件夹中。

如果 CDI 2 支持在容器级别可用,则 JAR 文件也可以放置在 Tomcat `lib` 文件夹中,但在这种情况下,必须在每个 Web 应用程序中根据需要单独添加 CXF Servlet 声明(它通常由 JAR 文件中存在的 Web 片段加载)。应该使用的 CXF Servlet 类是 `org.apache.cxf.cdi.CXFCdiServlet`,并且应该映射到 JAX-RS 资源可用的所需根路径。

整个 Web 应用程序应该由 Tomcat Jakarta EE 迁移工具处理。

Eclipse Microprofile 支持

ASF 提供的工件使用 CDI 2 扩展实现了 Eclipse Microprofile 规范。安装 CDI 2 和 JAX-RS 支持后,它们将可供单个 Web 应用程序使用。

以下实现可用(参考:org.apache.tomee.microprofile.TomEEMicroProfileListener),作为 Maven 工件,必须添加到 webapp 的 /WEB-INF/lib 文件夹中。

  • 配置:Maven 工件:org.apache.geronimo.config:geronimo-config CDI 扩展类:org.apache.geronimo.config.cdi.ConfigExtension
  • 容错:Maven 工件:org.apache.geronimo.safeguard:safeguard-parent CDI 扩展类:org.apache.safeguard.impl.cdi.SafeguardExtension
  • 健康检查:Maven 工件:org.apache.geronimo:geronimo-health CDI 扩展类:org.apache.geronimo.microprofile.impl.health.cdi.GeronimoHealthExtension
  • 指标:Maven 工件:org.apache.geronimo:geronimo-metrics CDI 扩展类:org.apache.geronimo.microprofile.metrics.cdi.MetricsExtension
  • OpenTracing:Maven 工件:org.apache.geronimo:geronimo-opentracing CDI 扩展类:org.apache.geronimo.microprofile.opentracing.microprofile.cdi.OpenTracingExtension
  • OpenAPI:Maven 工件:org.apache.geronimo:geronimo-openapi CDI 扩展类:org.apache.geronimo.microprofile.openapi.cdi.GeronimoOpenAPIExtension
  • REST 客户端:Maven 工件:org.apache.cxf:cxf-rt-rs-mp-client CDI 扩展类:org.apache.cxf.microprofile.client.cdi.RestClientExtension
  • JSON Web Tokens:注意:仅供参考,在 Apache TomEE 之外不可用;Maven 工件:org.apache.tomee:mp-jwt CDI 扩展类:org.apache.tomee.microprofile.jwt.cdi.MPJWTCDIExtension