package com.sample; import java.util.List; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; import org.drools.core.command.runtime.process.GetProcessInstanceByCorrelationKeyCommand; import org.drools.core.command.runtime.process.StartCorrelatedProcessCommand; import org.jbpm.test.JBPMHelper; import org.kie.api.KieBase; import org.kie.api.KieServices; import org.kie.api.runtime.KieContainer; import org.kie.api.runtime.KieSession; import org.kie.api.runtime.manager.RuntimeEngine; import org.kie.api.runtime.manager.RuntimeEnvironmentBuilder; import org.kie.api.runtime.manager.RuntimeManager; import org.kie.api.runtime.manager.RuntimeManagerFactory; import org.kie.api.task.TaskService; import org.kie.api.task.model.TaskSummary; import org.kie.internal.KieInternalServices; import org.kie.internal.process.CorrelationKey; import org.kie.internal.process.CorrelationKeyFactory; import org.kie.internal.runtime.manager.context.ProcessInstanceIdContext; public class ProcessMain { public static void main(String[] args) { KieServices ks = KieServices.Factory.get(); KieContainer kContainer = ks.getKieClasspathContainer(); KieBase kbase = kContainer.getKieBase("kbase"); RuntimeManager manager = createRuntimeManager(kbase); CorrelationKeyFactory factory = KieInternalServices.Factory.get().newCorrelationKeyFactory(); CorrelationKey key = factory.newCorrelationKey("mybusinesskey123"); StartCorrelatedProcessCommand start = new StartCorrelatedProcessCommand("com.sample.bpmn.hello", key); manager.getRuntimeEngine(ProcessInstanceIdContext.get()).getKieSession().execute(start); GetProcessInstanceByCorrelationKeyCommand get = new GetProcessInstanceByCorrelationKeyCommand(key); manager.getRuntimeEngine(ProcessInstanceIdContext.get()).getKieSession().execute(get); System.exit(0); } private static RuntimeManager createRuntimeManager(KieBase kbase) { JBPMHelper.startH2Server(); JBPMHelper.setupDataSource(); EntityManagerFactory emf = Persistence .createEntityManagerFactory("org.jbpm.persistence.jpa"); RuntimeEnvironmentBuilder builder = RuntimeEnvironmentBuilder.Factory .get().newDefaultBuilder().entityManagerFactory(emf) .knowledgeBase(kbase); return RuntimeManagerFactory.Factory.get() .newPerProcessInstanceRuntimeManager(builder.get(), "com.sample:example:1.0"); } } This is the output: Exception in thread "main" java.lang.IllegalStateException: Invalid session was used for this context org.kie.internal.runtime.manager.context.ProcessInstanceIdContext@61bc6e07 at org.jbpm.runtime.manager.impl.PerProcessInstanceRuntimeManager.validate(PerProcessInstanceRuntimeManager.java:145) at org.jbpm.persistence.processinstance.JPAProcessInstanceManager.getProcessInstance(JPAProcessInstanceManager.java:90) at org.jbpm.persistence.processinstance.JPAProcessInstanceManager.getProcessInstance(JPAProcessInstanceManager.java:84) at org.jbpm.persistence.processinstance.JPAProcessInstanceManager.getProcessInstance(JPAProcessInstanceManager.java:208) at org.jbpm.process.instance.ProcessRuntimeImpl.getProcessInstance(ProcessRuntimeImpl.java:230) at org.drools.core.impl.StatefulKnowledgeSessionImpl.getProcessInstance(StatefulKnowledgeSessionImpl.java:1887) at org.drools.core.command.runtime.process.GetProcessInstanceByCorrelationKeyCommand.execute(GetProcessInstanceByCorrelationKeyCommand.java:58) at org.drools.core.command.runtime.process.GetProcessInstanceByCorrelationKeyCommand.execute(GetProcessInstanceByCorrelationKeyCommand.java:32) at org.drools.core.command.impl.DefaultCommandService.execute(DefaultCommandService.java:36) at org.drools.core.command.impl.AbstractInterceptor.executeNext(AbstractInterceptor.java:41) at org.drools.persistence.SingleSessionCommandService$TransactionInterceptor.execute(SingleSessionCommandService.java:509) at org.drools.core.command.impl.AbstractInterceptor.executeNext(AbstractInterceptor.java:41) at org.drools.persistence.jpa.OptimisticLockRetryInterceptor.execute(OptimisticLockRetryInterceptor.java:73) at org.drools.core.command.impl.AbstractInterceptor.executeNext(AbstractInterceptor.java:41) at org.drools.persistence.jta.TransactionLockInterceptor.execute(TransactionLockInterceptor.java:60) at org.drools.persistence.SingleSessionCommandService.execute(SingleSessionCommandService.java:353) at org.drools.core.command.impl.CommandBasedStatefulKnowledgeSession.execute(CommandBasedStatefulKnowledgeSession.java:478) at com.sample.ProcessMain.main(ProcessMain.java:48)