最近 使用drools7 開發業務,需要動態加載外部類,看到helper.setClassLoader方法,想着是設置自定義類加載器的,但是不起作用,後來看到一東西
OP op = new OP();
DebuggerUtil.op(op);
DebuggerUtil.script(drlScript);
op.setParam(param);
KieHelper helper = new KieHelper();
helper.setClassLoader(new CustomClassLoader());
helper.addContent(drlScript, ResourceType.DRL);
KieSession ksession = helper.build().newKieSession();
ksession.insert(op);
int i = ksession.fireAllRules();
return op.getRes();
改造後的代碼如下:
OP op = new OP();
DebuggerUtil.op(op);
DebuggerUtil.script(drlScript);
op.setParam(param);
KieHelper helper = new KieHelper();
Set<Entry<String, byte[]>> en = CustomClassLoader.getClassStore().entrySet();
for (Entry<String, byte[]> entry : en) {
helper.kfs.write(entry.getKey().replace(".", "/") + ".class", entry.getValue());
}
helper.addContent(drlScript, ResourceType.DRL);
KieSession ksession = helper.build().newKieSession();
ksession.insert(op);
int i = ksession.fireAllRules();