drools 添加外部类

最近 使用drools7 开发业务,需要动态加载外部类,看到helper.setClassLoader方法,想着是设置自定义类加载器的,但是不起作用,后来看到一东西

KieFileSystemImpl, 对应的对象是helper.kfs,比较粗暴,刚开始找引用的时候,没有get方法,后来一看是个public对象。     这个是droos 实现的一个文件系统,其实是个内存文件系统,可以把用到的资源写进去。
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();

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章