如何在应用程序代码中输入数据对象并在drools项目中使用workbench创建的jar?

时间:2016-01-13 19:10:51

标签: eclipse jar drools kie-workbench

这是一个从应用程序代码

加载工作台创建的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而不会出现编译错误?

2 个答案:

答案 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 );
}