来自骆驼接收任务的激活引发错误"ActivitiIllegalArgumentException: Business key is null"



请共享任何链接以使用camel配置activiti。我能得到的所有例子都是显示SERVICETASK->CAMELROUTE->FILE,然后是FILE->RECEVETASK(Activiti)

这涉及到一些业务密钥,我不知道到底是什么

我需要一个显示SERVICE TASK(维修任务)->CAMEL ROUTE(摄像头路线)->RECEIVETASK(通知活动)的示例。我不知道为什么,但这个例子给了我错误

文件:activiti-flow.bpmn20.xml:

<process id="camelprocess" name="My process" isExecutable="true">
<startEvent id="startevent1" name="Start"></startEvent>
<serviceTask id="servicetask1" name="Service Task" activiti:async="true" activiti:delegateExpression="${camel}"></serviceTask>
<receiveTask id="receivetask1" name="Receive Task"></receiveTask>
<endEvent id="endevent1" name="End"></endEvent>
<sequenceFlow id="flow1" sourceRef="startevent1" targetRef="servicetask1"></sequenceFlow>
<sequenceFlow id="flow2" sourceRef="servicetask1" targetRef="receivetask1"></sequenceFlow>
<sequenceFlow id="flow3" sourceRef="receivetask1" targetRef="endevent1"></sequenceFlow>

activiti-camel-spring.xml

<bean id="camel" class="org.activiti.camel.CamelBehaviour">
    <constructor-arg index="0">
        <list>
            <bean class="org.activiti.camel.SimpleContextProvider">
                <constructor-arg index="0" value="camelprocess" />
                <constructor-arg index="1" ref="camelContext" />
            </bean>
        </list>
    </constructor-arg>
</bean>
<camel:camelContext id="camelContext">
    <camel:route>
        <camel:from uri="activiti:camelprocess:servicetask1"/>
        <camel:to uri="bean:serviceActivator?method=doSomething(${body})"/>
        <camel:to uri="activiti:camelprocess:receivetask1"/>
    </camel:route> 
</camel:camelContext>

错误为:

 1|ERROR|org.slf4j.helpers.MarkerIgnoringBase:161||||>> Failed delivery for (MessageId:    ID-viscx73-PC-49557-1376961951564-0-1 on ExchangeId: ID-viscx73-PC-49557-1376961951564-0-2). Exhausted after delivery attempt: 1 caught:       org.activiti.engine.ActivitiIllegalArgumentException: Business key is null 
at   org.activiti.engine.impl.ProcessInstanceQueryImpl.processInstanceBusinessKey(ProcessInstanceQueryImpl.java:87)
at org.activiti.camel.ActivitiProducer.findProcessInstanceId(ActivitiProducer.java:78)
at org.activiti.camel.ActivitiProducer.signal(ActivitiProducer.java:58)
at org.activiti.camel.ActivitiProducer.process(ActivitiProducer.java:49)
at         org.apache.camel.util.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process     (AsyncProcessorConverterHelper.java:61)
at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)

所有具有ACTIVITI->CAMELROUT(文件)的论坛/链接在其他路由CAMEL_FILE->RECEVETASK

他们建议添加一些键,如PROCESS_key_PROPERTY或PROCESS_ID_PROPERTY我不知道这些属性适合

我正试着从链接的例子中学习http://bpmn20inaction.blogspot.in/2013/03/using-camel-routes-in-activiti-made.html

我不确定是将服务任务交给骆驼后的流程,根本没有移动到接收任务并在那里等待,还是camel找不到接收任务

请分享一些关于的建议

感谢

它通过添加内置的camel队列来工作,如示例所示。我以为它们只是作为各种路线的例子。但通过传递到队列,实际上ServiceTask在camel中是异步的,后来从队列中读取并调用activiti 中的接收任务

<camel:to uri="seda:tempQueue"/>
<camel:from uri="seda:tempQueue"/>

感谢

我不知道你是否解决了这个问题,但实际上我也面临着同样的问题。

最后,我找到了解决问题的办法。

事实上,必须提供PROCESS_ID_PROPERTY属性是正确的,否则activiti引擎不知道执行哪个流程实例。因此,当将JMS发送到activemq时,我只需在标头中设置PROCESS_ID_PROPERTY值,当消息返回时,只需从标头中设置属性。类似的东西:

from("activiti:process:simpleCall").setHeader("PROCESS_ID_PROPERTY", simple("${property.PROCESS_ID_PROPERTY}")).to("activemq:queue:request");
from("activemq:queue:reply").setProperty("PROCESS_ID_PROPERTY", simple("${header.PROCESS_ID_PROPERTY}")).to("activiti:process:simpleReceive");

希望它能帮助你。

相关内容

  • 没有找到相关文章

最新更新