介绍

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

CDI 支持

CDI 支持由 modules/owb 可选模块提供。 它打包了 Apache OpenWebBeans 项目, 并允许向 Tomcat 容器添加 CDI 支持。该模块的构建过程使用 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 支持,该支持之前应该安装在容器或 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 支持在容器级别可用,则 JAR 也可以放在 Tomcat lib 文件夹中,但在这种情况下, 必须根据需要在每个 Web 应用程序中单独添加 CXF Servlet 声明(它通常由 JAR 中存在的 Web 片段加载)。 应该使用的 CXF Servlet 类是 org.apache.cxf.cdi.CXFCdiServlet,应该映射到 JAX-RS 资源将可用的所需根路径。