web server apache tomcat11-33-CDI

老马啸西风發表於2024-05-07

前言

整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。

開源專案

從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。

系列文章

web server apache tomcat11-01-官方文件入門介紹

web server apache tomcat11-02-setup 啟動

web server apache tomcat11-03-deploy 如何部署

web server apache tomcat11-04-manager 如何管理?

web server apache tomcat11-06-Host Manager App -- Text Interface

web server apache tomcat11-07-Realm Configuration

web server apache tomcat11-08-JNDI Resources

web server apache tomcat11-09-JNDI Datasource

web server apache tomcat11-10-Class Loader

web server apache tomcat11-11-Jasper 2 JSP Engine

web server apache tomcat11-12-SSL/TLS Configuration

web server apache tomcat11-13-SSI

web server apache tomcat11-14-CGI

web server apache tomcat11-15-proxy

web server apache tomcat11-16-mbean

web server apache tomcat11-17-default-servlet

web server apache tomcat11-18-clusting 叢集

web server apache tomcat11-19-load balance 負載均衡

web server apache tomcat11-20-connectors 聯結器

web server apache tomcat11-21-monitor and management 監控與管理

web server apache tomcat11-22-logging 日誌

web server apache tomcat11-23-APR

web server apache tomcat11-24-Virtual Hosting and Tomcat

web server apache tomcat11-25-Advanced IO and Tomcat

web server apache tomcat11-26-maven jars

web server apache tomcat11-27-Security Considerations

web server apache tomcat11-28-Windows Service

web server apache tomcat11-29-Windows Authentication

web server apache tomcat11-30-The Tomcat JDBC Connection Pool

web server apache tomcat11-31-websocket

web server apache tomcat11-32-rewrite

web server apache tomcat11-33-CDI

web server apache tomcat11-34-Ahead of Time compilation support

Tomcat 中新增 CDI 和 JAX-RS 支援指南

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 版本),應透過 Jakarta EE 的 Tomcat 遷移工具處理,然後放置到 Tomcat 安裝的 lib 資料夾中。

可以透過在 server.xml 中 Server 元素的巢狀中新增以下監聽器來為容器中的所有 Web 應用程式啟用 CDI 支援:

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

如果 CDI 容器載入失敗,監聽器將產生非致命錯誤。

也可以透過在 Server 元素的巢狀中的 webapp context.xml 檔案中新增以下監聽器來為單個 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 支援,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 資料夾中,但在這種情況下,CXF Servlet 宣告必須根據需要單獨新增到每個 Web 應用程式中(通常由 JAR 中存在的 Web 片段載入)。應使用的 CXF Servlet 類是 org.apache.cxf.cdi.CXFCdiServlet,應將其對映到 JAX-RS 資源可用的所需根路徑。

整個 Web 應用程式應透過 Jakarta EE 的 Tomcat 遷移工具處理。

Eclipse Microprofile 支援

ASF(Apache Software Foundation)提供了使用 CDI 2 擴充套件實現 Eclipse Microprofile 規範的工件。安裝了 CDI 2 和 JAX-RS 支援後,它們將可供單個 Web 應用程式使用。

以下實現可用(參考:org.apache.tomee.microprofile.TomEEMicroProfileListener)作為必須新增到 Web 應用程式 /WEB-INF/lib 資料夾的 Maven 工件:

  • 配置: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
  • 開放追蹤: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 令牌:注意:僅供參考,在 Apache TomEE 外不可用;Maven 工件:org.apache.tomee:mp-jwt,CDI 擴充套件類:org.apache.tomee.microprofile.jwt.cdi.MPJWTCDIExtension

參考資料

https://tomcat.apache.org/tomcat-11.0-doc/cdi.html

相關文章