05-30-2012 03:53 AM
========================================="MyWorkFlowDefinition.bpmn20.xml"=========================================
<?xml version="1.0" encoding="UTF-8"?>
<definitions id="definitions"
targetNamespace="http://activiti.org/bpmn20"
xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:activiti="http://activiti.org/bpmn">
<process id="SequenceExecution">
<startEvent id="start" />
<sequenceFlow id="flow1-step1" sourceRef="start" targetRef="step1" />
<serviceTask id="step1" activiti:expression="#{myBean.method1(arg1,arg2,arg3,arg4,execution)} " />
<receiveTask id="flow2-step2" name="flow2-step2" />
<sequenceFlow id="flow3-step2" sourceRef="flow2-step2" targetRef="step2"/>
<serviceTask id="step2" activiti:expression="#{myBean.clearThePain(execution)} " />
<sequenceFlow id="flow4-step3" sourceRef="step2" targetRef="end" />
<endEvent id="end" />
</process>
</definitions>
=============================================Spring Integrated Logic==========================================================================
public class myBean {
//Spring initialized service components like
TaskService taskService;
ManagementService mngService;
RunTimeService runtimeService;
public void method1(String arg1,String arg2,String arg3,String arg4,ActivityExecution execution){
print("Entered method.Proceed for execution …");
//…..invoke external code
String executionId=execution.getId();
String engineProcessId=execution.getProcessInstanceId();
new extBean().executeLogic(this,executionId,engineProcessId);
}
public void clearThePain(){
print("Got the control back to WorkFlowEngine.Executing Final task…");
}
}
=============================================External Logic==========================================================================
public class Extbean{
public Extbean(){}
public void executeLogic(myBean beanObj,String executionId,String processEngineId){
//// Execute the business logic.
myBean myBeanObj=beanObj;
mybBeanObj.getRuntimeService().signal(executionId);
mybBeanObj.getRuntimeService().signal(processEngineId);
mybBeanObj.getRunTimeService().setVariable(executionId,"Var1","ValueForVar1");
mybBeanObj.getRunTimeService().setVariable(processEngineId,"Var1","ValueForVar1");
}
}
C.Challenges Seen
mybBeanObj.getRuntimeService().signal(executionId);
mybBeanObj.getRuntimeService().signal(processEngineId);
mybBeanObj.getRunTimeService().setVariable(executionId,"Var1","ValueForVar1");
mybBeanObj.getRunTimeService().setVariable(processEngineId,"Var1","ValueForVar1");
When I invoke the above code,I see an exception as below
May 30, 2012 12:23:47 PM org.activiti.engine.impl.interceptor.CommandContext close
SEVERE: Error while closing command context
org.activiti.engine.ActivitiException: execution flow1-step1 doesn't exist
at org.activiti.engine.impl.cmd.SignalCmd.execute(SignalCmd.java:50)
at org.activiti.engine.impl.interceptor.CommandExecutorImpl.execute(CommandExecutorImpl.java:24)
at org.activiti.engine.impl.interceptor.CommandContextInterceptor.execute(CommandContextInterceptor.java:42)
at org.activiti.spring.SpringTransactionInterceptor$1.doInTransaction(SpringTransactionInterceptor.java:42)
at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:130)
at org.activiti.spring.SpringTransactionInterceptor.execute(SpringTransactionInterceptor.java:40)
at org.activiti.engine.impl.interceptor.LogInterceptor.execute(LogInterceptor.java:33)
at org.activiti.engine.impl.RuntimeServiceImpl.signal(RuntimeServiceImpl.java:131)
SEVERE: Error while closing command context
org.activiti.engine.ActivitiException: execution flow2-step2 doesn't exist
at org.activiti.engine.impl.cmd.SignalCmd.execute(SignalCmd.java:50)
at org.activiti.engine.impl.interceptor.CommandExecutorImpl.execute(CommandExecutorImpl.java:24)
…………….
D.Help Needed on05-30-2012 06:25 PM
org.activiti.engine.ActivitiException: execution waitServerProvision doesn't exist
What am I doing wrong here?You probably stored some wrong reference somewhere to be used to signal the process.
What is the ideal way of passing reference of current execution context to the external logic such that the WorkFlowEngine can be signalled and activated from its wait state for further execution.Storing/passing on the right information to be used to signal the process. I usually use a combination of business key and receive task name. But it could also be an execution id. Depends…
05-31-2012 10:09 PM
06-13-2012 03:01 AM
<serviceTask id="step2" activiti:expression="#{myBean.clearThePain(execution)} " activiti:async="true" />
Tags
Find what you came for
We want to make your experience in Hyland Connect as valuable as possible, so we put together some helpful links.