[jboss-jira] [JBoss JIRA] (DROOLS-1021) Add method on KieContainer to get the KieBase for an ksessionName (without instantiating the KieSession)

Geoffrey De Smet (JIRA) issues at jboss.org
Wed Jan 6 11:22:00 EST 2016


Geoffrey De Smet created DROOLS-1021:
----------------------------------------

             Summary: Add method on KieContainer to get the KieBase for an ksessionName (without instantiating the KieSession)
                 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)


More information about the jboss-jira mailing list