Hello folk.
I am trying to work out the best way to use drools for an application where
I have :
- A domain of @30 fairly complex policy rules each of which has a
Boolean outcome (Fired or Not)
- A domain of @100 "audiences" who apply different subsets of the
policy rules and make their own "Decision" based on the policies that have
fired.
I am very keen:
a) NOT to duplicate the Policy rules themselves
b) To make mapping of audience & policy to decision as simple as
possible - ideally through a table
c) To keep all decision data in the same repository for uniform
version control
My thinking is that I'd have a flow, first execute the policy rules as one
group and save results in working memory and then use these results in an
audience-specific way.
I get stuck at this second step as I cannot find a compact way to handle the
mapping of Audience/Policy to Decision. Logically what I need to achieve is
as follows. E.g. for audience 1, if policy 1 fires, we decide to refer. (If
more than one has fired, decline trumps refer).
Audience policy1 policy2 policy3 policy4 ...
audience1 refer refer decline (n/a)
audience2 (n/a) decline decline (n/a)
...
Clearly I could do this outside Guvnor but then the UI would be outside
Guvnor & the data would be separated from the drools jcr repo.
I hoped to achieve a rule table as follows (fairly compact) but this would
require DISJUNCTION between cols
Audience policy1 policy2 policy3 policy4 Action
audience1 true true refer
audience1 true decline
audience2 true true decline
If I broke out a rule for every combination of audience and policy this
would get very long.
Any smart ideas? Thanks in advance to anyone who spares the time to think on
this one!
Rich
PS. I attempted to post this about 3 hours ago but believe I made a mistake.
Sorry if it comes through as a duplicate