JBPM 是否支持消息结束事件?
Does JBPM support message end events?
我正在使用 Jbpm 6.0.3(针对 Jboss EAP 6.1)。我正在尝试开发一个业务流程,它在开始消息中接收数据结构,并且 return 在流程结束时具有相同的结构。我正在尝试使用消息结束事件来结束进程,但 JBPM 似乎不支持它。
作为测试,我做了这个微不足道的过程。它以接收 Date 对象的开始消息开始,return在结束消息事件中使用相同的对象。
实际流程定义如下:
<bpmn2:itemDefinition id="ItemDefinition_2" isCollection="false" structureRef="java.util.Date"/>
<bpmn2:message id="date" itemRef="ItemDefinition_2" name="date"/>
<bpmn2:process id="com.verizon.videa.publishwu.bpm.bp.Scratch" tns:packageName="com.verizon.videa.publishwu.bpm.bp" name="Scratch" isExecutable="true" processType="Private">
<bpmn2:extensionElements>
<tns:import name="java.util.Date"/>
</bpmn2:extensionElements>
<bpmn2:property id="dt" itemSubjectRef="ItemDefinition_2" name="dt"/>
<bpmn2:startEvent id="StartEvent_1" name="StartProcess">
<bpmn2:outgoing>SequenceFlow_1</bpmn2:outgoing>
<bpmn2:dataOutput id="DataOutput_2" itemSubjectRef="ItemDefinition_2" name="event"/>
<bpmn2:dataOutputAssociation id="DataOutputAssociation_1">
<bpmn2:sourceRef>DataOutput_2</bpmn2:sourceRef>
<bpmn2:targetRef>dt</bpmn2:targetRef>
</bpmn2:dataOutputAssociation>
<bpmn2:outputSet id="OutputSet_1" name="Output Set 1">
<bpmn2:dataOutputRefs>DataOutput_2</bpmn2:dataOutputRefs>
</bpmn2:outputSet>
<bpmn2:messageEventDefinition id="MessageEventDefinition_1" messageRef="date"/>
</bpmn2:startEvent>
<bpmn2:endEvent id="EndEvent_1" name="End Event 1">
<bpmn2:incoming>SequenceFlow_1</bpmn2:incoming>
<bpmn2:dataInput id="DataInput_1" itemSubjectRef="ItemDefinition_2" name="Message_2_Input"/>
<bpmn2:dataInputAssociation id="DataInputAssociation_1">
<bpmn2:sourceRef>dt</bpmn2:sourceRef>
<bpmn2:targetRef>DataInput_1</bpmn2:targetRef>
</bpmn2:dataInputAssociation>
<bpmn2:inputSet id="InputSet_1" name="Input Set 1">
<bpmn2:dataInputRefs>DataInput_1</bpmn2:dataInputRefs>
</bpmn2:inputSet>
<bpmn2:messageEventDefinition id="MessageEventDefinition_2" messageRef="date"/>
</bpmn2:endEvent>
<bpmn2:sequenceFlow id="SequenceFlow_1" tns:priority="1" sourceRef="StartEvent_1" targetRef="EndEvent_1"/>
</bpmn2:process>
我已经 运行 解决了两个问题。首先,Jbpm 显然将消息结束事件实现为 "Send Task" 事件。除非我为 "Send Task" 注册一个工作项处理程序,否则该过程将失败。其次,JBPM 中包含的 send task handler 是个笑话。这是处理程序的内容:
public void executeWorkItem(WorkItem workItem, WorkItemManager manager) {
String message = (String) workItem.getParameter("Message");
logger.debug("Sending message: {}", message);
manager.completeWorkItem(workItem.getId(), null);
}
除非消息负载是字符串,否则它会失败并出现 class 转换异常。在记录它正在发送消息后,将消息丢在地板上。
我应该使用其他发送任务处理程序吗?是否有另一种方法 return 比 JBPM 实际支持的流程中的字符串更复杂的东西?
发送消息事件是以抽象的方式定义的,BPMN2规范并没有明确定义它的含义,例如发送电子邮件、即时消息、Web应用程序中的通知等。因此,我们提供一个可插入的实现,您可以在其中使用处理程序插入您自己的实现。
当您说 'return something' 时,您能否说明您的用例是什么,您期望它做什么?除了使用消息事件,您还可以使用特定于领域的任务来精确建模您想要的内容,例如发送电子邮件、推文等。
我正在使用 Jbpm 6.0.3(针对 Jboss EAP 6.1)。我正在尝试开发一个业务流程,它在开始消息中接收数据结构,并且 return 在流程结束时具有相同的结构。我正在尝试使用消息结束事件来结束进程,但 JBPM 似乎不支持它。
作为测试,我做了这个微不足道的过程。它以接收 Date 对象的开始消息开始,return在结束消息事件中使用相同的对象。
实际流程定义如下:
<bpmn2:itemDefinition id="ItemDefinition_2" isCollection="false" structureRef="java.util.Date"/>
<bpmn2:message id="date" itemRef="ItemDefinition_2" name="date"/>
<bpmn2:process id="com.verizon.videa.publishwu.bpm.bp.Scratch" tns:packageName="com.verizon.videa.publishwu.bpm.bp" name="Scratch" isExecutable="true" processType="Private">
<bpmn2:extensionElements>
<tns:import name="java.util.Date"/>
</bpmn2:extensionElements>
<bpmn2:property id="dt" itemSubjectRef="ItemDefinition_2" name="dt"/>
<bpmn2:startEvent id="StartEvent_1" name="StartProcess">
<bpmn2:outgoing>SequenceFlow_1</bpmn2:outgoing>
<bpmn2:dataOutput id="DataOutput_2" itemSubjectRef="ItemDefinition_2" name="event"/>
<bpmn2:dataOutputAssociation id="DataOutputAssociation_1">
<bpmn2:sourceRef>DataOutput_2</bpmn2:sourceRef>
<bpmn2:targetRef>dt</bpmn2:targetRef>
</bpmn2:dataOutputAssociation>
<bpmn2:outputSet id="OutputSet_1" name="Output Set 1">
<bpmn2:dataOutputRefs>DataOutput_2</bpmn2:dataOutputRefs>
</bpmn2:outputSet>
<bpmn2:messageEventDefinition id="MessageEventDefinition_1" messageRef="date"/>
</bpmn2:startEvent>
<bpmn2:endEvent id="EndEvent_1" name="End Event 1">
<bpmn2:incoming>SequenceFlow_1</bpmn2:incoming>
<bpmn2:dataInput id="DataInput_1" itemSubjectRef="ItemDefinition_2" name="Message_2_Input"/>
<bpmn2:dataInputAssociation id="DataInputAssociation_1">
<bpmn2:sourceRef>dt</bpmn2:sourceRef>
<bpmn2:targetRef>DataInput_1</bpmn2:targetRef>
</bpmn2:dataInputAssociation>
<bpmn2:inputSet id="InputSet_1" name="Input Set 1">
<bpmn2:dataInputRefs>DataInput_1</bpmn2:dataInputRefs>
</bpmn2:inputSet>
<bpmn2:messageEventDefinition id="MessageEventDefinition_2" messageRef="date"/>
</bpmn2:endEvent>
<bpmn2:sequenceFlow id="SequenceFlow_1" tns:priority="1" sourceRef="StartEvent_1" targetRef="EndEvent_1"/>
</bpmn2:process>
我已经 运行 解决了两个问题。首先,Jbpm 显然将消息结束事件实现为 "Send Task" 事件。除非我为 "Send Task" 注册一个工作项处理程序,否则该过程将失败。其次,JBPM 中包含的 send task handler 是个笑话。这是处理程序的内容:
public void executeWorkItem(WorkItem workItem, WorkItemManager manager) {
String message = (String) workItem.getParameter("Message");
logger.debug("Sending message: {}", message);
manager.completeWorkItem(workItem.getId(), null);
}
除非消息负载是字符串,否则它会失败并出现 class 转换异常。在记录它正在发送消息后,将消息丢在地板上。
我应该使用其他发送任务处理程序吗?是否有另一种方法 return 比 JBPM 实际支持的流程中的字符串更复杂的东西?
发送消息事件是以抽象的方式定义的,BPMN2规范并没有明确定义它的含义,例如发送电子邮件、即时消息、Web应用程序中的通知等。因此,我们提供一个可插入的实现,您可以在其中使用处理程序插入您自己的实现。
当您说 'return something' 时,您能否说明您的用例是什么,您期望它做什么?除了使用消息事件,您还可以使用特定于领域的任务来精确建模您想要的内容,例如发送电子邮件、推文等。