A rule engine can become extremely useful when evaluating situations that would become very difficult to determine through a business process, either because the situation is too complex to make a clear diagram out of the sequence of steps required to evaluate the decision, or because the sequence itself is not relevant to the evaluation itself. In the past, adopting the process engine and the rule engine technologies was complicated due to the integration work required to make both engines share the necessary information to operate as expected. As the rule engine and the process engine were completely different applications, communication protocols had to be established between each other. This usually caused a few problems:
The overall intercommunication architecture needed to have both the rule engine and the process engine collaborating with each other, as shown in the following figure:
In the preceding figure, every arrow you see is a potential communication problem. This is not an issue with jBPM6 and Drools, because the rule and process engine are the same thing. You can seamlessly invoke rule executions from a process instance, and a rule can trigger a specific signal or interact with a particular process instance—all without creating any intercommunication mechanism between both components, unless a clear separation of both engines is desired. This simplifies the initial adoption of rules and processes interactions.