Repositorio de Liberty[8.5.5.6 o posterior]

Administración de la API REST por lotes

El perfil Liberty de WebSphere Application Server incluye una interfaz de gestión RESTful para gestionar los trabajos por lotes.

Las operaciones básicas que están asociadas con un trabajo por lotes son enviar (iniciar), detener, reiniciar y ver estado. Puede realizar estas operaciones utilizando un cliente REST de HTTP cualquiera. Los datos que se envían como parte de una solicitud o se devuelven como parte de una respuesta tienen un formato JSON.

Los ejemplos siguientes muestran las funciones que puede realizar con la API REST.

Recuerde: Las direcciones web de la interfaz REST por lotes empiezan todas por la dirección web raíz: https://{host}:{port}/ibm/api/batch.

Instancias de trabajo

GET /ibm/api/batch/jobinstances/
Este URI devuelve una lista de instancias de trabajo. Los parámetros de consulta incluyen:
  • page=[número página ]: indica qué página (subconjunto de registros) se devuelve. El valor predeterminado es 0.
  • pageSize=[número de registros por página]: indica el número de registros por página. El valor predeterminado es 50.
Solicitudes de ejemplo:

https://localhost:9443/ibm/api/batch/jobinstances

https://localhost:9443/ibm/api/batch/jobinstances?page=13&pagesize=20

Respuesta de ejemplo:
[
    {
        "jobName":"test_sleepyBatchlet",
        "instanceId":7,
        "appName":"SimpleBatchJob#SimpleBatchJob.war",
        "submitter":"bob",
        "batchStatus":"COMPLETED",
        "jobXMLName":"test_sleepyBatchlet",
        "instanceState":"COMPLETED",
        "_links":[
            {
                "rel":"self",
                "href":"https://localhost:9443/ibm/api/batch/jobinstances/7"
            },
            {
                "rel":"job logs",
                "href":"https://localhost:9443/ibm/api/batch/jobinstances/7/joblogs"
            }
        ]
    },
    {
        "jobName":"test_sleepyBatchlet",
        "instanceId":6,
        "appName":"SimpleBatchJob#SimpleBatchJob.war",
        "submitter":"bob",
        "batchStatus":"COMPLETED",
        "jobXMLName":"test_sleepyBatchlet",
        "instanceState":"COMPLETED",
        "_links":[
            {
                "rel":"self",
                "href":"https://localhost:9443/ibm/api/batch/jobinstances/6"
            },
            {
                "rel":"job logs",
                "href":"https://localhost:9443/ibm/api/batch/jobinstances/6/joblogs"
            }
        ]
    }
]
GET /ibm/api/batch/jobinstances/ID de instancia de trabajo
Este URI devuelve información detallada sobre la instancia de trabajo especificada como, por ejemplo, todas las ejecuciones que están asociadas con una instancia de trabajo especificada. Los resultados se devuelven en orden de más reciente a más antiguo. El resultado más reciente se muestra en el primer lugar de la lista.
Respuesta de ejemplo:
{
    "jobName":"test_sleepyBatchlet",
    "instanceId":7,
    "appName":"SimpleBatchJob#SimpleBatchJob.war",
    "submitter":"bob",
    "batchStatus":"COMPLETED",
    "jobXMLName":"test_sleepyBatchlet",
    "instanceState":"COMPLETED",
    "_links":[
        {
            "rel":"self",
            "href":"https://localhost:9443/ibm/api/batch/jobinstances/7"
        },
        {
            "rel":"job logs",
            "href":"https://localhost:9443/ibm/api/batch/jobinstances/7/joblogs"
        },
        {
            "rel":"job execution",
            "href":"https://localhost:9443/ibm/api/batch/jobinstances/7/jobexecutions/7"
        }
    ]
}
POST /ibm/api/batch/jobinstances/
Utilice este URI para enviar (iniciar) un nuevo trabajo.
El siguiente ejemplo muestra el cuerpo de solicitud para enviar un trabajo empaquetado en un módulo WAR con formato JSON:
{ 
  "applicationName" : "SimpleBatchJob",
  "moduleName" : "SimpleBatchJob.war",
  "jobXMLName" : "test_batchlet_jsl",
  "jobParameters" : { "prop1" : "prop1value", "prop2" : "prop2value"}
}
El siguiente ejemplo muestra el cuerpo de solicitud para enviar un trabajo empaquetado en un módulo EJB con formato JSON:
{ 
  "applicationName" : "SimpleBatchJob",
  "moduleName" : "SimpleBatchJobEJB.jar",
  "componentName" : "MyEJB",
  "jobXMLName" : "test_batchlet_jsl",
  "jobParameters" : { "prop1" : "prop1value", "prop2" : "prop2value"}
}

