Test mode

Test mode is a function to test whether the job structure is correct or not when you create it.

Use case

For example, you can validate invalid jobs like following in the test mode.

  • Step is looping
  • Step names duplicate

How to use

1. Press execution button in the job creation page.

image

2. All steps is replaced to the mock and executed.

3. Progress bar turns green when it succeeds.

image

4. Progress bar turns red and error logs is outputted in the console when it failed.

image

API

1. Execute new test

POST /test-executions

Request

{
:bpom "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<bpmn:definitions xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:bpmn=\"http://www.omg.org/spec/BPMN/20100524/MODEL\" xmlns:jsr352=\"http://jsr352/\" xmlns:bpmndi=\"http://www.omg.org/spec/BPMN/20100524/DI\" xmlns:dc=\"http://www.omg.org/spec/DD/20100524/DC\" xmlns:di=\"http://www.omg.org/spec/DD/20100524/DI\" id=\"Definitions_1\" targetNamespace=\"http://bpmn.io/schema/bpmn\">\n  <jsr352:job id=\"Job_1\" isExecutable=\"false\">\n    <jsr352:start id=\"Start_1\">\n      <bpmn:outgoing>Transition_0qj68gv</bpmn:outgoing>\n    </jsr352:start>\n    <jsr352:step id=\"Step_0wzrzrb\">\n      <bpmn:incoming>Transition_1isxcy1</bpmn:incoming>\n      <bpmn:incoming>Transition_0qj68gv</bpmn:incoming>\n      <bpmn:outgoing>Transition_18mid3w</bpmn:outgoing>\n    </jsr352:step>\n    <jsr352:step id=\"Step_0szv8t7\">\n      <bpmn:incoming>Transition_18mid3w</bpmn:incoming>\n      <bpmn:outgoing>Transition_1isxcy1</bpmn:outgoing>\n    </jsr352:step>\n    <jsr352:transition id=\"Transition_18mid3w\" sourceRef=\"Step_0wzrzrb\" targetRef=\"Step_0szv8t7\" />\n    <jsr352:transition id=\"Transition_1isxcy1\" sourceRef=\"Step_0szv8t7\" targetRef=\"Step_0wzrzrb\" />\n    <jsr352:transition id=\"Transition_0qj68gv\" sourceRef=\"Start_1\" targetRef=\"Step_0wzrzrb\" />\n  </jsr352:job>\n  <bpmndi:BPMNDiagram id=\"BPMNDiagram_1\">\n    <bpmndi:BPMNPlane id=\"BPMNPlane_1\" bpmnElement=\"Job_1\">\n      <bpmndi:BPMNShape id=\"_BPMNShape_Start_2\" bpmnElement=\"Start_1\">\n        <dc:Bounds x=\"173\" y=\"102\" width=\"36\" height=\"36\" />\n      </bpmndi:BPMNShape>\n      <bpmndi:BPMNShape id=\"Step_0wzrzrb_di\" bpmnElement=\"Step_0wzrzrb\">\n        <dc:Bounds x=\"249\" y=\"136\" width=\"120\" height=\"100\" />\n      </bpmndi:BPMNShape>\n      <bpmndi:BPMNShape id=\"Step_0szv8t7_di\" bpmnElement=\"Step_0szv8t7\" isExpanded=\"true\">\n        <dc:Bounds x=\"572\" y=\"166\" width=\"120\" height=\"100\" />\n      </bpmndi:BPMNShape>\n      <bpmndi:BPMNEdge id=\"Transition_18mid3w_di\" bpmnElement=\"Transition_18mid3w\">\n        <di:waypoint xsi:type=\"dc:Point\" x=\"369\" y=\"186\" />\n        <di:waypoint xsi:type=\"dc:Point\" x=\"471\" y=\"186\" />\n        <di:waypoint xsi:type=\"dc:Point\" x=\"471\" y=\"216\" />\n        <di:waypoint xsi:type=\"dc:Point\" x=\"572\" y=\"216\" />\n        <bpmndi:BPMNLabel>\n          <dc:Bounds x=\"486\" y=\"191\" width=\"0\" height=\"0\" />\n        </bpmndi:BPMNLabel>\n      </bpmndi:BPMNEdge>\n      <bpmndi:BPMNEdge id=\"Transition_1isxcy1_di\" bpmnElement=\"Transition_1isxcy1\">\n        <di:waypoint xsi:type=\"dc:Point\" x=\"572\" y=\"216\" />\n        <di:waypoint xsi:type=\"dc:Point\" x=\"471\" y=\"216\" />\n        <di:waypoint xsi:type=\"dc:Point\" x=\"471\" y=\"212\" />\n        <di:waypoint xsi:type=\"dc:Point\" x=\"369\" y=\"212\" />\n        <bpmndi:BPMNLabel>\n          <dc:Bounds x=\"486\" y=\"204\" width=\"0\" height=\"0\" />\n        </bpmndi:BPMNLabel>\n      </bpmndi:BPMNEdge>\n      <bpmndi:BPMNEdge id=\"Transition_0qj68gv_di\" bpmnElement=\"Transition_0qj68gv\">\n        <di:waypoint xsi:type=\"dc:Point\" x=\"209\" y=\"120\" />\n        <di:waypoint xsi:type=\"dc:Point\" x=\"229\" y=\"120\" />\n        <di:waypoint xsi:type=\"dc:Point\" x=\"229\" y=\"177\" />\n        <di:waypoint xsi:type=\"dc:Point\" x=\"249\" y=\"177\" />\n        <bpmndi:BPMNLabel>\n          <dc:Bounds x=\"244\" y=\"138.5\" width=\"0\" height=\"0\" />\n        </bpmndi:BPMNLabel>\n      </bpmndi:BPMNEdge>\n    </bpmndi:BPMNPlane>\n  </bpmndi:BPMNDiagram>\n</bpmn:definitions>\n"
}

