The problem had been fixed after we made the StatefulKnowledgeSession as a singleton object.
private StatefulKnowledgeSession getStatefulKnowledgeSession() throws Exception {
/////////// when we add this return and never dispose the ksession, the problem seems disappare.
if ( ksession != null && ksession.getWorkItemManager()!=null ){
return ksession;
}
/////////
KnowledgeBase kbase = readKnowledgeBase();
ksession = JPAKnowledgeService.newStatefulKnowledgeSession(kbase, null, env);
CommandBasedWSHumanTaskHandler humanTaskHandler = new CommandBasedWSHumanTaskHandler(ksession);
ksession.getWorkItemManager().registerWorkItemHandler("Human Task", humanTaskHandler);
SystemEventListenerFactory.setSystemEventListener(new SystemEventListener());
TaskClient taskClient = new TaskClient(new MinaTaskClientConnector("MinaConnector",
new MinaTaskClientHandler(SystemEventListenerFactory.getSystemEventListener())));
taskClient.connect("127.0.0.1", 9123);
humanTaskHandler.setClient(taskClient);
humanTaskHandler.connect();
return ksession;
}