如何使用在kie工作台中定义的事实(数据对象)并在另一个Java应用程序中触发在kie工作台中定义的所有规则?

时间:2019-05-06 15:43:11

标签: drools kie-workbench drools-kie-server drools-kie-workbench

我是流口水和凯氏工作台的新手。我完成了设置kie工作台,使用工作台创建规则(.drl)和数据对象的工作。我能够进行get调用,并查看另一个Java应用程序中的所有规则。但是如何从该Java应用程序触发这些规则和事实?

我尝试在Java应用程序中定义事实,该事实与kie Workbench中定义的数据对象相同。我使用了这个事实并将其插入kieSession中,并尝试触发所有规则。该程序运行时没有任何错误,但规则未执行。

'''

KieServices ks = KieServices.Factory.get();
KieResources resources = ks.getResources();
String url = "http://127.0.0.1:8080/kie-wb/maven2/org/eRules/1.0/Rules-1.0.jar";

UrlResource urlResource = (UrlResource) resources.newUrlResource(url);
urlResource.setUsername("workbench");
urlResource.setPassword("workbench229");
urlResource.setBasicAuthentication("enabled");
InputStream stream = urlResource.getInputStream();
KieRepository repo = ks.getRepository();
KieModule k = repo.addKieModule(resources.newInputStreamResource(stream));
KieContainer kContainer = ks.newKieContainer(k.getReleaseId());

KieBase kBase = kContainer.getKieBase();
KieSession kSession = kBase.newKieSession();
ResultSet sql_result = sql.Execute( connectionUrl, config.driver, query);


for ( KiePackage a : kBase.getKiePackages()) {
     for (Rule r: a.getRules()) {
    System.out.println("KiePackage {} Rule {}"+ a.getName() + "-" + 
        r.getName());
     }   
}

while (sql_result.next()) {
   obj = new M();                
   obj.setEM(sql_result.getInt("EM"));               
   kSession.insert(obj);     
}
kSession.fireAllRules();        

'''

如何初始化在kie工作台中定义的事实?

0 个答案:

没有答案