Add a new JAX-RS resource to web.xml servlet mapping

18 Views Asked by At

This is my existing JAX-RS resource class


package tools.descartes.teastore.webui.rest;

import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.core.MediaType;
import jakarta.ws.rs.core.Response;

/**
 * Rest endpoint for the store cart.
 *
 * @author Simon
 */
@Path("ready")
@Produces({ "application/json" })
public class ReadyRest {


  /**
   * This methods checks, if the service is ready.
   *
   * @return True, if recommender is ready; false, if not.
   */
  @GET
  @Path("isready")
  public Response isReady() {
    return Response.ok(true).build();
  }

  @GET
  @Path("/prometheus") // http://localhost:8080/tools.descartes.teastore.webui/rest/ready/prometheus
  @Produces(MediaType.TEXT_PLAIN)
  public Response getMetrics() {
    String metrics = MetricsExporter.getMetrics();
    return Response.ok(metrics).build();
  }

}

and I am able to reach the URL at http://localhost:8080/tools.descartes.teastore.webui/rest/ready/prometheus with the following web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app
   xmlns="https://jakarta.ee/xml/ns/jakartaee"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
   version="5.0">
   <display-name>Descartes TeaStore Web UI</display-name>
   <welcome-file-list>
      <welcome-file>index</welcome-file>
   </welcome-file-list>

   <servlet>
      <servlet-name>webuirest</servlet-name>
      <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
      <init-param>
         <param-name>jersey.config.server.provider.packages</param-name>
         <param-value>tools.descartes.teastore.webui.rest</param-value>
      </init-param>
      <load-on-startup>2</load-on-startup>
   </servlet>
   <servlet-mapping>
      <servlet-name>webuirest</servlet-name>
      <url-pattern>/rest/*</url-pattern>
   </servlet-mapping>

   <env-entry>
      <env-entry-name>servicePort</env-entry-name>
      <env-entry-type>java.lang.String</env-entry-type>
      <env-entry-value>8080</env-entry-value>
   </env-entry>
   <env-entry>
      <env-entry-name>registryURL</env-entry-name>
      <env-entry-type>java.lang.String</env-entry-type>
      <env-entry-value>http://localhost:8080/tools.descartes.teastore.registry/rest/services/</env-entry-value>
   </env-entry>
   <error-page>
      <location>/error</location>
   </error-page>
   <filter>
      <filter-name>TrackingFilter</filter-name>
      <filter-class>tools.descartes.teastore.registryclient.rest.TrackingFilter</filter-class>
   </filter>
   <filter-mapping>
      <filter-name>TrackingFilter</filter-name>
      <url-pattern>/*</url-pattern>
   </filter-mapping>
   <absolute-ordering/>
</web-app>

I would like to add another JAX-RS resource and reach the metrics also at the url http://localhost:8080/tools.descartes.teastore.webui/rest/ready/prometheusactuator/prometheus

How can I do it??

I try to modify the xml adding

<servlet>
        <servlet-name>prometheusMetrics</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>jersey.config.server.provider.packages</param-name>
            <param-value>tools.descartes.teastore.webui.rest</param-value>
        </init-param>
        <load-on-startup>2</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>prometheusMetrics</servlet-name>
        <url-pattern>/actuator/*</url-pattern>
    </servlet-mapping>

and adding a new JAX-RS resource class with:

@Path("/actuator/prometheus")
public class PrometheusMetricsEndpoint {

    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public Response getMetrics() {
        String metrics = MetricsExporter.getMetrics();
        return Response.ok(metrics).build();
    }
}
0

There are 0 best solutions below