Как правильно получить доступ к переменным процесса JBPM6

Я начал с этого примера веб-приложения JBPM как основу моего кода. Я внес достаточно изменений, чтобы использовать код для развертывания в JBoss EAP 6.3 с помощью JBPM6.1.0.Final (мне не удалось развернуть его в WildFly 8.1 или 8.2). Я хотел изменить веб-приложение, чтобы на самом деле выполнять некоторые пользовательские базовые задачи, выполняемые человеком. Я создал объект POJO под названием PurchaseRequest и создал переменную процесса типа PurchaseRequest с именем request. Следующий код показывает, как я запускаю процесс.

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;

Я также добавил в сервлет следующий частный метод

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);
}

person Mike    schedule 17.02.2015    source источник
comment
Я бы сказал, что это наиболее правильный способ сделать это прямо сейчас: WorkflowProcessInstance wpi = (WorkflowProcessInstance) processInstance; и вы должны проверить, равна ли переменная pi нулю перед приведением   -  person salaboy    schedule 28.09.2015
comment
Привет, Майк, я пытаюсь установить / обновить переменную процесса, но получаю ту же ошибку. Вот мой вопрос - stackoverflow.com/questions/50613721/   -  person AniSaw    schedule 31.05.2018


Ответы (1)


Обратите внимание, что вы получаете доступ к определению процесса, действительно ли вам это нужно? если вы уже знаете переменные процесса, которые вы определили, вы можете вместо этого просто получить переменные процесса из ProcessInstance.

person salaboy    schedule 18.02.2015
comment
Спасибо, что указали на это @salaboy. Я забыл, что ProcessInstance был интерфейсом, а не классом. Класс реализации на самом деле был RuleFlowProcessInstance, который содержит метод public String getVariable (String variableName); - person Mike; 18.02.2015
comment
Приятно знать, что я все еще могу помочь здесь :) Наслаждайтесь! - person salaboy; 19.02.2015
comment
@Mike, не могли бы вы предоставить обновленный пример того, как получить доступ к переменным экземпляра процесса? Я все еще неуверен / сбит с толку приведенным выше объяснением. Я тоже получаю эту is disconnected ошибку. - person LifeAndHope; 11.09.2015
comment
@ jl987, я добавил правку внизу, чтобы показать код, который я использовал в своем проекте. - person Mike; 11.09.2015