这是一个从应用程序代码
加载工作台创建的jar文件的代码KieServices ks = KieServices.Factory.get();
KieContainer kContainer = ks.newKieContainer(
ks.newReleaseId("com.myprojects", "myProject", "LATEST"));
KieScanner kScanner = ks.newKieScanner( kContainer );
kScanner.start( 10000L );
KieSession kSession = kContainer.newKieSession("defaultKieSession");
kSession.insert( fact );
如何插入“事实”? 假设数据对象包含名为x的成员。因为jar文件是动态加载的,所以如何使用x而不会出现编译错误?
答案 0 :(得分:0)
一种好的方法是始终将模型类与不同罐子中的规则分开。这样,你的kjar(包含规则的jar)将取决于你的模型jar和你的客户端代码(创建KIE Session的那个)也将取决于你的模型jar。
因为您的客户端代码在“了解”规则之前现在“知道”了模型,所以您可以使用它而不会出现任何编译错误。
希望它有所帮助,
答案 1 :(得分:0)
您必须将'fact'对象的类放入项目类路径中。如果您正在使用maven,那么就像将构建的工作台jar的位置添加到项目pom.xml中一样简单,然后您就可以执行此操作。
示例:
package org.myorg.mydrools.client;
import org.someorg.somepackage.SomeFact;
public void loadAndRun() {
SomeFact fact = new SomeFact();
fact.x = "some message";
KieServices ks = KieServices.Factory.get();
KieContainer kContainer = ks.newKieContainer(
ks.newReleaseId("com.myprojects", "myProject", "LATEST"));
KieScanner kScanner = ks.newKieScanner( kContainer );
kScanner.start( 10000L );
KieSession kSession = kContainer.newKieSession("defaultKieSession");
kSession.insert( fact );
}