Jboss 访问JBPM6流程变量的正确方法是什么

Jboss 访问JBPM6流程变量的正确方法是什么,jboss,wildfly,jbpm,Jboss,Wildfly,Jbpm,我以这个作为代码的基础。我做了足够的修改,使用JBPM6.1.0.Final将代码部署到JBoss EAP 6.3中(我无法将其部署到WildFly 8.1或8.2中)。我想修改webapp以实际执行一些定制的基本人工任务交互。我创建了一个名为PurchaseRequest的POJO,并创建了一个名为request的PurchaseRequest类型的流程变量。下面的代码是如何启动该过程的 PurchaseRequest purchaseRequest = new PurchaseRequest

我以这个作为代码的基础。我做了足够的修改,使用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);
在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(用户)方法检索活动任务时,我循环遍历TaskSummary实例集合并调用上面的private方法。当我调用该方法时,我得到以下错误

java.lang.RuntimeException: Process instance 1[com.sample.bpmn] is disconnected.
我觉得我可能偏离了目标,因为我找不到任何关于如何访问流程变量的示例。有人能给我举一个例子,说明如何从JavaEE/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);
}

注意,您正在访问其中的流程定义,您真的需要这样做吗?如果您已经知道已定义的流程变量,则可以从ProcessInstance获取流程变量

谢谢你指出这一点。我忘记了ProcessInstance是一个接口而不是类。实现类实际上是RuleFlowProcessInstance,它包含方法公共字符串getVariable(String variableName);很高兴知道我仍然可以在这里帮忙:)享受吧@Mike,你能提供一个关于如何访问流程实例变量的更新示例吗?我对上述解释仍不确定/困惑。我还发现
已断开连接
错误。@jl987,我在底部添加了一个编辑以显示我在项目中最终使用的代码。我想说这是目前最正确的方法:WorkflowProcessInstance wpi=(WorkflowProcessInstance)processInstance;在castingHi Mike之前,您应该检查pi变量是否为null。我正在尝试设置/更新过程变量,但得到相同的错误。这是我的问题-
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);
}