Error in Custom workitem Handler
mpankaj123 Dec 10, 2013 10:51 PMI am trying to get process variables in a custom work item handler. My process has a human task immediately after it starts. That triggers execution of the custom work item handler. I try to retrieve process variables in the handler but the getProcessInstance() throws error because jBPM has not written byteArray yet into the processInstanceInfo table.
Can any one help me with writing this correctly. I am using jBPM 6. Is there a better way?
Regards,
P.
Here is the code
public class TaskWorkItemHandler implements WorkItemHandler {
public void executeWorkItem(WorkItem workItem, WorkItemManager manager) {
KieSession ksession = ProcessRun.getSession();
long procId = workItem.getProcessInstanceId();
ProcessInstance p = ksession.getProcessInstance(procId); // return exception
WorkflowProcessInstance w = (WorkflowProcessInstance)p;
System.out.println(w.getVariable("recordId"));
System.out.println(workItem.getName());
}
}
public class ProcessRun
{
public void run()
{
try
{
KieSession ksession = getSession();
JPAWorkingMemoryDbLogger logger = new JPAWorkingMemoryDbLogger(ksession);
HashMap<String,Object> h = new HashMap<String,Object>();
h.put("recordId","11");
ProcessInstance pi = ksession.startProcess( "com.sample.evaluation",h );
}
catch (Exception e)
{
e.printStackTrace();
}
}
public static KieSession getSession()
{
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add(ResourceFactory.newFileResource("c:\\temp\\HR.bpmn"), ResourceType.BPMN2);
KnowledgeBase kbase = kbuilder.newKnowledgeBase();
EntityManagerFactory emf = Persistence.createEntityManagerFactory( "org.jbpm.persistence.jpa" );
Environment env = KnowledgeBaseFactory.newEnvironment();
env.set( EnvironmentName.ENTITY_MANAGER_FACTORY, emf );
env.set( EnvironmentName.TRANSACTION_MANAGER,TransactionManagerServices.getTransactionManager() );
KieSession ksession =
JPAKnowledgeService.newStatefulKnowledgeSession(kbase, null, env );
ksession.getWorkItemManager().registerWorkItemHandler("Human Task", new TaskWorkItemHandler());
return ksession;
}
}