applicationName identifica la aplicación por lotes. Es necesario a menos que se especifique moduleName, en cuyo caso, applicationName se obtiene de moduleName recortando el sufijo .war o .jar de moduleName. Por ejemplo, si no proporciona ningún applicationName y moduleName=SimpleBatchJob.war, applicationName toma el valor predeterminado SimpleBatchJob.

moduleName identifica el módulo dentro de la aplicación por lotes que contiene los artefactos de trabajo como, por ejemplo, el JSL. El trabajo se envía con el contexto de componente del módulo. moduleName es necesario a menos que se especifique applicationName, en cuyo caso moduleName se obtiene de applicationName añadiendo .war a applicationName. Por ejemplo, si proporciona applicationName=SimpleBatchJob y no proporciona ningún moduleName, moduleName toma el valor predeterminado SimpleBatchJob.war.

componentName identifica el componente EJB dentro del módulo EJB de la aplicación por lotes. Si se especifica, el trabajo se envía con el contexto de componente del EJB.
Nota: componentName sólo es necesario si el módulo es un módulo EJB. Cuando el módulo es un módulo WAR, componentName no es necesario.

Debe especificar un valor para jobXMLName. El valor de jobParameters es opcional.

La respuesta de ejemplo siguiente muestra un envío de trabajo correcto:
{
    "jobName": "test_sleepyBatchlet",
    "instanceId": 10,
    "appName": "SimpleBatchJob#SimpleBatchJob.war",
    "submitter": "bob",
    "batchStatus": "STARTING",
    "jobXMLName": "test_sleepyBatchlet",
    "instanceState": "SUBMITTED",
    "_links": [
        {
            "rel": "self",
            "href": "https://localhost:9443/ibm/api/batch/jobinstances/10"
        },
        {
            "rel": "job logs",
            "href": "https://localhost:9443/ibm/api/batch/jobinstances/10/joblogs"
        }
    ]
}
PUT /ibm/api/batch/jobinstances/ID de instancia de trabajo?action=stop
Utilice este URI para detener la ejecución de trabajos más reciente asociada con esta instancia de trabajo si se está ejecutando. De lo contrario, la API devuelve un error.
PUT /ibm/api/batch/jobinstances/ID de instancia de trabajo?action=restart
Utilice este URI para reiniciar la ejecución de trabajos más reciente asociada con esta instancia de trabajo solo si tiene un estado STOPPED o FAILED. Si no hay ninguna ejecución de trabajos asociada con esta instancia o si la última ejecución de trabajos tiene un estado COMPLETED, la API devuelve un error.
PUT /ibm/api/batch/jobinstances/ID de instancia de trabajo?action=restart&reusePreviousParams=true
Utilice este URI para reiniciar la ejecución de trabajo más reciente y reutilizar los parámetros del trabajo de la ejecución anterior asociada con esta instancia de trabajo. El estado de la ejecución anterior debe ser STOPPED o FAILED. Si no hay ninguna ejecución de trabajos asociada con esta instancia o si la última ejecución de trabajos tiene un estado COMPLETED, la API devuelve un error. Tenga en cuenta que reusePreviousParams es un valor opcional. El valor predeterminado es reusePreviousParams=false.
Nota: Si reusePreviousParams=true, cualquier parámetro de trabajo que se envíe como parte de la solicitud de reinicio actual tiene prioridad sobre cualquier parámetro de trabajo anterior. Los parámetros actuales alteran temporalmente los parámetros anteriores con el mismo nombre de clave de parámetro de trabajo.
DELETE /ibm/api/batch/jobinstances/ID de instancia de trabajo
Utilice este URI para depurar todas las entradas de base de datos y los registros de trabajo asociados con esta instancia de trabajo. Esta API devuelve un error si la instancia de trabajo tiene ejecuciones de trabajos activas. Si existe un error de supresión de los registros de trabajo, no se intenta suprimir los datos de la instancia del trabajo en la base de datos del almacén de trabajos.
DELETE /ibm/api/batch/jobinstances/ID de instancia de trabajo?purgeJobStoreOnly=true
Utilice este URI para depurar solo las entradas de base de datos asociadas con esta instancia de trabajo. Si purgeJobStoreOnly=true, no se intenta depurar los registros de trabajo asociados a esta instancia de trabajo. El valor predeterminado es purgeJobStoreOnly=false. Esta API devuelve un error si la instancia de trabajo tiene ejecuciones de trabajos activas.

