[
https://issues.jboss.org/browse/DROOLS-1021?page=com.atlassian.jira.plugi...
]
Mario Fusco updated DROOLS-1021:
--------------------------------
Summary: Allow to retrieve the KieBase and KieSession models from the KieContainer
(was: Add method on KieContainer to get the KieBase for an ksessionName (without
instantiating the KieSession))
Allow to retrieve the KieBase and KieSession models from the
KieContainer
-------------------------------------------------------------------------
Key: DROOLS-1021
URL:
https://issues.jboss.org/browse/DROOLS-1021
Project: Drools
Issue Type: Enhancement
Components: core engine
Affects Versions: 6.3.0.Final
Reporter: Geoffrey De Smet
Assignee: Mario Fusco
OptaPlanner is switching from using KieBase (with a drl classpath resource to retrieve
the rules) to KContainer (with ksessionName to retrieve the rules), so it can function as
part of a kjar.
During bootstrap, it needs to check the rules if a specific Global is defined.
Currently *it needs to instantiate a throwaway KieSession* to do that which is bad:
{code}
KieSession kieSession = kieContainer.newKieSession(ksessionName); // BAD
KieBase kieBase = kieSession.getKieBase();
checkIfGlobalScoreHolderExists(kieBase);
{code}
It would be much nicer if we could do this instead:
{code}
KieBase kieBase = kieContainer.getKieBaseForKsessionName(ksessionName);
checkIfGlobalScoreHolderExists(kieBase);
{code}
So the proposal is to add that new method kieContainer.getKieBaseForKsessionName(String
ksessionName)
For the record, here's that check method that's being called at bootstrap:
{code}
protected void checkIfGlobalScoreHolderExists(KieBase kieBase) {
boolean hasGlobalScoreHolder = false;
for (KiePackage kiePackage : kieBase.getKiePackages()) {
for (Global global : kiePackage.getGlobalVariables()) {
if (DroolsScoreDirector.GLOBAL_SCORE_HOLDER_KEY.equals(global.getName()))
{
hasGlobalScoreHolder = true;
break;
}
}
}
if (!hasGlobalScoreHolder) {
throw new IllegalArgumentException("The kieBase with kiePackages ("
+ kieBase.getKiePackages()
+ ") has no global field called " +
DroolsScoreDirector.GLOBAL_SCORE_HOLDER_KEY + ".\n"
+ "Check if the rule files are found and if the global field is
spelled correctly.");
}
}
{code}
--
This message was sent by Atlassian JIRA
(v6.4.11#64026)