介绍

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

CDI 2 支持

CDI 2 支持由 modules/owb 可选模块提供。它打包了 Apache OpenWebBeans 项目, 并允许向 Tomcat 容器添加 CDI 2 支持。该模块的构建过程使用 Apache Maven, 并且不作为二进制捆绑包提供,因为它是使用许多公开可用的 JAR 构建的。

构建 CDI 支持的过程如下。

cd $TOMCAT_SRC/modules/owb
mvn clean && mvn package

target/tomcat-owb-x.y.z.jar 处生成的 JAR(其中 x.y.z 取决于构建期间使用的 Apache OpenWebBeans 版本) 应由用于 Jakarta EE 的 Tomcat 迁移工具处理,然后放入 Tomcat 安装的 lib 文件夹中。 然后,可以通过在 Server 元素内嵌套的 server.xml 中添加以下侦听器,为容器中的所有 Web 应用程序启用 CDI 支持:

<Listener className="org.apache.webbeans.web.tomcat.OpenWebBeansListener" optional="true" startWithoutBeansXml="false" />

如果 CDI 容器加载失败,侦听器将产生非致命错误。 还可以通过将以下侦听器添加到嵌套在 Server 元素内的 webapp context.xml 文件中, 在单个 webapp 级别启用 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

然后,应将 target/tomcat-cxf-x.y.z.jar 处生成的 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 应用程序应由 Jakarta EE 的 Tomcat 迁移工具处理。

Eclipse Microprofile 支持

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

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

  • Configuration:Maven 工件:org.apache.geronimo.config:geronimo-config CDI 扩展类:org.apache.geronimo.config.cdi.ConfigExtension

  • Fault Tolerance:Maven 工件:org.apache.geronimo.safeguard:safeguard-parent CDI 扩展类:org.apache.safeguard.impl.cdi.SafeguardExtension

  • Health:Maven 工件:org.apache.geronimo:geronimo-health CDI 扩展类:org.apache.geronimo.microprofile.impl.health.cdi.GeronimoHealthExtension

  • Metrics: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 client: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