input

Name Type Description
bpmn String BPMN file content you want to test

Response

{:state-id 1}

2. Get test execution status

GET /test-execution/:state-id

Response

{:log-message "JBERET000007: Failed to run job Job_1, Step_1wdp5if, org.jberet.job.model.Step@762a8334", :log-exception "java.lang.IllegalStateException: JBERET000607: The step Step_1wdp5if would form a loopback in sequence: [Step_1wdp5if, Step_0mjwgb4]\n\tat org.jberet.runtime.runner.StepExecutionRunner.run(StepExecutionRunner.java:108)\n\tat org.jberet.runtime.runner.CompositeExecutionRunner.runStep(CompositeExecutionRunner.java:164)\n\tat org.jberet.runtime.runner.CompositeExecutionRunner.runJobElement(CompositeExecutionRunner.java:128)\n\tat org.jberet.runtime.runner.StepExecutionRunner.run(StepExecutionRunner.java:196)\n\tat org.jberet.runtime.runner.CompositeExecutionRunner.runStep(CompositeExecutionRunner.java:164)\n\tat org.jberet.runtime.runner.CompositeExecutionRunner.runJobElement(CompositeExecutionRunner.java:128)\n\tat org.jberet.runtime.runner.StepExecutionRunner.run(StepExecutionRunner.java:196)\n\tat org.jberet.runtime.runner.CompositeExecutionRunner.runStep(CompositeExecutionRunner.java:164)\n\tat org.jberet.runtime.runner.CompositeExecutionRunner.runFromHeadOrRestartPoint(CompositeExecutionRunner.java:88)\n\tat org.jberet.runtime.runner.JobExecutionRunner.run(JobExecutionRunner.java:59)\n\tat java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)\n\tat java.util.concurrent.FutureTask.run(FutureTask.java:266)\n\tat java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)\n\tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)\n\tat java.lang.Thread.run(Thread.java:745)\n", :batch-status :batch-status/failed}