我以這個example JBPM webapp作爲我的代碼的基礎開始。我做了足夠的修改,以便使用JBPM6.1.0.Final在JBoss EAP 6.3中部署代碼(我無法在WildFly 8.1或8.2中部署它)。我想修改webapp來實際執行一些自定義的基本人工任務交互。我創建了一個名爲PurchaseRequest的POJO,並創建了類型爲PurchaseRequest的名爲request的流程變量。下面的代碼是我如何啓動該過程什麼是正確的方式來訪問JBPM6過程變量
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.
我覺得我可能已經偏離偏離目標,因爲我無法找到如何訪問過程變量的任何實例。任何人都可以向我指出一個如何從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);
}
我會說這是現在最正確的做法:WorkflowProcessInstance wpi =(WorkflowProcessInstance)processInstance; 並且你應該在鑄造之前檢查pi變量是否爲空 – salaboy 2015-09-28 08:29:47