How to Use Easy Rules: A Simple Guide to Java’s Rules Engine

Nov 7, 2023 | Programming

If you’re looking for a lightweight and user-friendly rules engine for Java, look no further than Easy Rules. Inspired by the principles from Martin Fowler’s article, “Should I use a Rules Engine?“, Easy Rules simplifies the process of creating and executing rules with conditions and actions. Below, we’ll dive into how to get started with Easy Rules and troubleshoot some common issues.

Getting Started with Easy Rules

Easy Rules allows you to define rules easily in different formats—whether declaratively via annotations, programmatically using a fluent API, or through an expression language (like MVEL). It also supports composite rules, making it versatile for various applications.

Step 1: Define Your Rule

You can define rules in several ways. Here’s how:

A. Using Annotations


@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!");
    }
}

B. Using Fluent API


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();

C. Using an Expression Language (MVEL)


Rule weatherRule = new MVELRule()
    .name("weather rule")
    .description("if it rains then take an umbrella")
    .when("rain == true")
    .then("System.out.println('It rains, take an umbrella!');");

D. Using a YAML Rule Descriptor


name: weather rule
description: if it rains then take an umbrella
condition: rain == true
actions:
  - System.out.println("It rains, take an umbrella!");

MVELRuleFactory ruleFactory = new MVELRuleFactory(new YamlRuleDefinitionReader());
Rule weatherRule = ruleFactory.createRule(new FileReader("weather-rule.yml"));

Step 2: Fire the Rule

Once your rule is defined, you’ll need to fire it. Here’s how:


public class Test {
    public static void main(String[] args) {
        // Define facts
        Facts facts = new Facts();
        facts.put("rain", true);

        // Define rules
        Rules rules = new Rules();
        rules.register(weatherRule);

        // Fire rules on known facts
        RulesEngine rulesEngine = new DefaultRulesEngine();
        rulesEngine.fire(rules, facts);
    }
}

Understanding the Code: The Gardener’s Rules

Think of Easy Rules as a gardener tending to different plants (rules). Each plant needs specific conditions (like water and sunlight) to thrive. The gardener (Easy Rules API) checks each plant (your defined rules) based on these conditions:

  • The gardener’s notebook would be like your rule definitions: it tells the gardener how to care for each plant (rule).
  • The weather conditions are akin to the facts: they inform the gardener whether water is needed or if the sun is shining.
  • The watering can symbolizes the execution of actions: when it rains (condition met), the gardener acts by taking an umbrella to protect the plants!

Troubleshooting Common Issues

As with any development tool, you may encounter some challenges. Here are a few common issues and their solutions:

  • Error in Rule Definition: Ensure your condition and actions are properly defined and match the rule name.
  • Facts Not Being Recognized: Check if the keys used in facts match the keys referenced in your rules.
  • Version Compatibility: Easy Rules is only addressing bug fixes in version 4.1.x. Ensure you are using this version for the best experience.

For more insights, updates, or to collaborate on AI development projects, stay connected with fxis.ai.

Conclusion

With Easy Rules, managing your application’s logic becomes straightforward and enjoyable. By combining simple rule definitions and an intuitive execution system, you’ll find yourself inspired to automate complex processes with ease.

At fxis.ai, we believe that such advancements are crucial for the future of AI, as they enable more comprehensive and effective solutions. Our team is continually exploring new methodologies to push the envelope in artificial intelligence, ensuring that our clients benefit from the latest technological innovations.

Stay Informed with the Newest F(x) Insights and Blogs

Tech News and Blog Highlights, Straight to Your Inbox