Слюни с ошибкой загрузчика классов «Ошибка компиляции правила com.drools.dynamic.HelloWorld не может быть преобразована в тип» - PullRequest
0 голосов
/ 11 марта 2019

Drools Версия 7.12.0. Финал

Я пытаюсь динамически загрузить файл DRL и определение класса в механизм Drools, но получаю ошибку при разрешении типа класса.Я смог сузить ошибку, и ее можно воссоздать с помощью следующего кода groovy.

// Define class as string
def path = "com.example.drools.dynamic"
def name = "HelloWorld"
def classDef = """
package ${path}

class ${name} {
    String hello
    boolean fired
}
"""

// Parse class into loader and create an instance
def loader = new GroovyClassLoader()
def myClass = loader.parseClass(classDef)
def bean = myClass.newInstance()
bean.setHello("hello")
bean.setFired(false)

// Rule as string
def myRuleString = """
import ${path}.*;

rule 'test rule'
    when
        test: ${name}(hello == 'hello')
    then
        System.out.println('rule fired');
        test.setFired(true);
end
"""

// Build Drools
def kieServices = KieServices.Factory.get()
def kfs = kieServices.newKieFileSystem()
kfs.write("src/main/resources/dynamicRules.drl", kieServices.getResources().newReaderResource(new StringReader(myRuleString)))
def kieBuilder = kieServices.newKieBuilder(kfs, loader).buildAll()
def kieContainer = kieServices.newKieContainer(kieBuilder.getKieModule().getReleaseId())
def kieSession = kieContainer.newKieBase(kieServices.newKieBaseConfiguration()).newStatelessKieSession()

// Run Drools
def kieCommandFactory = kieServices.getCommands()
def commands = [
    kieCommandFactory.newInsert(bean),
    kieCommandFactory.newFireAllRules("outFired")
]
def execResults = kieSession.execute(kieCommandFactory.newBatchExecution(commands))

Механизм drools способен получать доступ к моему бину и фильтровать его (часть «когда» в строке моего правила),Это можно показать, удалив строку test.setFired(true); в myRuleString.Если эта строка удалена, все работает нормально, и выводится «правило сработало».

Проблема в том, что объект «тест» не может быть решен нигде в движке Drools как экземпляр класса com.example.drools.dynamic.HelloWorld

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...