<?xml version="1.0" encoding="UTF-8"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<!DOCTYPE document [
  <!ENTITY project SYSTEM "project.xml">
]>
<document url="cdi.html">

    &project;

  <properties>
    <title>CDI 2, JAX-RS and dependent libraries support</title>
  </properties>

<body>

<section name="Table of Contents">
<toc/>
</section>

  <section name="Introduction">

  <p>
    CDI and JAX-RS are dependencies for many other APIs and libraries. This
    guide explains how to add support for them in Tomcat using two optional
    modules that are provided in the Tomcat sources.
  </p>

  </section>

  <section name="CDI 2 support">

  <p>
    CDI 2 support is provided by the <code>modules/owb</code> optional module.
    It packages the Apache OpenWebBeans project and allows adding CDI 2 support
    to the Tomcat container. The build process of the module uses Apache Maven,
    and is not available as a binary bundle as it is built using a number of
    publicly available JARs.
  </p>

  <p>
    The process to build CDI support is the following.
    <source><![CDATA[cd $TOMCAT_SRC/modules/owb
mvn clean && mvn package]]></source>
    The resulting JAR at
    <code>target/tomcat-owb-x.y.z.jar</code> (where x.y.z depends on the
    Apache OpenWebBeans version used during the build)
    should then be placed into the <code>lib</code> folder of the Tomcat
    installation.<br/>
    CDI support can then be enabled for all webapps in the container by adding
    the following listener in <code>server.xml</code> nested inside the
    <code>Server</code> element:
    <source><![CDATA[<Listener className="org.apache.webbeans.web.tomcat.OpenWebBeansListener" optional="true" startWithoutBeansXml="false" />]]></source>
    The listener will produce a non fatal error if the CDI container loading
    fails.<br/>
    CDI support can also be enabled at the individual webapp level by adding
    the following listener to the webapp <code>context.xml</code> file nested
    inside the <code>Server</code> element:
    <source><![CDATA[<Listener className="org.apache.webbeans.web.tomcat.OpenWebBeansContextLifecycleListener" />]]></source>
  </p>

  </section>

  <section name="JAX-RS support">

  <p>
    JAX-RS support is provided by the <code>modules/cxf</code> optional module.
    It packages the Apache CXF project and allows adding JAX-RS support
    to individual webapps. The build process of the module uses Apache Maven,
    and is not available as a binary bundle as it is built using a number of
    publicly available JARs. The support depends on CDI 2 support, which should
    have previously been installed at either the container or webapp level.
  </p>

  <p>
    The process to build JAX-RS support is the following.
    <source><![CDATA[cd $TOMCAT_SRC/modules/cxf
mvn clean && mvn package]]></source>
    The resulting JAR at
    <code>target/tomcat-cxf-x.y.z.jar</code> (where x.y.z depends on the
    Apache CXF version used during the build)
    should then be placed into the <code>/WEB-INF/lib</code> folder of the
    desired web application.
  </p>

  <p>
    If the CDI 2 support is available at the container
    level, the JAR can also be placed in the Tomcat <code>lib</code> folder,
    but in that case the CXF Servlet declaration must be individually added
    in each webapp as needed (it is normally loaded by the web fragment that is
    present in the JAR). The CXF Servlet class that should be used is
    <code>org.apache.cxf.cdi.CXFCdiServlet</code> and should be mapped to the
    desired root path where JAX-RS resources will be available.
  </p>

  </section>

  <section name="Eclipse Microprofile support">

  <p>
    ASF artifacts are available that implement Eclipse Microprofile
    specifications using CDI 2 extensions. Once the CDI 2 and JAX-RS support
    is installed, they will be usable by individual webapps.
  </p>

  <p>
    The following implementations are available (reference:
    <code>org.apache.tomee.microprofile.TomEEMicroProfileListener</code>) as
    Maven artifacts which must be added to the webapp <code>/WEB-INF/lib</code>
    folders:
    <ul>
      <li><strong>Configuration</strong>:
        Maven artifact:
        <code>org.apache.geronimo.config:geronimo-config</code>
        CDI extension class:
        <code>org.apache.geronimo.config.cdi.ConfigExtension</code>
      </li>
      <li><strong>Fault Tolerance</strong>:
        Maven artifact:
        <code>org.apache.geronimo.safeguard:safeguard-parent</code>
        CDI extension class:
        <code>org.apache.safeguard.impl.cdi.SafeguardExtension</code>
      </li>
      <li><strong>Health</strong>:
        Maven artifact:
        <code>org.apache.geronimo:geronimo-health</code>
        CDI extension class:
        <code>org.apache.geronimo.microprofile.impl.health.cdi.GeronimoHealthExtension</code>
      </li>
      <li><strong>Metrics</strong>:
        Maven artifact:
        <code>org.apache.geronimo:geronimo-metrics</code>
        CDI extension class:
        <code>org.apache.geronimo.microprofile.metrics.cdi.MetricsExtension</code>
      </li>
      <li><strong>OpenTracing</strong>:
        Maven artifact:
        <code>org.apache.geronimo:geronimo-opentracing</code>
        CDI extension class:
        <code>org.apache.geronimo.microprofile.opentracing.microprofile.cdi.OpenTracingExtension</code>
      </li>
      <li><strong>OpenAPI</strong>:
        Maven artifact:
        <code>org.apache.geronimo:geronimo-openapi</code>
        CDI extension class:
        <code>org.apache.geronimo.microprofile.openapi.cdi.GeronimoOpenAPIExtension</code>
      </li>
      <li><strong>Rest client</strong>:
        Maven artifact:
        <code>org.apache.cxf:cxf-rt-rs-mp-client</code>
        CDI extension class:
        <code>org.apache.cxf.microprofile.client.cdi.RestClientExtension</code>
      </li>
      <li><strong>JSON Web Tokens</strong>:
        Note: Fore reference only, unusable outside Apache TomEE;
        Maven artifact:
        <code>org.apache.tomee:mp-jwt</code>
        CDI extension class:
        <code>org.apache.tomee.microprofile.jwt.cdi.MPJWTCDIExtension</code>
      </li>
    </ul>
  </p>

  </section>

</body>
</document>
