## Apache BatchEE

# GUI

Apache BatchEE provides a Web-UI and 2 different ways to expose Batch details via REST

## SimpleRest

For a quick out of the box solution to gather information about the JBatch environment you can use our Servlet based solution

## JAX-RS resource

`org.apache.batchee.jaxrs.server.JBatchResourceImpl` maps more or less `javax.batch.operations.JobOperator` API to JAXRS. It is available in `batchee-jaxrs-server` module.

To define it with CXF you can use the `CXFNonSpringServlet` in a servlet container, in a JavaEE container you surely already have it and just need to define a custom `javax.ws.rs.core.Application` with `JBatchResource` as class in `getClasses` and configure `org.apache.batchee.jaxrs.server.JBatchExceptionMapper` if you want to map `javax.batch.operations.BatchRuntimeException` to status 500:

    <web-app version="2.5"
             xmlns="http://java.sun.com/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
      <servlet>
        <servlet-name>CXFServlet</servlet-name>
        <display-name>JBatch JAXRS Servlet</display-name>
        <servlet-class>org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet</servlet-class>
        <init-param>
          <param-name>jaxrs.serviceClasses</param-name>
          <param-value>org.apache.batchee.jaxrs.server.JBatchResourceImpl</param-value>
        </init-param>
        <init-param>
          <param-name>jaxrs.providers</param-name>
          <param-value>
            org.apache.batchee.jaxrs.common.johnzon.JohnzonBatcheeProvider,
            org.apache.batchee.jaxrs.server.JBatchExceptionMapper
          </param-value>
        </init-param>
        <init-param>
          <param-name>jaxrs.extensions</param-name>
          <param-value>json=application/json</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
      </servlet>

      <servlet-mapping>
        <servlet-name>CXFServlet</servlet-name>
        <url-pattern>/api/*</url-pattern>
      </servlet-mapping>
    </web-app>

Note: instead of johnzon you can also use jackson as JAX-RS Json provider: `com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider`. Note: `JohnzonBatcheeProvider` is exactly the same as `org.apache.johnzon.jaxrs.JohnzonProvider` provider with `org.apache.batchee.jaxrs.common.johnzon.TimestampAdapter` registered to convert dates to timestamps. You can use Johnzon provider directly as well but the date conversion will be Johnzon one.

Here is the mapping:

- /job-names
- /job-instance/count/{name}
- /job-instances/{name}?start={start}&count={count}
- /executions/running/{name}
- /execution/parameter/{id}
- /job-instance/{id}
- /job-executions/{id}/{name}
- /job-execution/{id}
- /step-executions/{id}
- /execution/start/{name}
- /execution/restart/{id}
- /execution/stop/{id}
- /execution/abandon/{id}

Note: `batchee-jaxrs-client` provides a way to query it through the `JobOperator` API. You need to use `org.apache.batchee.jaxrs.client.BatchEEJAXRSClientFactory.newClient(String url, Class<?> jsonProvider, API apiType)`. API.AUTO tries to use JAXRS 2 client and if not available uses cxf 2.6 clients. In this last case you need to provide `cxf-rt-frontend-jaxrs`.

## HTML gui

It is based on `org.apache.batchee.servlet.JBatchController` but since the jar - `batchee-servlet` - is in a webapp in a servlet 3.0 container, it is automatically added and you don’t need to define it in your `web.xml`.

The configuration through init parameters is:

- org.apache.batchee.servlet.active: boolean to deactivate it
- org.apache.batchee.servlet.mapping: mapping for the gui, default /jbatch/*
- org.apache.batchee.servlet.filter.private: boolean saying if internal jsp should be protected, it adds a filter to check URLs on each request

## Spring Boot integration

For Spring Batch/Spring Boot applications compatible with JSR352, you can use BatchEE UI on top of Spring-Batch.

To do that you must import `org.apache.batchee:spring-boot-batchee-ui` module.

If you have a custom `JobOperator` implementation you can define a custom `@Bean` for it otherwise a default can be provided by `org.apache.batchee.spring.ui.BatchEEUI`.

You can customize the deployment with these properties:

- `batchee.ui.mapping` the servlet mapping to deploy the UI to (default to `/batchee/*`),
- `batchee.ui.defaultBatchNames` names of some batches you want to register even if they never ran in the UI (otherwise it is discovered after the first run).

Note: this module also exists with the classifier `jakarta` if you only use `jakarta` namespace - but you need to flatten the dependencies, including BatchEE servlet dependency.