Liberty Batch no arroja una excepción cuando el trabajo se inicia con el mismo parámetro de entrada donde lo hace el lote de primavera (JobInstanceAlreadyExistsException)

Estoy desarrollando trabajo por lotes en java-ee-7 en la parte superior del servidor de libertad. utilizando la API REST para iniciar el trabajo por lotes. El problema aquí es cuando intenté iniciar el trabajo por lotes para el mismo parámetro de entrada, creando una nueva instancia de trabajo. Mientras que el proceso por lotes de primavera, arroja un error que dice JobInstanceAlreadyExistsException. Espero que algo como esto evite que se cree un nuevo trabajo para el mismo parámetro de entrada

El parámetro de entrada y el estado del lote se han almacenado en un almacenamiento persistente en la base de datos Oracle utilizando las tablas del servidor liberty (WLPJOBINSTANCE, WLPSTEPTHREADINSTANCE, wlpjobparameter, etc.).

<job xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/jobXML_1_0.xsd"
    id="my-batch-job" restartable="true" version="1.0">
</job>

Esperado: el trabajo debería generar una excepción si se pasa el mismo parámetro de entrada. Actual: está creando una nueva instancia de trabajo para el mismo parámetro de entrada

Respuesta 1

Uso de la API REST de Liberty Batch para ver si ya existe una instancia de trabajo coincidente

Voy a dar una segunda respuesta completamente diferente aquí. La otra respuesta justificó por qué Liberty Batch, y más generalmente la especificación JSR 352, nunca considerará un caso de error enviar un segundo trabajo con los mismos parámetros de trabajo que uno anterior.

Pero si realmente desea evitar esto, puede hacerlo en Liberty Batch utilizando la API REST para consultar, antes del envío, si ya existe una instancia de trabajo coincidente. Sin embargo, en este punto, dependerá de usted cancelar / evitar el envío del trabajo.

Digamos que quería hacer coincidir jobName de BonusPayout, con el parámetro de trabajo parm1 de valor 1000y el parámetro de trabajo parm2 coincidente 500*(con glob / comodín).

Podría hacer esto a través de la URL:

https: /// ibm / api / batch / v4 / jobinstances? jobName = BonusPayout & jobParameter.parm1 = 1000 & jobParameter.parm2 = 500 *

Tenga en cuenta que en el documento hay varias otras opciones, como ignorar mayúsculas y minúsculas (o no).

Entonces, si obtengo una coincidencia, puedo elegir NO seguir adelante y enviar el trabajo (nuevamente).

Respuesta: 2

Este problema es intermitente, ocurre cada pocas horas en un proceso que se ejecuta cada 30 segundos y realiza la siguiente comunicación de red: hay un servidor en una máquina remota escuchando ...

Estoy usando mi clase reportService para generar el objeto JasperPrint que contiene mi informe, luego lo envío a un Servlet y genera el PDF. El problema es que este servlet no está abriendo el ...

Estoy tratando de conectarme a una base de datos sqlite desde Java. Estoy programando en Windows. Descargué el controlador sqlite y configuré el classpath en las variables de entorno de Windows. Yo tengo un ...

Esta pregunta es muy similar a esta pregunta pero se refiere a docx4j en lugar de platillo volador. Estoy usando docx4j para representar un documento xhtml para docx a través de un servlet que devuelve el docx generado ...