Ejecuciones de trabajos

GET /ibm/api/batch/jobexecutions/ID de ejecución de trabajos
Este URI devuelve información detallada sobre una ejecución de trabajos especificada, e incluye enlaces a ejecuciones de pasos y registros de trabajo asociados.
Solicitud de ejemplo:

http://localhost:9443/ibm/api/batch/jobinstances/9/jobexecutions/9

Respuesta de ejemplo:
{
    "jobName":"test_sleepyBatchlet",
    "executionId":9,
    "instanceId":9,
    "batchStatus":"COMPLETED",
    "exitStatus":"COMPLETED",
    "createTime":"2015/05/07 16:09:41.025 -0400",
    "endTime":"2015/05/07 16:09:52.127 -0400",
    "lastUpdatedTime":"2015/05/07 16:09:52.127 -0400",
    "startTime":"2015/05/07 16:09:41.327 -0400",
    "jobParameters":{
    },
    "restUrl":"https://localhost:9443/ibm/api/batch",
    "serverId":"localhost/C:/ibm/RAD_workspaces/Liberty7/build.image/wlp/usr/server1",
    "logpath":"C:\\ibm\\Liberty\\wlp\\usr\\servers\\server1\\logs\\joblogs\\test_sleepyBatchlet\\2015-05-07\\instance.9\\execution.9\\",
    "stepExecutions":[
        {
            "stepExecutionId":9,
            "stepName":"step1",
            "batchStatus":"COMPLETED",
            "exitStatus":"SleepyBatchlet:i=10;stopRequested=false",
            "stepExecution":"https://localhost:9443/ibm/api/batch/jobexecutions/9/stepexecutions/step1"
        }
    ],
    "_links":[
        {
            "rel":"self",
            "href":"https://localhost:9443/ibm/api/batch/jobexecutions/9"
        },
        {
            "rel":"job instance",
            "href":"https://localhost:9443/ibm/api/batch/jobinstances/9"
        },
        {
            "rel":"step executions",
            "href":"https://localhost:9443/ibm/api/batch/jobexecutions/9/stepexecutions"
        },
        {
            "rel":"job logs",
            "href":"https://localhost:9443/ibm/api/batch/jobexecutions/9/joblogs"
        },
        {
            "rel":"stop url",
            "href":"https://localhost:9443/ibm/api/batch/jobexecutions/9?action=stop"
        }
    ]
}
GET /ibm/api/batch/jobinstances/ID de instancia de trabajo/jobexecutions/Número de secuencia de ejecución de trabajo
Este URI devuelve información detallada sobre una ejecución de trabajos especificada, e incluye enlaces a ejecuciones de pasos y registros de trabajo asociados.
PUT /ibm/api/batch/jobexecutions/ID de ejecución de trabajos?action=stop
Utilice este URI para detener la ejecución de trabajos en ejecución especificada. Los parámetros necesarios incluyen action = stop, restart.
PUT /ibm/api/batch/jobexecutions/ID de ejecución de trabajos?action=restart
Utilice este URI para reiniciar la ejecución de trabajos especificada. Los parámetros necesarios incluyen action = stop, restart.

Ejecuciones de paso

GET /ibm/api/batch/jobexecutions/ID de ejecución de trabajos/stepexecutions
Este URI devuelve una matriz JSON de todos los detalles de ejecución de pasos para la ejecución de trabajos especificada. Si el trabajo contiene un paso particionado, se devolverá la información de partición listada en cada paso.
Solicitud de ejemplo:

