drools规则引擎源码解析
文章目录
一、规则编译
org.drools.compiler.kie.builder.impl.KieBuilderImpl#buildAll(java.util.function.BiFunction<org.drools.compiler.kie.builder.impl.InternalKieModule,java.lang.ClassLoader,org.drools.compiler.kie.builder.impl.KieModuleKieProject>, java.util.function.Predicate<java.lang.String>)
=>
org.drools.compiler.kie.builder.impl.AbstractKieProject#buildKnowledgePackages(org.drools.compiler.kproject.models.KieBaseModelImpl, org.drools.compiler.kie.builder.impl.ResultsImpl, java.util.function.Predicate<java.lang.String>)
=>
org.drools.compiler.kie.builder.impl.KieBuilderImpl#buildKieProject(org.drools.compiler.kie.builder.impl.ResultsImpl, org.drools.compiler.kie.builder.impl.KieModuleKieProject, org.drools.compiler.compiler.io.memory.MemoryFileSystem)
=>
org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl#build(boolean)
编译
org.drools.compiler.builder.impl.KnowledgeBuilderImpl#buildRules
编译规则集
=>
org.drools.compiler.builder.impl.KnowledgeBuilderImpl#compileKnowledgePackages
编译规则包(重点)
=>
org.drools.compiler.builder.impl.KnowledgeBuilderImpl#compileFunctions
编译function(此处dialect一定为java)
=>
org.drools.mvel.java.JavaDialect#addFunction
增加function (此处使用JavaCompiler源码编译工具类,因此依赖java源码或class字节码)
org.drools.mvel.java.JavaDialect#addFunction
编译function
- function编译举例
function String hello(String applicantName) {
return "Hello " + applicantName + "!";
}
编译结果
package com.example.demo;
import com.example.demo.*;
import com.example.drools.Person;
public class Hello implements java.io.Externalizable {
private static final long serialVersionUID = 510l;
public static String hello(String applicantName) throws Exception {
return "Hello " + applicantName + "!";
}
public void writeExternal(java.io.ObjectOutput out) throws java.io.IOException {
}
public void readExternal(java.io.ObjectInput in) throws java.io.IOException, java.lang.ClassNotFoundException {
}
}
未完待续……