You are pointing to the right place ! i resolved this problem and i remember that i had to instanciate a new kbuilder, a new kbase ,a new env , a new emf for the session to reload as it is a new created session and even a new client for dealing with tasks.
here is the code :
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add(new ClassPathResource(proctoreloadname+".bpmn"), ResourceType.BPMN2);
if (kbuilder.hasErrors()) {
for (KnowledgeBuilderError error : kbuilder.getErrors()) {
System.out.println(">>> Error:" + error.getMessage());
}
System.out.println(">>> Knowledge couldn't be parsed! ");
}
kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
env = EnvironmentFactory.newEnvironment();
emf = Persistence.createEntityManagerFactory("org.jbpm.runtime.ht");
env.set(EnvironmentName.ENTITY_MANAGER_FACTORY, emf);
env.set(EnvironmentName.TRANSACTION_MANAGER, TransactionManagerServices.getTransactionManager());
processInstance = null;
// Let's reload the session
ksessions.add(JPAKnowledgeService.loadStatefulKnowledgeSession(Integer.parseInt(idSessionToReload), kbase, null, env));
ksessions.remove(ksessions.size()-2);
sessionId= ksessions.get(ksessions.size()-1).getId();
// All the listeners and WorkItemHandlers are volatile, so we need to register them each time that we reload the session
// from the DB.
clients.add(createTaskService(emf));
clients.remove(clients.size()-2);
clients.get(clients.size()-1).connect();
localHTWorkItemHandlers.add(new LocalHTWorkItemHandler(clients.get(clients.size()-1), ksessions.get(ksessions.size()-1)));
localHTWorkItemHandlers.remove(localHTWorkItemHandlers.size()-2);
try {
clients.get(clients.size()-1).disconnect();
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
ksessions.get(ksessions.size()-1).getWorkItemManager().registerWorkItemHandler("Human Task", localHTWorkItemHandlers.get(localHTWorkItemHandlers.size()-1));