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();

 

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