0

这是从应用程序代码加载工作台创建的 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 而不会出现编译错误?

4

2 回答 2

0

一个好的方法总是将模型类与不同 jar 中的规则分开。这样,您的 kjar(包含规则的 jar)将取决于您的模型 jar,而您的客户端代码(创建 KIE 会话的代码)也将取决于您的模型 jar。

因为您的客户端代码现在甚至在“知道”规则之前“知道”模型,所以您可以使用它而不会出现任何编译错误。

希望能帮助到你,

于 2016-01-14T10:03:54.737 回答
0

您必须将“事实”对象的类放入您的项目类路径中。如果您使用的是 maven,那么只需将构建的工作台 jar 的位置添加到您的项目 pom.xml 中,然后您就可以执行此操作。

例子 :

包 org.myorg.mydrools.client;

导入 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 );
}
于 2016-11-09T16:46:21.623 回答