问题描述
<?xml version="1.0" encoding="UTF-8"?>
<bpmn:deFinitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="DeFinitions_0m0cnse" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="4.2.0">
<bpmn:process id="Process_1aegwvb" isExecutable="true">
<bpmn:sequenceFlow id="Flow_1dfd8um" sourceRef="StartEvent_1" targetRef="Activity_047mv6x" />
<bpmn:endEvent id="Event_1vradpp">
<bpmn:incoming>Flow_19hnbhv</bpmn:incoming>
</bpmn:endEvent>
<bpmn:sequenceFlow id="Flow_19hnbhv" sourceRef="Activity_047mv6x" targetRef="Event_1vradpp" />
<bpmn:startEvent id="StartEvent_1">
<bpmn:outgoing>Flow_1dfd8um</bpmn:outgoing>
<bpmn:timerEventDeFinition id="TimerEventDeFinition_1ah7red">
<bpmn:timeCycle xsi:type="bpmn:tFormalExpression">0 0/5 * * * ?</bpmn:timeCycle>
</bpmn:timerEventDeFinition>
</bpmn:startEvent>
<bpmn:serviceTask id="Activity_047mv6x" name="Get users" camunda:class="*.Cron">
<bpmn:incoming>Flow_1dfd8um</bpmn:incoming>
<bpmn:outgoing>Flow_19hnbhv</bpmn:outgoing>
</bpmn:serviceTask>
</bpmn:process>
<bpmndi:BPMNDiagram id="BPMNDiagram_1">
<bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="Process_1aegwvb">
<bpmndi:BPMNEdge id="Flow_19hnbhv_di" bpmnElement="Flow_19hnbhv">
<di:waypoint x="370" y="117" />
<di:waypoint x="432" y="117" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1dfd8um_di" bpmnElement="Flow_1dfd8um">
<di:waypoint x="215" y="117" />
<di:waypoint x="270" y="117" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="Event_1vradpp_di" bpmnElement="Event_1vradpp">
<dc:Bounds x="432" y="99" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Event_11i5xth_di" bpmnElement="StartEvent_1">
<dc:Bounds x="179" y="99" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_01expgb_di" bpmnElement="Activity_047mv6x">
<dc:Bounds x="270" y="77" width="100" height="80" />
</bpmndi:BPMNShape>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</bpmn:deFinitions>
camunda / webapps / engine-rest / WEB-INF / lib / camunda / webapps / camunda / WEB-INF / lib /
如果我在Camunda Webapp中或通过REST API手动启动此过程,则它可以正常工作并完成需要的工作。但是每5分钟我就会在日志中看到问题。
-
Cron.java:
公共类Cron实现JavaDelegate {
@Override public void execute(DelegateExecution delegateExecution) { System.out.println("Test"); }
}
2020年9月24日10:40:05.164严重[pool-2-thread-3] org.camunda.commons.logging.BaseLogger.logError ENGINE-16006 BPMN堆栈跟踪: Activity_047mv6x(活动执行,ProcessInstance [4ed42252-fe52-11ea-9efd-12baf36f6a87]) Activity_047mv6x,名称=获取用户 ^ | StartEvent_1
2020年9月24日10:40:05.166严重[pool-2-thread-3] org.camunda.commons.logging.BaseLogger.logError ENGINE-16004关闭命令上下文时发生异常:ENGINE-09008实例化类时发生异常' .Cron':ENGINE-09017无法加载类' .Cron': .Cron org.camunda.bpm.engine.ProcessEngineException:ENGINE-09008实例化类' .Cron'时发生异常:ENGINE-09017无法加载类'* .Cron':* .Cron 在org.camunda.bpm.engine.impl.util.EngineUtilLogger.exceptionWhileInstantiatingClass(EngineUtilLogger.java:81)上......
原因:java.lang.classNotFoundException:*。Cron 在java.net.urlclassloader.findClass(urlclassloader.java:382) 在java.lang.classLoader.loadClass(ClassLoader.java:424) 在java.lang.classLoader.loadClass(ClassLoader.java:357) 在java.lang.class.forName0(本地方法) 在java.lang.class.forName(Class.java:348) 在org.camunda.bpm.engine.impl.util.ReflectUtil.loadClass(ReflectUtil.java:87) ...还有92
解决方法
您的流程模型包含一个实现类型为Java Class的用户任务。 Java类名称设置为:* .Cron 因此,当您运行该过程时,引擎将尝试查找并实例化此名称的类。
https://docs.camunda.org/manual/latest/user-guide/process-engine/delegation-code/
要实现可在流程执行期间调用的类,此 班级需要实施 org.camunda.bpm.engine.delegate.JavaDelegate接口并提供 execute方法中的必需逻辑。流程执行到达时 在这一特定步骤,它将执行在 方法,并以默认的BPMN 2.0方式保留活动。
您需要更改流程模型以引用实际存在的类(https://docs.camunda.org/manual/latest/reference/bpmn20/tasks/service-task/)或使用其他实现方法。
您的Docker映像可能基于Camunda BPM运行。在此发行版中,可以将其他jar放在 userlib 文件夹中。 https://docs.camunda.org/manual/latest/user-guide/camunda-bpm-run/ 但是,由于您似乎在Java世界中并不熟悉,因此您可能需要考虑一种不同的方法来调用服务。例如,您可以将服务任务的实现更改为脚本任务或外部服务任务
https://docs.camunda.org/manual/latest/reference/bpmn20/tasks/script-task/
https://docs.camunda.org/manual/latest/reference/bpmn20/tasks/service-task/
,通过使用Cron类包装战争创建独特的模块来解决问题。 然后将其添加为另一个Web应用程序。