Bug Multiple Container not working.

First created was defining the rulebasepackage for the others
This commit is contained in:
Nicolas Héron 2018-10-11 17:03:28 +02:00
commit 5d6aff13a5
3 changed files with 50 additions and 24 deletions

View file

@ -159,6 +159,7 @@ public class GenericResource {
try {
KieContainerInstance kci = registry.getContainer(id);
Set<Class<?>> classes = kci.getExtraClasses();
Class foundClass = this.getClassFromName(classes, className);
if (foundClass != null) {

View file

@ -130,6 +130,7 @@ public class DroolsChtijbugKieServerExtension implements KieServerExtension {
}
kieContainerInstance.addExtraClasses(extraClasses);
this.rulesExecutionService.createRuleBasePackage(id, kieContainerInstance);
}
@ -160,6 +161,8 @@ public class DroolsChtijbugKieServerExtension implements KieServerExtension {
kieServerLoggingDefinition.OnDisposeKieBase();
}
}
kieContainerInstance.clearExtraClasses();
rulesExecutionService.removeRuleBasePackage(id);
}
@Override

View file

@ -31,6 +31,9 @@ import org.kie.server.services.api.KieServerRegistry;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.HashMap;
import java.util.Map;
/**
* Direct rules execution service that allow use of typed objects instead of string only
*/
@ -38,7 +41,7 @@ public class DroolsChtijbugRulesExecutionService {
private static final Logger logger = LoggerFactory.getLogger(DroolsChtijbugRulesExecutionService.class);
private KieServerRegistry context;
private RuleBasePackage ruleBasePackage = null;
private Map<String, RuleBasePackage> ruleBasePackages = new HashMap<>();
private MessageHandlerResolver messageHandlerResolver;
private int MaxNumberRulesToExecute = 20000;
private KieServerAddOnElement kieServerAddOnElement = null;
@ -67,17 +70,23 @@ public class DroolsChtijbugRulesExecutionService {
return kieServerAddOnElement;
}
public ChtijbugObjectRequest FireAllRulesAndStartProcess(KieContainerInstance kci, ChtijbugObjectRequest chtijbugObjectRequest, String processID, String sessionName, int sessionMaxNumberRulesToExecute) {
public void removeRuleBasePackage(String id) {
if (this.ruleBasePackages.containsKey(id) == true) {
RuleBasePackage ruleBasePackage = this.ruleBasePackages.get(id);
ruleBasePackage.dispose();
this.ruleBasePackages.remove(id);
}
Object result = null;
try {
}
public void createRuleBasePackage(String id, KieContainerInstance kci) {
if (kci != null
&& kci.getKieContainer() != null
&& ruleBasePackage == null) {
&& kci.getKieContainer() != null) {
if (this.ruleBasePackages.containsKey(id) == false) {
KieContainer kieContainer = kci.getKieContainer();
ruleBasePackage = new RuleBaseSingleton(kieContainer, sessionMaxNumberRulesToExecute, kieServerAddOnElement);
RuleBasePackage ruleBasePackage = new RuleBaseSingleton(kieContainer, this.MaxNumberRulesToExecute, kieServerAddOnElement);
if (kieServerAddOnElement != null) {
for (KieServerGlobalVariableDefinition kieServerGlobalVariableDefinition : kieServerAddOnElement.getKieServerGlobalVariableDefinitions()) {
kieServerGlobalVariableDefinition.OnCreateKieBase(kieServerAddOnElement.getGlobals());
@ -89,8 +98,20 @@ public class DroolsChtijbugRulesExecutionService {
kieServerLoggingDefinition.OnCreateKieBase();
}
}
this.ruleBasePackages.put(id, ruleBasePackage);
}
}
}
public ChtijbugObjectRequest FireAllRulesAndStartProcess(KieContainerInstance kci, ChtijbugObjectRequest chtijbugObjectRequest, String processID, String sessionName, int sessionMaxNumberRulesToExecute) {
Object result = null;
try {
RuleBasePackage ruleBasePackage = this.ruleBasePackages.get(kci.getResource().getContainerId());
if (ruleBasePackage != null) {
ChtijbugHistoryListener chtijbugHistoryListener = new ChtijbugHistoryListener();
RuleBaseSession session = ruleBasePackage.createRuleBaseSession(sessionMaxNumberRulesToExecute, chtijbugHistoryListener, sessionName);
if (kieServerAddOnElement != null) {
@ -109,6 +130,7 @@ public class DroolsChtijbugRulesExecutionService {
chtijbugObjectRequest.setObjectRequest(result);
logger.debug("Returning OK response with content '{}'", chtijbugObjectRequest.getObjectRequest());
session.dispose();
}
return chtijbugObjectRequest;
} catch (DroolsChtijbugException e) {