https://localhost:8020/ibm/api/batch/jobexecutions/40/stepexecutions

El ejemplo siguiente muestra una respuesta para un paso particionado.
[
   { 
      "stepExecutionId":47,
      "executionId":39,
      "instanceId":35,
      "stepName":"step1",
      "batchStatus":"COMPLETED",
      "startTime":"2015/03/30 11:10:08.652 -0400",
      "endTime":"2015/03/30 11:10:09.817 -0400",
      "exitStatus":"COMPLETED",
      "metrics":{ 
         "READ_COUNT":"0",
         "WRITE_COUNT":"0",
         "COMMIT_COUNT":"0",
         "ROLLBACK_COUNT":"0",
         "READ_SKIP_COUNT":"0",
         "PROCESS_SKIP_COUNT":"0",
         "FILTER_COUNT":"0",
         "WRITE_SKIP_COUNT":"0"
      },
      "partitions":[ 
         {
            "partitionNumber":0,
            "batchStatus":"COMPLETED",
            "startTime":"2015/03/30 11:10:09.579 -0400",
            "endTime":"2015/03/30 11:10:09.706 -0400",
            "exitStatus":"step1",
            "metrics":{ 
               "READ_COUNT":"0",
               "WRITE_COUNT":"0",
               "COMMIT_COUNT":"0",
               "ROLLBACK_COUNT":"0",
               "READ_SKIP_COUNT":"0",
               "PROCESS_SKIP_COUNT":"0",
               "FILTER_COUNT":"0",
               "WRITE_SKIP_COUNT":"0"
            }
         },
         {
            "partitionNumber":1,
            "batchStatus":"COMPLETED",
            "startTime":"2015/03/30 11:10:09.257 -0400",
            "endTime":"2015/03/30 11:10:09.302 -0400",
            "exitStatus":"step1",
            "metrics":{ 
               "READ_COUNT":"0",
               "WRITE_COUNT":"0",
               "COMMIT_COUNT":"0",
               "ROLLBACK_COUNT":"0",
               "READ_SKIP_COUNT":"0",
               "PROCESS_SKIP_COUNT":"0",
               "FILTER_COUNT":"0",
               "WRITE_SKIP_COUNT":"0"
            }
         },
         {
            "partitionNumber":2,
            "batchStatus":"COMPLETED",
            "startTime":"2015/03/30 11:10:09.469 -0400",
            "endTime":"2015/03/30 11:10:09.548 -0400",
            "exitStatus":"step1",
            "metrics":{ 
               "READ_COUNT":"0",
               "WRITE_COUNT":"0",
               "COMMIT_COUNT":"0",
               "ROLLBACK_COUNT":"0",
               "READ_SKIP_COUNT":"0",
               "PROCESS_SKIP_COUNT":"0",
               "FILTER_COUNT":"0",
               "WRITE_SKIP_COUNT":"0"
            }
         }
      ]
   },
   {
      "stepExecutionId":51,
      "executionId":39,
      "instanceId":35,
      "stepName":"step2",
      "batchStatus":"COMPLETED",
      "startTime":"2015/03/30 11:10:09.915 -0400",
      "endTime":"2015/03/30 11:10:10.648 -0400",
      "exitStatus":"COMPLETED",
      "metrics":{ 
         "READ_COUNT":"0",
         "WRITE_COUNT":"0",
         "COMMIT_COUNT":"0",
         "ROLLBACK_COUNT":"0",
         "READ_SKIP_COUNT":"0",
         "PROCESS_SKIP_COUNT":"0",
         "FILTER_COUNT":"0",
         "WRITE_SKIP_COUNT":"0"
      },
      "partitions":[ 
         {
            "partitionNumber":0,
            "batchStatus":"COMPLETED",
            "startTime":"2015/03/30 11:10:10.324 -0400",
            "endTime":"2015/03/30 11:10:10.417 -0400",
            "exitStatus":"step2",
            "metrics":{ 
               "READ_COUNT":"0",
               "WRITE_COUNT":"0",
               "COMMIT_COUNT":"0",
               "ROLLBACK_COUNT":"0",
               "READ_SKIP_COUNT":"0",
               "PROCESS_SKIP_COUNT":"0",
               "FILTER_COUNT":"0",
               "WRITE_SKIP_COUNT":"0"
            }
         },
         {
            "partitionNumber":1,
            "batchStatus":"COMPLETED",
            "startTime":"2015/03/30 11:10:10.260 -0400",
            "endTime":"2015/03/30 11:10:10.347 -0400",
            "exitStatus":"step2",
            "metrics":{ 
               "READ_COUNT":"0",
               "WRITE_COUNT":"0",
               "COMMIT_COUNT":"0",
               "ROLLBACK_COUNT":"0",
               "READ_SKIP_COUNT":"0",
               "PROCESS_SKIP_COUNT":"0",
               "FILTER_COUNT":"0",
               "WRITE_SKIP_COUNT":"0"
            }
         },
         {
            "partitionNumber":2,
            "batchStatus":"COMPLETED",
            "startTime":"2015/03/30 11:10:10.507 -0400",
            "endTime":"2015/03/30 11:10:10.557 -0400",
            "exitStatus":"step2",
            "metrics":{ 
               "READ_COUNT":"0",
               "WRITE_COUNT":"0",
               "COMMIT_COUNT":"0",
               "ROLLBACK_COUNT":"0",
               "READ_SKIP_COUNT":"0",
               "PROCESS_SKIP_COUNT":"0",
               "FILTER_COUNT":"0",
               "WRITE_SKIP_COUNT":"0"
            }
         },
         {
            "_links":[
            {
               "rel":"job execution",
               "href":"https://localhost:9443/ibm/api/batch/jobexecutions/9"
            },
            {
               "rel":"job instance",
               "href":"https://localhost:9443/ibm/api/batch/jobinstances/9"
            }
        ]
    }
] 
GET /ibm/api/batch/jobexecutions/ID de ejecución de trabajos/stepexecutions/nombre de paso
Este URI devuelve una matriz JSON que contiene los detalles de ejecución de pasos para la ejecución de trabajos y el nombre de paso especificados.
GET /ibm/api/batch/jobeinstances/ID de instancia de trabajo/jobexecutions/>número de secuencia de ejecución de trabajos/stepexecutions/nombre de paso
Este URI devuelve una matriz JSON que contiene los detalles de ejecución de pasos para la instancia de trabajo, la ejecución de trabajos y el nombre de paso especificados.
GET /ibm/api/batch/stepexecutions/ID de ejecución de pasos
Este URI devuelve una matriz JSON que contiene los detalles de ejecución de pasos para la ejecución de pasos especificada.

Registros de trabajo

GET /ibm/api/batch/jobinstances/ID de instancia de trabajo/joblogs
Este URI devuelve una matriz JSON con enlaces REST a todos los componentes de registro de trabajo para la instancia de trabajo especificada.
GET /ibm/api/batch/jobexecutions/job execution id/joblogs
Este URI devuelve una matriz JSON con enlaces REST a todos los componentes de registro de trabajo para la ejecución de trabajos especificada.
Importante: El ejemplo siguiente muestra el formato de los enlaces REST.
Si la ejecución de trabajos tiene los siguientes componentes de registro de trabajo:
joblogs/instance.inst-id/execution.exec-id/part.1.log
joblogs/instance.inst-id/execution.exec-id/part.2.log
joblogs/instance.inst-id/execution.exec-id/step.step-name/partition.0/part.1.log
joblogs/instance.inst-id/execution.exec-id/step.step-name/partition.1/part.1.log
los enlaces REST correspondientes son:
/ibm/api/batch/jobexecutionsexec-id/joblogs?part=part.1.log
/ibm/api/batch/jobexecutionsexec-id/joblogs?part=part.2.log
/ibm/api/batch/jobexecutionsexec-id/joblogs?part=step.step-name/partition.0/part.1.log
/ibm/api/batch/jobexecutionsexec-id/joblogs?part=step.step-name/partition.1/part.1.log
GET /ibm/api/batch/jobexecutions/job execution id/joblogs
Los parámetros opcionales son:
type = text
Text devuelve todos los registros de trabajo como texto sin formato. Todos los componentes de registro de trabajo se agregan conjuntamente. Se insertan registros de cabecera y pie de página delimitadores de componentes en la corriente para delimitar los distintos componentes a medida que se agregan conjuntamente. Type = text es el valor predeterminado.
type = zip
Zip devuelve todos los registros de trabajo para la ejecución de trabajos o la instancia de trabajo especificada como un archivo comprimido. La estructura de directorios de los registros de trabajo se conserva en el archivo comprimido.
GET /ibm/api/batch/jobexecutions/ID de ejecución de trabajos/joblogs?part=vía de acceso al componente&type=text|zip
Este URI devuelve los componentes de registro de trabajo como texto sin formato (type=text) o en un archivo comprimido (type=zip). El valor predeterminado es type=text.

Códigos de retorno HTTP

A continuación, se muestran los códigos de retorno HTTP para la API REST.
  • HTTP 200 Correcto.
  • HTTP 201 Se creado satisfactoriamente un nuevo recurso.
  • HTTP 202 Se ha aceptado la solicitar, pero el proceso no se ha completado.
  • HTTP 400 Solicitud anómala con parámetros no válidos. Consulte el mensaje devuelto para obtener más detalles.
  • HTTP 401 No está autorizado para acceder a este recurso.
  • HTTP 403 La autenticación ha fallado.
  • HTTP 404 El recurso solicitado no se encuentra o no existe.
  • HTTP 409 La solicitud está en conflicto con el estado actual del recurso. Consulte el mensaje devuelto para obtener más detalles.
  • HTTP 500 Error de servidor interno.

Solicitudes STOP en un entorno de proceso por lotes de servidor distribuido

Las solicitudes de detención enviadas a la API REST por lotes deben enviarse directamente al ejecutor donde se está ejecutando el trabajo. Si se envía una solicitud de detención a un asignador o a un ejecutor donde no se está ejecutando el trabajo, la solicitud se redirige al ejecutor correcto mediante un mensaje de respuesta de redirección HTTP 302. El campo ubicación en la respuesta de redirección HTTP 302 indica el URL correcto que se debe utilizar para la solicitud de detención.

Solicitudes JOBLOGS en un entorno de proceso por lotes de servidor distribuido

Las solicitudes de registros de trabajo enviadas a la API REST por lotes deben enviarse directamente al ejecutor donde se está ejecutando el trabajo. Si se envía una solicitud de registros de trabajos a un asignador o a un ejecutor donde no se está ejecutando el trabajo, la solicitud se redirige al ejecutor correcto mediante un mensaje de respuesta de redirección HTTP 302. El campo ubicación en la respuesta de redirección HTTP 302 indica el URL correcto que se debe utilizar para la solicitud de registros de trabajo.
Nota: Las solicitudes de registros de trabajo enviadas a la API REST por lotes para una instancia de trabajo completa solo funcionan si todas las ejecuciones de trabajos para esa instancia se han ejecutado en el mismo punto ejecutor. Si las ejecuciones se han ejecutado en distintos ejecutores, las solicitudes de registros de trabajo de la instancia fallarán. En este caso, debe captar los registros de trabajo de cada ejecución por separado.

Solicitudes de depuración en un entorno por lotes de servidor distribuido

Las solicitudes de depuración enviadas a la API REST por lotes deben enviarse directamente al ejecutor donde se está ejecutando el trabajo. Si se envía una solicitud de depuración a un asignador o a un ejecutor donde no se está ejecutando el trabajo, la solicitud se redirige al ejecutor correcto mediante un mensaje de respuesta de redirección HTTP 302. El campo ubicación de la respuesta de redirección HTTP 302 indica el URL correcto que se debe utilizar para la solicitud de depuración.
Nota: Las solicitudes de depuración enviadas a la API REST por lotes para una instancia de trabajo completa solo funcionan si todas las ejecuciones de trabajos para esa instancia se han ejecutado en el mismo punto ejecutor. Si las ejecuciones se han ejecutado en distintos ejecutores, las solicitudes de depuración para la instancia fallarán.

Icono que indica el tipo de tema Tema de referencia

Términos y condiciones para centros de información | Comentarios


Icono de indicación de fecha y hora Última actualización: 15 de junio de 2015
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=phil&product=was-libcore-mp&topic=rwlp_batch_rest_api
Nombre de archivo:rwlp_batch_rest_api.html