一、如图:
二、实现类
public class ActivityBehaviourImpl implements ExternalActivityBehaviour{
private static final long serialVersionUID = 1L;
//任务到了马上执行,默认离开
@Override
public void execute(ActivityExecution execution) throws Exception {
System.out.println("发送了通知");
//默认的连接
//execution.takeDefaultTransition();
//使用指定连线名称
//execution.take(transitionName);
//不离开,而是在本活动上等待,直到外部调用signal方法
execution.waitForSignal();
}
//本活动停留了,调用了signalExecution()离开活动之前所执行的代码
//如果execute没停留,不执行此方法
@Override
public void signal(ActivityExecution execution, String signalName, Map<String, ?> parameters) throws Exception {
System.out.println("signal---------");
}
}
三、运用:
public class ProcessDecisition {
private static ProcessEngine processEngine = Configuration.getProcessEngine();
@Test
public void testProcess() throws Exception {
//部署
String deployId = processEngine.getRepositoryService()
.createDeployment()
.addResourceFromClasspath("custom/custom.jpdl.xml")
.addResourceFromClasspath("custom/custom.png")
.deploy();
System.out.println("部署完毕:deployId=="+deployId);
ProcessInstance pi = processEngine.getExecutionService().startProcessInstanceByKey("custom");
System.out.println("启动完毕:processInstanceId=="+pi.getId());
System.out.println("正在执行的活动名称=="+pi.findActiveActivityNames());
}
@Test
public void testSignal() throws Exception {
//jbpm4_execution表中的_id字段
String executionId = "custom.360008";
processEngine.getExecutionService().signalExecutionById(executionId);
}
}