Java 中的规则引擎列表

Sheeraz Gul 2023年10月12日
Java 中的规则引擎列表

规则引擎将业务逻辑与源代码分开。本教程描述了一些最流行的 Java 规则引擎。

Java 中的规则引擎列表

规则引擎可以轻松地将业务逻辑与代码分离。Java 中大多数流行的规则引擎都实现了 JSR94。

我们可以将规则引擎视为复杂的 if/then 语句。以下是 Java 中规则引擎的一些优点:

  1. 当我们将它们分开时,规则引擎提供了很好的可重用性。
  2. 规则引擎降低了复杂性,因为我们不需要开发源代码。
  3. 规则引擎提供了灵活性,我们可以在不更改源代码中的任何内容的情况下更改规则。

以下是 Java 中一些著名的规则引擎:

流口水

Drools,也被称为业务规则管理系统 BRMS,提供了一个核心业务规则引擎和一个 Web 创作和规则管理应用程序。它还为带有符号 (DMN) 的决策模型和 Eclipse IDE 插件提供完整的运行时支持。

规则书

RuleBook 提供了一个灵活的简单 DSL;如果我们有更大的规则集合,我们可以将它们构建成带注释的 POJO,RuleBook 会将包转换为规则手册。使用启用 lambda 的特定语言很容易。

让我们使用 RuleBook 尝试一个简单的规则定义:

规则书的 Maven 依赖项是:

<dependency>
    <groupId>com.deliveredtechnologies</groupId>
    <artifactId>rulebook-core</artifactId>
    <version>${version}</version>
</dependency>

现在让我们看一下规则手册示例。让我们首先创建一个规则:

public class DelftstackRule {
  public RuleBook<Object> defineDelftstackRules() {
    return RuleBookBuilder.create()
        .addRule(rule -> rule.withNoSpecifiedFactType().then(f -> System.out.print("Delftstack")))
        .addRule(rule
            -> rule.withNoSpecifiedFactType().then(
                f -> System.out.println("The Best Tutorial Site")))
        .build();
  }
}

上述规则的主要方法是:

public static void main(String[] args) {
  DelftstackRule ruleBook = new DelftstackRule();
  ruleBook.defineDelftstackRules().run(new FactMap<>());
}

简单的规则

Easy Rules 是一个轻量级的规则引擎 API,提供了规则抽象来根据动作和条件创建规则。EasyRule RulesEngine API 通过一组规则来执行操作和测试条件。

它也是注解和基于 POJO 的,还支持复合规则构造;它支持 SpEL 和 MVEL 等表达语言。这是 EasyRule 的示例:

Maven 依赖;

<dependency>
    <groupId>org.jeasy</groupId>
    <artifactId>easy-rules-core</artifactId>
    <version>3.3.0</version>
</dependency>

该示例可以是:

@Rule(name = "Delftstack rule", description = "Always say Delftstack The Best Tutorial Site")
public class DelftstackRule {
  @Condition
  public boolean when() {
    return true;
  }

  @Action
  public void then() throws Exception {
    System.out.println("Delftstack The Best Tutorial Site");
  }
}

上面的代码创建了一个规则,每次打印 Delftstack The Best Tutorial Site。要启动此代码,请使用以下代码和 main 函数:

public class Launch {
  public static void main(String... args) {
    Facts facts = new Facts();

    // create rules
    Rules rules = new Rules();
    rules.register(new DelftstackRule());

    // create a rules engine and fire rules on known facts
    RulesEngine Rules_Engine = new DefaultRulesEngine();
    Rules_Engine.fire(rules, facts);
  }
}

OpenL Tablets

OpenL Tablets 是一个业务规则引擎和一个业务规则管理系统。它包含 Webstudio、Web 服务、规则存储库和业务规则引擎。

让我们看一个例子:

OpenL Tablets 的 Maven 依赖项:

<dependency>
    <groupId>org.openl</groupId>
    <artifactId>org.openl.core</artifactId>
    <version>${version}</version>
</dependency>
<dependency>
    <groupId>org.openl.rules</groupId>
    <artifactId>org.openl.rules</artifactId>
    <version>${version}</version>
</dependency>

该示例可以是:

public class Main {
  private DelftstackRules instance;

  public static void main(String[] args) {
    Main rules = new Main();

    rules.process(aCase);
  }

  public void process(Case aCase) {
    EngineFactory Engine_Factory = new RulesEngineFactory(
        getClass().getClassLoader().getResource("rules.xls"), DelftstackRules.class);
    instance = Engine_Factory.newEngineInstance();
    instance.executePromotion(aCase, new Response());
  }
}

上面的代码从 Xls 文件创建了 delftstack 规则。

这些是一些流行的规则引擎。要下载或了解更多信息,请访问以下链接:

  1. Drools
  2. 规则书
  3. 简易规则
  4. OpenL 平板电脑
作者: Sheeraz Gul
Sheeraz Gul avatar Sheeraz Gul avatar

Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.

LinkedIn Facebook