Book Image

Mastering JBoss Drools 6

By : Mariano De Maio, Mauricio Salatino, Esteban Aliverti
Book Image

Mastering JBoss Drools 6

By: Mariano De Maio, Mauricio Salatino, Esteban Aliverti

Overview of this book

Mastering JBoss Drools 6 will provide you with the knowledge to develop applications involving complex scenarios. You will learn how to use KIE modules to create and execute Business Rules, and how the PHREAK algorithm internally works to drive the Rule Engine decisions. This book will also cover the relationship between Drools and jBPM, which allows you to enrich your applications by using Business Processes. You will be briefly introduced to the concept of complex event processing (Drools CEP) where you will learn how to aggregate and correlate your data based on temporal conditions. You will also learn how to define rules using domain-specific languages, such as spreadsheets, database entries, PMML, and more. Towards the end, this book will take you through the integration of Drools with the Spring and Camel frameworks for more complex applications.
Table of Contents (18 chapters)
Mastering JBoss Drools 6
Credits
About the Authors
About the Reviewer
www.PacktPub.com
Preface
Index

Controlling loops in rules


So far, we've seen some ways in which we can manage our rules to trigger new rule invocations. This will help us enormously in order to be able to split our rules into simple components that interact in the background through the data in the working memory. Powerful as it is, however, it can bring us a few extra complications along the line of the rules getting fired more times than we desire. Fortunately, Drools provides us with a set of elements to control rule execution from the very syntax where we define them.

The first and the most simple case where we can get into an infinite rule execution loop happens when a rule modifies the working memory in a way that it retriggers itself. Let's see an example of this problem in the following:

rule "Apply 10% discount on notepads"
    when $i: Item(name == "notepad", $sp: salePrice)
    then modify($i) { setSalePrice($sp * 0.9); }
end

In this rule, our intention is to reduce the sale price of the notepads in our inventory...