我从这个example JBPM webapp开始,作为我的代码的基础。我做了足够的修改,使用JBPM6.1.0.Final将代码部署到JBoss EAP 6.3中(我无法在WildFly 8.1或8.2中部署它)。我想修改webapp以实际执行一些自定义的基本人工任务交互。我创建了一个名为PurchaseRequest的POJO,并创建了一个名为request的PurchaseRequest类型的流程变量。以下代码是我如何开始这个过程
PurchaseRequest purchaseRequest = new PurchaseRequest(item, user, cost);
Map<String, Object> params = new HashMap<String, Object>();
params.put("request", purchaseRequest);
processInstanceId = processService.startProcess(processId, params);
我添加了以下脚本任务,以显示正在设置流程变量。
if (request == null) {
System.out.println("Output1: request is NULL");
} else {
System.out.println("Output1: request is VALID");
System.out.println("\trequester: "+request.getRequester());
System.out.println("\titem: "+request.getItem());
System.out.println("\tcost: "+request.getCost());
}
在TaskServlet中,我添加了以下实例变量
@Inject
@Singleton
private RuntimeEnvironment runtimeEnvironment;
我还将以下私有方法添加到servlet
private void printTaskInfo(TaskSummary summary) {
RuntimeEngine runtime = processService.getRuntimeManager().getRuntimeEngine(EmptyContext
.get());
KieSession ksession = runtime.getKieSession();
ProcessInstance pi = ksession.getProcessInstance(summary.getProcessInstanceId());
//Exception is occuring on this line
org.kie.api.definition.process.Process procsess = pi.getProcess();
}
当我通过taskService.retrieveTaskList(user)方法检索活动任务时,我循环访问TaskSummary实例的集合并调用上面的私有方法。当我调用该方法时,我收到以下错误
java.lang.RuntimeException: Process instance 1[com.sample.bpmn] is disconnected.
我觉得我可能已经偏离了目标,因为我找不到任何关于如何访问Process Variables的示例。有人能指出我如何从Java EE / CDI容器中正确访问过程变量的示例吗?
编辑: 这是我为JBPM 6.1提出的代码。
public Object getProcessVariable(Long processInstanceId, String variable) {
RuntimeEngine runtime = singletonManager.getRuntimeEngine(EmptyContext.get());
KieSession ksession = runtime.getKieSession();
ProcessInstance pi = ksession.getProcessInstance(processInstanceId);
RuleFlowProcessInstance rfpi = (RuleFlowProcessInstance)pi;
if (rfpi == null) {
return null;
}
return rfpi.getVariable(variable);
}
答案 0 :(得分:2)
请注意,您正在那里访问Process Definition,您真的需要这样做吗?如果您已经知道已定义的过程变量,则可以从ProcessInstance中获取过程变量。