java - 流口水,直接用java规则

标签 java drools rule-engine

有没有办法通过直接在java中完全实现规则条件来使用drools,就像在

中一样

https://github.com/j-easy/easy-rules (查看“声明式方式”部分和“编程方式”部分)

类似的东西:

@Rule(name = "weather rule", description = "if it rains then take an umbrella" )
public class WeatherRule {

@Condition
public boolean itRains(@Fact("rain") boolean rain) {
    return rain;
}

@Action
public void takeAnUmbrella() {
    System.out.println("It rains, take an umbrella!");
}
}

或者也许

Rule weatherRule = new RuleBuilder()
    .name("weather rule")
    .description("if it rains then take an umbrella")
    .when(facts -> facts.get("rain").equals(true))
    .then(facts -> System.out.println("It rains, take an umbrella!"))
    .build();

最佳答案

最近添加了一项新功能,使用户能够在 Java 模型中表示规则 [1]。您可以使用此功能以纯 Java 构建规则。有一个测试类,您可以检查它以查看一些示例。参见此处[2]。您可以选择 PatternDSL 或 FlowDSL(哪个更适合您)。

要获取具有 Java 规则的 KieBase,您可以执行以下操作(如链接文档中所述):

Model model = new ModelImpl().addRule( rule );
KieBase kieBase = KieBaseBuilder.createKieBaseFromModel( model );

[1] https://docs.jboss.org/drools/release/7.15.0.Final/drools-docs/html_single/index.html#executable-model-con_kie-apis
[2]https://github.com/kiegroup/drools/blob/3826ee0c95fe139041880f52f3e00309b7907871/drools-model/drools-canonical-model/src/test/java/org/drools/model/FlowDSLTest.java#L21

关于java - 流口水,直接用java规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54032296/

相关文章:

Java:为什么不覆盖 "this( )"?

java - 有没有什么简单的方法来执行所有的 .目录下的drl文件

java - 如何获取简单规则.jar 文件?

java - PatternDescr 内的 Drools AndDescr(和 OrDescr)

java - 在 Drools 中,如何检查列表是否不包含具有特定值的对象?

java - 当具有包含无限循环的函数(监视器)时如何在 Drools 中触发规则?

java - 流口水专家/求解器 - 5.0.1 匹配

java - Apache Qpid :Error while running qpid-server. bat

java - 无效使用 SingleClientConnManager : connection still allocated

java - 如何为返回带有泛型的函数的方法声明泛型